Assertion failed on expression for Quaternion.Lerp四元数报错

Assertion failed on expression for Quaternion.Lerp

错误信息:
Assertion failed on expression: ‘!CompareApproximately(aScalar, 0.0F)’
UnityEngine.Quaternion:LerpUnclamped (UnityEngine.Quaternion,UnityEngine.Quaternion,single)

报错信息来源:Quaternion.Lerp

 transform.rotation = Quaternion.Lerp(transform.rotation, spline.GetExtraData(m_normalizedT, extraDataLerpAsQuaternionFunction), 10* deltaTime);

报错是因为四元数插值出现问题,上述代码可能在两端都有一个(0,0,0,0)四元数

有以下几种方式判断问题及解决方案
1、当使用Time.deltatime 作为第三个参数的一部分时,会发生此错误。尝试通过以下方式进行更改

  transform.rotation = Quaternion.Lerp(transform.rotation, spline.GetExtraData(m_normalizedT, extraDataLerpAsQuaternionFunction), 10* deltaTime); 
  transform.rotation = Quaternion.Lerp(transform.rotation, spline.GetExtraData(m_normalizedT, extraDataLerpAsQuaternionFunction), 10* 0.01f);

2、当第三个参数大于 1 时,会发生错误。尝试通过以下方式进行更改

 transform.rotation = Quaternion.Lerp(teansform.rotation, spline.GetExtraData(m_normalizedT, extraDataLerpAsQuaternionFunction), 10* deltaTime);
 float t =  Mathf.Clamp(Time.deltaTime * 10, 0f, 0.99f);
transform.rotation = Quaternion.Lerp(teansform.rotation, spline.GetExtraData(m_normalizedT, extraDataLerpAsQuaternionFunction), t);

3、通过归一化解决,
在一些地方你可以得到一个Quaternion(0,0,0,0), 只需规范化它四元数Quaternion(0,0,0,0).normalized == Quaternion(0,0,0,1) == Quternion.identity
归零 即可:

 transform.rotation = Quaternion.identity;

猜你喜欢

转载自blog.csdn.net/qq_45506643/article/details/126937537
今日推荐