我有一個協同程序,每當玩家到達遊戲中的某個點時,我的相機就會向上移動。我使用了協同程序,以便相機隨着時間的推移平穩移動。隨着時間的推移統一協程運動不一致/準確?
這裏是我的代碼片段:
private IEnumerator MoveCameraUpCoroutine(Vector3 startPos, Vector3 endPos, float duration)
{
float elapsedTime = 0;
while(elapsedTime < duration)
{
transform.position = Vector3.Lerp(startPos, endPos, (elapsedTime/duration));
elapsedTime += Time.deltaTime;
yield return null;
}
}
public void MoveCameraUp(Vector3 startPos, Vector3 endPos, float duration)
{
StartCoroutine(MoveCameraUpCoroutine(startPos, endPos, duration));
}
在我的控制器腳本,我只是叫我協同程序是這樣的:
cam.GetComponent<CameraMovement>().MoveCameraUp(cam.transform.position,
new Vector3(cam.transform.position.x, cam.transform.position.y + setupLevel.heightOfBlock, cam.transform.position.z),
0.1f);
的問題,這是相機的運動並不總是在應該停止的地方保持一致。我做了一些調試。在第一次運行時,相機移動到了0.7864508 yPos
。第二次運行時,相機移至0.7789915 yPos
。等不一致。
但是當我簡單地使用Translate
而不是我的協程:
cam.transform.Translate(0, setupLevel.heightOfBlock, 0);
我在0.7876318
得到相機的yPos一致的最終價值,這正是我需要的。但是這段代碼並不能平穩地移動相機,這不是我想要的。
有誰知道如何解決這個協程問題?我不知道,但我認爲我的協程代碼有問題。任何幫助是極大的讚賞。
當你說Translate不能平穩地移動相機時,你能詳細說明一下你的意思嗎? –
@VenkatatAxiomStudios我的意思是,如果我簡單地稱爲翻譯,它不會隨着時間的推移相機。該動作看起來像是相機從pointA傳送到pointB,希望有意義 – aresz