[英]Problem with Slerp Rotation Coroutine Unity3D
我有一個要在檢查條件時平滑旋轉90度的對象。
我的問題是旋轉可以正常且平滑地進行,但對象沒有達到最終旋轉(90度),達到81度並停止! 我的代碼有什么問題?
腳本:
void Update() {
if (Objects.Length == 0)
{
if (!Rotated)
{
StartCoroutine(RotateMe(Vector3.up * 90, 1f));
Rotated = true;
}
}
}
IEnumerator RotateMe(Vector3 byAngles, float inTime)
{
var fromAnglePlat = Platform.transform.rotation;
var toAnglePlat = Quaternion.Euler(Platform.transform.eulerAngles + byAngles);
for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
{
Platform.transform.rotation = Quaternion.Slerp(fromAnglePlat, toAnglePlat, t);
yield return null;
}
}
t < 1
t
永遠不會等於1,因此,將不會執行最終旋轉(至90度)。
您應該在循環之后添加Platform.transform.rotation = toAnglePlat
以確保確切的所需旋轉是協程終止之前的最后一個旋轉(這將始終是正確的,而t <= 1
仍然會失敗,因為0.995
小於1 ,但從增量時間開始加上0.02
將大於1)。
在處理slerp和lerp時,請務必記住't'參數是百分比(以十進制形式表示,所以0-1,而不是0-100),而不是線性增加。 您錯過了一個重要的變量,這是您要讓腳踝持續的時間。 通常用於獲取“ t”參數的公式是t = timeSinceStart /持續時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.