Unity - 使用 foreach 循环以及父对象和子对象进行 Lerp 旋转?

Posted

技术标签:

【中文标题】Unity - 使用 foreach 循环以及父对象和子对象进行 Lerp 旋转?【英文标题】:Unity - Lerp rotations with foreach loop and with parent and child objects? 【发布时间】:2021-09-04 11:51:57 【问题描述】:

我在 Unity 中有 3 个对象,它们是应该移动的手臂的 3 段。每个段还有 2 个空的游戏对象,它们放置在段的底部和顶部(这些用作关节,我想对其应用旋转)。在项目内部,这些对象如下所示:

a1_1 是手臂底部的主要关节,当它旋转时,所有东西都应该随之旋转(这就是它的父节点的原因)。 arm1、arm2 和 arm3 是段。 a2_1 和 a3_1 是另外两个添加旋转的关节。

现在我有一个 .txt 文件,每个关节都有多条角度线。我已经实现了一种读取此文件的方法,并且正在使用 foreach 循环分别读取每一行。但是,当我使用 Quaternion.Lerp 函数时,它会添加奇怪的旋转,我真的不知道为什么。

我要做的就是让关节旋转到一个特定点,等待 0.2 秒,然后旋转到下一个点。

IEnumerator Run() 
    string[] tempAngles;

    foreach (string line in angleArray) 
        tempAngles = line.Split(' ');

        a1_1.rotation = Quaternion.Lerp(a1_1.rotation, Quaternion.Euler(90 - float.Parse(tempAngles[1]), float.Parse(tempAngles[0]), 0), Time.fixedDeltaTime * 1f);
        a2_1.rotation = Quaternion.Lerp(a2_1.rotation, Quaternion.Euler(180 - float.Parse(tempAngles[2]), 0, 0), Time.fixedDeltaTime * 1f);
        a3_1.rotation = Quaternion.Lerp(a3_1.rotation, Quaternion.Euler(float.Parse(tempAngles[3]) + 45, 0, 0), Time.fixedDeltaTime * 1f);

        //a1_1.rotation = a1_1.rotation * Quaternion.AngleAxis((90 - float.Parse(tempAngles[1]) * Time.fixedDeltaTime), Vector3.right);

        //a1_1.Rotate(90 - float.Parse(tempAngles[1]), float.Parse(tempAngles[0]), 0);
        //a2_1.Rotate(180 - float.Parse(tempAngles[2]), 0, 0);
        //a3_1.Rotate(180 - float.Parse(tempAngles[3]), 0, 0);

        yield return new WaitForSeconds(0.2f);

        print("done");
    

这是该函数目前的样子。如您所见,我尝试了多种不同的方法来添加轮换,但似乎没有一种方法能按我希望的方式工作。

这是txt文件中一行角度的样子:

62.920341623781205 42.26008063439084 86.66333878215205 141.0765805834571

我将空格所在的每个角度分开,并在 foreach 循环中每步得到 4 个角度。

【问题讨论】:

***.com/help/someone-answers 【参考方案1】:

您需要将每个 lerp 开头的初始旋转存储在一个变量中。例如,如果你想从 30 度到 60 度,当你达到 40 度后,a1_1.rotation 变为 40,但你仍然需要将 30 放入第一个参数 lerp 函数中才能正常工作。 https://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html

这是这里的问题,但您可能需要也可能不需要使用 Transform.localRotation

【讨论】:

以上是关于Unity - 使用 foreach 循环以及父对象和子对象进行 Lerp 旋转?的主要内容,如果未能解决你的问题,请参考以下文章

Java数组使用以及foreach循环

Java语法糖1:可变长度参数以及foreach循环原理

for...in和for...of循环以及forEach方法

如何在 ForEach 循环中获取计数变量

js 循环遍历变量的几种方式

使用单选按钮使用Foreach循环禁用下拉菜单