AudioSource错误

时间:2011-11-19 04:42:09

标签: unity3d unityscript

我正在按照书中的指示来组合一个简单的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.AudioSource.Play'对于参数列表'(UnityEngine.AudioClip)'被发现了。

我真的很感激你的帮助。

5 个答案:

答案 0 :(得分:1)

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

pop.clip = ...

对Unity 3d的简短搜索提到分配剪辑,并检查它是否已准备好播放。

答案 1 :(得分:1)

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

原因在于,统一允许3D声音,即在3D空间中具有位置的声音,并且如果靠近它则会增加音量。音频源显然是声音的来源,而Audio Listener就是你的耳朵所在。通常,音频监听器在您的角色上。但是你可以对它进行装配,使其位于任何对象上,但是那个对象必须靠近音频源,而不是角色,这根本没有任何意义。

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

答案 2 :(得分:1)

您必须使用audio.PlayOneShot(pop)代替audio.Play()

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

使用以下代码,并确保通过将弹出声音从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)  

答案 3 :(得分:1)

您需要分配变量。这就像是

pop.clip = (anything here)

答案 4 :(得分: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意味着声音不会循环或任何东西,我认为你想要枪声或类似声音。在括号内,您只需命名您想要播放的声音。