让声音触发工作

Getting a sound trigger to work

我不明白为什么我的声音触发器不起作用。我创建了一个 GameObject 并向其添加了一个音频源(在音频源上我选中了 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;
     }

 }

如你所说:

I have pretty much unchecked all the audio listeners

必须启用附加到 Main Camera 的组件 AudioListener。可能您已经使用了 LoadLevelAdditive,所以您有两个摄像头和两个 AudioListener 组件,每个组件上都有一个。请确保此附加相机和任何其他游戏对象应禁用此组件。

此外 在运行时,您可以在 Hierarchy window 搜索中使用此搜索附加了 AudioListener 组件的组件酒吧.

t:AudioListener

这应该能帮到你。还要使用 Debug.Log 仔细检查 OnControllerColliderHit 函数调用并且 Audio.clip 在赋值后不为空。 Update 也有必要播放声音吗?

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

var Audio= gameObject.GetComponent(AudioSource);

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