这是统一的2019.4.40f1。我试着把一个物体旋转到它的运动方向。然而,我注意到这是不准确的,在调查中我注意到不准确来自实际的运动量。我的意思是,在下面的代码中,delta.y / delta.x
在每个循环迭代中输出不同的值,即使destination
没有改变。因此,Atan2
当然也返回不同的结果。每一帧的误差都在小数点第4、3或4位,然而,在几秒钟内,它加起来并不是随机变化,而是系统的。
还请注意,在这个阶段,我实际上并没有将旋转应用于对象。我的期望是,下面的代码应该将对象从其位置移动到目标位置,每帧都以一条直线的形式移动。这似乎是视觉上的情况,但在数值上有足够的偏差,以引起问题的角度计算。
IEnumerator TweenFunc (object myObject, Vector2 destination, float speed)
{
while (condition)
{
currentPosition = myObject.transform.position;
delta = destination - currentPosition;
Vector2 dir = delta.normalized;
frameTime = TimeManager.FrameTime
myObject.transform.Translate(dir.x * frameTime * speed, dir.y * frameTime * speed, 0);
Debug.Log(delta.y / delta.x);
Debug.Log(Mathf.Rad2Deg* Mathf.Atan2(delta.y, delta.x));
yield return true;
}
}
我想保持角度计算的一致性。它可以预先计算角度一次,外环,通过计算三角洲首先在环外,然后得到角度,然后进入循环。但是,这个解决方案在我的用例中是不可用的,因为实际的角度计算需要在代码库的另一个部分进行,它只知道dir
和speed
,而不知道destination
。
编辑其他信息:当从(1.2, -0.2)
到(0.2, -3.2)
旅行时,角度从~108.43352
变为108.3664
。真正的角度应该是108.435
。虽然这仅仅是10度,但如果我把旋转应用到物体上,它就会变得可见,尤其是因为大部分的变化似乎都发生在运动结束的时候。我想知道,作为迪尔-x和迪尔-y的零精度是否变得更糟糕,在一个系统的方式。此外,在任何一个主要方向旅行时,没有角度漂移。在那里,di.x和di.y的精度不需要小数位,因为它们要么是0,要么是1,所以这可能就是正在发生的事情。
我想知道是否有办法解决这个问题,因为最终的目标其实是一件很普通的事情--把物体旋转到它的运动方向。
发布于 2022-11-15 03:49:34
尽管这里显示的代码只转换为not旋转,但通常要记住,Transform.Translate
默认在本地空间中工作。
因此,如果(从您的标题中,我只是假设)对象是旋转的,这实际上是不准确的,因为您取了一个world space delta
,然后在它上移动,但在本地空间。
要显式传入的=>
myObject.transform.Translate(dir.x * frameTime * speed, dir.y * frameTime * speed, 0, Space.World);
然后,您可能想要操作实际规范化的运动向量,afaik,您翻转了参数的顺序:
Debug.Log(Mathf.Rad2Deg * Mathf.Atan2(dir.x, dir.y));
发布于 2022-11-15 23:30:44
我将添加我的部分解决方案的答案,因为我还没有弄清楚如何直接抵消这个问题。
destination - currentPosition
,将其转换为双倍,并以双精度手工完成其余的向量计算(例如归一化、Atan2),并且使用Math
而不是Mathf
函数。由于对象转换位置仍然以浮点数的形式存储,因此仍然存在错误,但这会使0.05
示例中的误差减少一定程度,因此它将该示例中的错误减少了一半。TweenFunc
不更新目标,并且不期望游戏对象在活动时被移出函数之外,我可以将dir.x
和dir.y
的计算移出循环之外,因此它们只能在开始时以最大的精度计算一次,在示例中返回-108.4349
,并且不会进一步积累额外的错误。这可以产生稳定的运动方向,但是它的主要缺点是,如果游戏对象以某种方式在这个函数之外移动,那么它可能永远不会到达它的目的地,因此我们可能永远不会退出TweenFunc
中的循环。这可以通过增加复杂性来解决,比如检查运动方向是否改变了超过1度或其他阈值,然后重置它。
https://stackoverflow.com/questions/74443663
复制相似问题