【问题标题】:audio.PlayOneShot doesn't work in Unityaudio.PlayOneShot 在 Unity 中不起作用
【发布时间】:2017-08-24 01:19:06
【问题描述】:

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

【问题讨论】:

  • 认为这可能是因为您在播放剪辑更改之前破坏了游戏对象。尝试延迟破坏,Destroy(gameObject, 1f);

标签: c# unity3d unity5 unity2d


【解决方案1】:

看下面的问题:

audio = GetComponent&lt;AudioSource&gt;(); 表示 AudioSource 已附加到此脚本或此脚本 (TriggerCoin) 已附加到的游戏对象。

然后你播放音频: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; 并将音频重命名为其他名称。这样做是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多