当玩家低于 Y 0.5 位置时播放声音

本文关键字:位置 播放声音 玩家 | 更新日期: 2023-09-27 18:30:18

我的代码:

void Update() 
{
    //Restart level
    if (gameObject.transform.position.y < -0.5) 
    {
        PlayerPrefs.SetInt("CubePointsLvl", 0);
        StartCoroutine( Wait3Seconds() );
        //rigidbody.AddForce(0,-100000,0);
        //transform.position = new Vector3(inputSpawnX, inputSpawnY, inputSpawnZ);
    }
}
//Wait 3 second
IEnumerator Wait3Seconds()
{
    audio.PlayOneShot(DeadSound, 1.0F);
    yield return new WaitForSeconds (0.3f);
    Application.LoadLevel(Application.loadedLevel);
}

我想在玩家处于 Y 0.5 位置以下时播放声音,然后游戏重新启动。但是当我调试代码时,声音是循环的,我知道为什么,但我不知道如何解决它。我该怎么做?还有解释?我正在使用 C#。

当玩家低于 Y 0.5 位置时播放声音

您在播放器低于-0.5的每一帧都启动一个新的协程,而不是在播放器第一次低于-0.5时只执行一次。 可以使用标志来防止再次启动协程。

private bool alreadyDead = false;
public void Update() {
    // Only execute if we've gone below -0.5 for the first time
    if (gameObject.transform.position.y < -0.5 && 
        alreadyDead == false) 
    {
        // Set a flag indicating this has been executed
        alreadyDead = true;
        PlayerPrefs.SetInt("CubePointsLvl", 0);
        StartCoroutine( Wait3Seconds() );
    }
}
public IEnumerator Wait3Seconds()
{
    audio.PlayOneShot(DeadSound, 1.0F);
    yield return new WaitForSeconds (0.3f);
    Application.LoadLevel(Application.loadedLevel);
}