获得合理的触发器

时间:2015-07-11 08:58:58

标签: audio unity3d triggers unityscript

我不明白为什么我的声音触发不起作用。我创建了一个GameObject并为其添加了一个音频源(在Audio Source上我检查了Play On WakeLoop。然后我添加了一个Sphere Collider(我检查了Is Trigger)。最后,我添加了我的脚本并将声音片段添加到了检查器中.Unity还说:"There are 2 audio listeners in the scene."我几乎没有检查所有的音频听众,它仍然说出来,我做错了什么?

以下是我的代码:

 #pragma strict

 var WalkAudio:AudioClip; 
 var OutCry:AudioClip; 

 function Update (){

     var Audio= gameObject.GetComponent(AudioSource);

     if(Input.GetButton("Horizontal") || Input.GetButton("Vertical"))
     {

         Audio.Play();
     }
     else
     {

         Audio.Pause();
     }
 }

 function OnControllerColliderHit (hit : ControllerColliderHit)
 {
     var Audio= gameObject.GetComponent(AudioSource);

     if (hit.gameObject.tag == "templeFloor")
     {
         var groundType = 1;
         print("Temple");
         Audio.clip=OutCry;
     }

     else{
         Audio.clip=WalkAudio;
     }

 }

1 个答案:

答案 0 :(得分:1)

正如你所说:

  

我几乎取消选中所有音频监听器

必须启用附加到AudioListener 的组件Main Camera 。可能你使用了LoadLevelAdditive,因此你有两个摄像头和两个AudioListener组件,每个组件各有一个。请确保此添加剂相机和任何其他游戏对象应禁用此组件。

在运行时,您可以在AudioListener窗口搜索栏中搜索哪个组件附加了Hierarchy组件。

t:AudioListener

这应该会帮助你。同时使用Debug.Log进行双重检查OnControllerColliderHit函数调用,Audio.clip在赋值后不为空。还需要在Update中播放声音吗?

此外,由于性能成本的原因,您应该将此行从Update移至Start函数:

var Audio= gameObject.GetComponent(AudioSource);

并在整个脚本中使用此Audio变量。