如何使用lerp以精确的角度滚动对象 例如,90 = 90,而不是90 = 89.9982
Vector3 Angle = new Vector3(FirstGizmo.transform.eulerAngles.x, 90f,
FirstGizmo.transform.eulerAngles.z);
FirstGizmo.transform.eulerAngles = Vector3.Lerp(FirstGizmo.transform.eulerAngles,
Angle,Time.deltaTime );
我已经使用过此代码,但没有得到确切的角度(90 = 89.9982)。有没有办法让这个函数产生精确的角度?
答案 0 :(得分:-1)
Vector3.Lerp是一种在两个Vector3之间线性插值的方法。
为简单起见,参数 t [0..1]是 from 值和 to 值之间的光标。
在此,您将返回的值从分配给。所以它会“平滑”地旋转你的对象,但 t ( Time.deltaTime )可能永远不会等于1,所以来自只会收敛到到而不到达它。
所以修复可能是:
float t = 0f;
while (t < 1f) { // for example
Vector3 initial = FirstGizmo.transform.eulerAngles;
Vector3 Angle = new Vector3(FirstGizmo.transform.eulerAngles.x, 90f , FirstGizmo.transform.eulerAngles.z);
FirstGizmo.transform.eulerAngles = Vector3.Lerp(initial, Angle, t);
t += Time.deltaTime;
yield return null; // if you are in a coroutine
}
它会线性旋转你的物体。
如果你想顺利地做到这一点:
Vector3 Angle = new Vector3(FirstGizmo.transform.eulerAngles.x, 90f , FirstGizmo.transform.eulerAngles.z);
float speed = 10f;
while (Vector3.Distance(FirstGizmo.transform.eulerAngles, Angle) > 0.1f) { // for example
FirstGizmo.transform.eulerAngles = Vector3.Lerp(FirstGizmo.transform.eulerAngles, Angle, speed * Time.deltaTime);
yield return null; // if you are in a coroutine
}
// So it will leave the loop when it's very close (0.1f) to *to* (here Angle)
FirstGizmo.transform.eulerAngles = Angle;