重装场景前播放死亡声音

问题描述 投票:0回答:1

我有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");
}

我不明白要怎么做才能修复这个错误

编辑。声音有一秒长

c# unity3d
1个回答
1
投票

你可以把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");
}

0
投票

您可以在加载场景时使用 DontDestroyOnLoad() 办法


0
投票

虽然不知道这是否能解决这个问题,但把声音移到碰撞检测中会不会有用呢?

另一个解决方法可能是在死亡后再玩一次的功能,这将延迟场景变化,直到用户交互,这可能会给足够的时间来播放声音。根据游戏的想法,这种交互可能会在以后变成'重生在'[最新检查点][原点][关卡开始][游戏开始]......或者你能想到的其他功能。

最后你可以把SceneManager.LoadScene放在1秒的延时上,如果没有其他事情发生,而且用户在这段时间内无论如何都不能做任何事情(除了对着屏幕骂死人),那可能会给声音播放的时间。

© www.soinside.com 2019 - 2024. All rights reserved.