1

我正在按照书中的指示来组装一个简单的 FPS。但是,我没有得到与书中所说的相同的结果。

我一直在尝试做的最后一件事是为我的“枪”添加声音,以便在您开火时播放此声音剪辑“pop.wav”。

这是我采取步骤添加声音之前的工作代码。

var projectile : Rigidbody;
var speed = 50;

function Update () {
    if(Input.GetButtonDown("Fire1"))
    {
        var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
        Vector3(0,-1,0), transform.rotation);
        instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
        Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);  
    }
}    

所以我按照书上说的做了,导入了Pop.wav。然后它说在脚本中添加两行简单的代码。

var projectile : Rigidbody;
var speed = 50;
var pop : AudioClip;

function Update () {
    if(Input.GetButtonDown("Fire1"))
    {
        var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
        Vector3(0,-1,0), transform.rotation);
        instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
        Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);

        audio.Play(pop);    
    }
}    

Assets/FireProjectile.js(12,27):BCE0023:找不到参数列表“(UnityEngine.AudioClip)”的“UnityEngine.AudioSource.Play”的适当版本。

我真的很感激这方面的一些帮助。

4

5 回答 5

1

实际上,您忽略了脚本之外的一些内容。实际上,您确实需要在场景中添加一个音频侦听器和一个音频源。然后,您将能够听到声音。

这样做的原因是统一允许 3D 声音,即声音在 3D 空间中有一个位置,如果你靠近它会增加音量。Audio Source 显然是声音的来源,Audio Listener 是你耳朵所在的地方,可以这么说。通常,音频听众在您的角色上。但是你可以将它装配到任何物体上,但是那个物体必须靠近音频源,而不是角色,这根本没有任何意义。

但是,请记住一次只能有一个音频监听器。允许无限音频源。:)

于 2011-12-01T21:11:09.020 回答
1

您必须使用audio.PlayOneShot(pop)而不是audio.Play().

但是如果你想使用audio.Play();你应该知道它不接受 AudioClip 作为参数。

使用以下代码并确保通过将 pop 声音从 Project 拖动到检查器来将 pop 分配给 Audio Source 组件的 Audio Clip 属性。audio.Play()在 AudioSource 中使用默认分配的音频剪辑。

var projectile : Rigidbody;
var speed = 50;

function Update () {
    if(Input.GetButtonDown("Fire1"))
{
    var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
Vector3(0,-1,0), transform.rotation);
    instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
    Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);

audio.Play();        

    }
}

@script RequireComponent(AudioSource)  
于 2012-04-02T10:56:11.850 回答
1

我没有看到您将要播放的文件分配给音频剪辑...类似于

pop.clip = ...

对 unity 3d 的简短搜索提到了分配剪辑,并检查它是否可以播放。

于 2011-11-19T06:20:38.240 回答
1

您需要分配变量。会是这样的

pop.clip = (anything here)

于 2013-11-05T21:54:54.003 回答
0

根据 Unity 文档(我从未使用过 Unity,所以我不能确定这是正确的),我发现您可能想要做这样的事情。

var projectile : Rigidbody;
var speed = 50;
var pop : AudioClip;

...

if(Input.GetButtonDown("Fire1"))
{
    var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position +
    Vector3(0,-1,0), transform.rotation);
    instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0,0,speed));
    Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);

    audio.PlayOneShot(pop);
}

这实际上就是你所要做的。分配一个变量,然后让它在更新函数中播放,每当按下 Fire1 时,默认为 LMB。

PlayOneShot 意味着声音不会循环或任何东西,我假设你想要枪声或类似的东西。在括号内,您只需命名您想要播放的声音。

于 2011-11-19T06:30:15.943 回答