首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lerp设置精确的角度

使用lerp设置精确的角度
EN

Stack Overflow用户
提问于 2015-05-01 23:16:07
回答 1查看 498关注 0票数 0

如何使用lerp以精确的角度滚动对象?例如,90 = 90,而不是90 = 89.9982

代码语言:javascript
复制
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)。有没有办法让这个函数创建一个精确的角度?

EN

回答 1

Stack Overflow用户

发布于 2015-05-02 01:38:21

是一种在两个Vector3之间进行线性插值的方法。

为简单起见,参数t0..1是from值和To值之间的游标。

  • 如果t等于0,则该方法将从返回。
  • 如果t等于1,则该方法将返回。
  • 如果t等于0.5,则该方法将返回位于from和to中间的位置。

在这里,您将返回值分配给from。所以它会“平滑地”旋转你的对象,但t (Time.deltaTime)可能永远不会等于1,所以from只会收敛到to而不会到达它。

因此,修复方法可能是:

代码语言:javascript
复制
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
}

它将线性旋转您的对象。

如果你想顺利地做到这一点:

代码语言:javascript
复制
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;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29989620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档