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;
并将音频重命名为其他名称。这样做是个好主意。
我想让我的游戏在玩家与硬币碰撞时播放声音,但声音没有播放。我没有收到任何错误。我在 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;
并将音频重命名为其他名称。这样做是个好主意。