2015-07-13 44 views
0

這是我的代碼部分:如何在Unity Update中使用協程來等待幾秒鐘來旋轉攝像頭? (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個角度來旋轉攝像頭。 (例如,玩家擊中敵人)幾秒鐘後,相機回到原來的位置。

使用我的代碼,第一部分是OK,它會變成我想要的,但是當協程部分到來時,它開始轉動,但它滯後,並且不光滑。

我不知道。有沒有其他方法可以做到這一點?

回答

0

我想它是滯後的,因爲你多次調用它。在Update()中,你每秒鐘都會多次調用函數CameraFlip()。

你可以做什麼,看看如果是這樣的問題是建立一個布爾變量就像這樣:

private bool testingFlip = false; 

然後你選擇了它,當你需要它,因爲爲例:

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

而且在某些情況下,如果您需要它,請再次使用它。這不是幻想,但它是一個很好的方法來測試是否是造成滯後的原因。

+0

這是不好的,因爲'cameraTransform.rotation = Quaternion.Slerp(cameraTransform.rotation,target,Time.deltaTime * 4.0f);'這段代碼需要多次調用才能使其翻轉。 – Gabe