我在C#和统一游戏引擎中编码物理。我偶尔从这个Acos函数中得到一个NaN值,我完全被难倒了。正如您在调试屏幕截图中看到的,我测试了值并且它们工作正常,但在使用变量时它会返回NaN。请帮忙!
float a = Vector3.Dot(waterlineVec.normalized, transform.InverseTransformDirection(velocityVector.normalized));
a = Mathf.Clamp(-1, a, 1);
alpha = Mathf.Acos(a); //alpha in radians
答案 0 :(得分:0)
我也遇到了这个问题,使用几乎相同的代码。就我而言,我使用的是Mathf.Clamp01(a)
,它等效于Mathf.Clamp(a, 0, 1)
。我真的无法解释为什么,但是似乎可以通过以下方式替换此函数调用来解决:
if(a > 1.0f)
a = 1.0f;
if(a < 0.0f)
a = 0.0f;
我以为这可能是因为Mathf.Clamp01
在进行比较之前将浮点数转换为双精度(如通过对UnityEngine库进行反编译所看到的那样),但是即使我自己在代码中这样做,也无法重现这个问题-因此原因上我有点茫然-但这确实可以解决。