audio.PlayOneShot在Unity中不起作用

时间:2017-08-23 17:09:12

标签: c# unity3d unity5 unity2d

我希望我的游戏在玩家与硬币发生碰撞时发出声音,但声音不会播放。我没有收到任何错误。我将声音附加到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);      
            }
    }
}

1 个答案:

答案 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;并将音频重命名为其他内容。这样做是个好主意。