如何在Unity中的更新中使用协程等待几秒钟来旋转相机? (C#)

时间:2015-07-13 11:09:47

标签: c# android unity3d coroutine

这是我的代码的一部分:

void Update(){
CameraFlip();
}
void CameraFlip(){
        Quaternion target = Quaternion.Euler (0, 0, 180);
        cameraTransform.rotation = Quaternion.Slerp (cameraTransform.rotation, target, Time.deltaTime * 4.0f);
        Debug.Log (cameraTransform.rotation.ToString ());
        StartCoroutine("CameraFlipCoroutine");
    }

    public IEnumerator CameraFlipCoroutine(){
        yield return new WaitForSeconds (Random.Range(6f,12f));
        if (gameIsPlaying == false)
            yield return null;
        Quaternion target = Quaternion.Euler (0, 0, 0);
        cameraTransform.rotation = Quaternion.Slerp (cameraTransform.rotation, target, Time.deltaTime * 4.0f);
        Debug.Log (cameraTransform.rotation.ToString ());
    }

所以我想做的是如果在更新方法中发生了某些事情,则以180度角旋转相机。 (例如,玩家击中敌人)几秒钟后,相机会回到原来的位置。

使用我的代码,第一部分是好的,它按照我想要的方式转动但是当协程部分到来时,它开始转动但是它滞后而且不顺畅。

我不知道。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

我猜它会滞后因为你多次调用它。在Update()上你每秒都会多次调用CameraFlip函数。

您可以做些什么来查看问题是否正在创建一个bool变量:

private bool testingFlip = false;

然后在需要时检查它,例如:

void Update(){
    if (!testingFlip){`       
        CameraFlip();
        testingFlip = true;
    }
}

在某些时候,你再次将它弄错,以便在需要时使用它。这不是花哨的,但它是测试是否导致滞后的好方法。