我希望我的游戏在玩家与硬币发生碰撞时发出声音,但声音不会播放。我没有收到任何错误。我将声音附加到Unity中的音频源和脚本。
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class TriggerCoin : MonoBehaviour
{
//TODO
//Counter of collected coins
public AudioClip coinSound;
new AudioSource audio;
void Start()
{
audio = GetComponent<AudioSource>();
}
void Update()
{
}
void OnTriggerEnter2D(Collider2D other)
{
GameObject gObj = other.gameObject;
if (gObj.CompareTag("Player"))
{
Debug.Log("You picked up coin!");
audio.PlayOneShot(coinSound, 0.8f);
Destroy(gameObject);
}
}
}
答案 0 :(得分:1)
请参阅以下问题:
audio = GetComponent<AudioSource>();
显示AudioSource
附加到此脚本或GameObject附加此脚本(TriggerCoin
)。
然后播放音频:audio.PlayOneShot(coinSound, 0.8f);
立即销毁GameObject:Destroy(gameObject);
。
被破坏的GameObjbect也持有AudioSource
,所以它需要AudioSource
才能死掉。
解决方案:
将AudioSource
附加到执行不销毁的空GameObject。我们称之为“AudioHolder”,然后发现它播放音频。
GameObject obj = GameObject.Find("AudioHolder");
AudioSource aud = obj.GetComponent<AudioSource>();
aud.PlayOneShot(coinSound, 0.8f);
注意:
删除new AudioSource audio;
并将音频重命名为其他内容。这样做是个好主意。