如何使用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)。有没有办法让这个函数创建一个精确的角度?
发布于 2015-05-02 01:38:21
是一种在两个Vector3之间进行线性插值的方法。
为简单起见,参数t0..1是from值和To值之间的游标。
在这里,您将返回值分配给from。所以它会“平滑地”旋转你的对象,但t (Time.deltaTime)可能永远不会等于1,所以from只会收敛到to而不会到达它。
因此,修复方法可能是:
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;https://stackoverflow.com/questions/29989620
复制相似问题