如何在Unity中使用更新内的协同程序等待几秒钟来旋转相机?(C#)
这是我代码的一部分:如何在Unity中使用更新内的协同程序等待几秒钟来旋转相机?(C#),c#,android,unity3d,coroutine,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 (c
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个角度。(例如,玩家击中敌人)几秒钟后,摄像机返回到其原始位置
在我的代码中,第一部分是可以的,它按照我的要求转动,但是当协同程序部分出现时,它开始转动,但是它滞后了,而且不平滑
我不知道。还有其他方法吗?我想它是滞后的,因为您多次调用它。在更新()时,您每秒多次调用函数CameraFlip() 要想知道这是否是问题所在,可以创建一个bool变量,如下所示:
private bool testingFlip = false;
然后在需要时进行检查,例如:
void Update(){
if (!testingFlip){`
CameraFlip();
testingFlip = true;
}
}
在某种程度上,当你需要它的时候,你又把它弄错了。这并不奇怪,但它是一种很好的方法,可以测试这是否是导致延迟的原因。这不好,因为
cameraTransform.rotation=Quaternion.Slerp(cameraTransform.rotation,target,Time.deltaTime*4.0f)代码>此代码需要多次调用才能启动。