audio.PlayOneShot 在 Unity 中不起作用

audio.PlayOneShot doesn't work in Unity

我想让我的游戏在玩家与硬币碰撞时播放声音,但声音没有播放。我没有收到任何错误。我在 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);      
            }
    }
}

查看下面的问题:

audio = GetComponent<AudioSource>(); 表示 AudioSource 附加到此脚本或此脚本 (TriggerCoin) 附加到的 GameObject。

然后你播放音频:audio.PlayOneShot(coinSound, 0.8f);

并立即销毁游戏对象:Destroy(gameObject);

被摧毁的 GameObjbect 也持有 AudioSource,因此它需要 AudioSource 才能死亡。

解决方案:

AudioSource 附加到一个 不会 销毁的空游戏对象。我们称它为 "AudioHolder" 然后找到它并播放音频。

GameObject obj = GameObject.Find("AudioHolder");

AudioSource aud = obj.GetComponent<AudioSource>();

aud.PlayOneShot(coinSound, 0.8f);

注:

删除 new AudioSource audio; 并将音频重命名为其他名称。这样做是个好主意。