我有1个场景(是无限级游戏)
当玩家死亡时(发生了碰撞),声音不能完全播放所有的声音,因为它重新加载太快。
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag != currentColor && collision.tag != "Score")
{
playerDeath();
}
}
private void playerDeath()
{
SoundManagerScript.PlaySound("Error");
score = 0;
// SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
SceneManager.LoadScene("Infinity Level");
}
我不明白要怎么做才能修复这个错误
编辑。声音有一秒长
你可以把playerDeath()函数改成一个函数,然后做一个延迟,比如说
private IEnumerator playerDeath()
{
SoundManagerScript.PlaySound("Error");
yield return new WaitWhile (()=> SoundManagerScript.source.isPlaying)
score = 0;
// SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
SceneManager.LoadScene("Infinity Level");
}
您可以在加载场景时使用 DontDestroyOnLoad() 办法
虽然不知道这是否能解决这个问题,但把声音移到碰撞检测中会不会有用呢?
另一个解决方法可能是在死亡后再玩一次的功能,这将延迟场景变化,直到用户交互,这可能会给足够的时间来播放声音。根据游戏的想法,这种交互可能会在以后变成'重生在'[最新检查点][原点][关卡开始][游戏开始]......或者你能想到的其他功能。
最后你可以把SceneManager.LoadScene放在1秒的延时上,如果没有其他事情发生,而且用户在这段时间内无论如何都不能做任何事情(除了对着屏幕骂死人),那可能会给声音播放的时间。