RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 947272
Accepted
kitsoRik
kitsoRik
Asked:2020-02-21 00:44:36 +0000 UTC2020-02-21 00:44:36 +0000 UTC 2020-02-21 00:44:36 +0000 UTC

翻转 360+ 度

  • 772

如果你设置这样的东西:

Quaternion quaternion = Quaternion.Euler(0, 0, 360 * A);

无论在位置 A(从整数)发生什么,都永远不会发生反转,但如果数字是 A.5 类型(带逗号的数字,小数点后有一半),那么反转将恰好是 180 ,事实证明,以简单的方式将反转设置为 3600(t.e. 10 圈)是不可能的,我有一个平滑的圈转,这样我就不会通过阅读每个半圆的类型来写任何废话,我问了一个问题:如何大转一圈(即超过一整圈):我的旋转代码:

        Quaternion quaternion = Quaternion.Euler(0, 0, 1800);
    float t = 5f;
    float tA = Time.time;
    while (t > 0)
    {
        t -= Time.time - tA;
        tA = Time.time;
        Debug.Log(t);
        transform.GetComponent<RectTransform>().rotation = Quaternion.Lerp(transform.rotation, quaternion, (5-t)/5f);
        yield return 0;
    }

顺便说一句,这里我也想正好转5秒,但出于某种原因(由于我的无知,它不能正常工作)。

主要问题是:如何为几个圆圈(例如 3600 度)进行转弯(在我的情况下是平滑的),即 10圈。

第二个问题是如何在特定的时间内准确地掉头

unity3d
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    user302909
    2020-02-21T22:31:12Z2020-02-21T22:31:12Z

    整个问题在于这样一个事实,即围绕任何轴的旋转在物理上是有限[0;360)的,并且在涉及度数的范围内。但不要混淆:我们甚至可以旋转一个物体十亿度——最终它仍然会在区间内旋转[0;360)。

    是的,要在实践中检查这一点非常简单,让我们这样做:

    Debug.Log(Quaternion.Euler(0, 0, 1800).eulerAngles);
    Debug.Log(Quaternion.Euler(0, 0, 1799).eulerAngles);
    

    让我们看看输出:

    在此处输入图像描述

    基于上述,以这种方式使用旋转的“参考”值是行不通的。


    这可以通过固定旋转来实现:

    public class Rotator : MonoBehaviour
    {
        public Vector3 rotationStep = new Vector3(0, 0, 0);
        public float time = 0;
    
        IEnumerator RotateForSeconds(float seconds, Vector3 step) {
            while(seconds > 0) {
                seconds -= Time.deltaTime;
                transform.Rotate(step * Time.deltaTime);
                yield return null;
            }
        }
    
        void Start()
        {
            StartCoroutine(RotateForSeconds(time, rotationStep));
        }
    }
    

    然后是最简单的计算:

    需要在 10 秒内将物体旋转 360 度?所以我们需要 360/10 = 36 度/秒的速度:

    在此处输入图像描述

    需要在 5 秒内将物体旋转 1800 度?重复上述步骤:1800/5 = 360:

    在此处输入图像描述


    一般来说,对于与手动动画相关的一切,最好使用LeanTween或任何其他补间引擎。但问题是这样的引擎使用“参考”值,从上面的推理来看,这并不是特别适合我们,但我会将其作为附加信息。

    让我们进入文档:

    LTDescr rotate(GameObject gameObject, Vector3 to, float time) 在 LeanTween.cs:1481 中定义

    旋转一个GameObject,以度数传入

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5