void OnAnimatorIK()
{
if (changeWeight == true && change == false)
{
StartCoroutine(changeValueOverTime(1, 0, 5));
change = true;
}
}
和
IEnumerator changeValueOverTime(float fromVal, float toVal, float duration)
{
float counter = 0f;
while (counter < duration)
{
if (Time.timeScale == 0)
counter = Time.unscaledDeltaTime;
else
counter = Time.deltaTime;
float val = Mathf.Lerp(fromVal, toVal, counter / duration);
animator.SetLookAtWeight(val, val, val, val, val);
yield return null;
}
}
問題是更改 SetLookAtWeight 值只能在 OnAnimatorIK 內完成
我希望它在 x 秒后慢慢恢復自然外觀。
如果我試圖在編輯器中更改 IEnumerator changeValueOverTime 內的 SetLookAtWeight,我會在控制臺中收到一條訊息:
設定和獲取身體位置/旋轉、IK 目標、Lookat 和 BoneLocalRotation 應該只在 OnAnimatorIK 或 OnStateIK 中完成 UnityEngine.Animator:SetLookAtWeight (single,single,single,single,single)
在線上 :
animator.SetLookAtWeight(val, val, val, val, val);
uj5u.com熱心網友回復:
OnAnimatorIK作為Animator 更新回圈的一部分在物理塊中重復呼叫,類似于FixedUpdate。
我認為基本上你寧愿這樣做
bool isChanging;
float counter;
void OnAnimatorIK()
{
if (changeWeight)
{
if (Time.timeScale == 0)
counter = Time.unscaledDeltaTime;
else
counter = Time.deltaTime;
var val = Mathf.Lerp(1f, 0f, counter / 5f);
animator.SetLookAtWeight(val, val, val, val, val);
if(counter >= 1f) changeWeight = false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365429.html
上一篇:c#“靜態”變數不回傳值
