目录
平滑旋转
问题
你想要平滑地旋转3D对象以指向新的方向。
解决方案
初次遇到此问题时,您可能会发现自己在考虑欧拉角-这三个值代表与x / y / z轴的角度。 虽然Godot可以让您在rotation
属性查看对象的欧拉角,但不建议在3D中使用它们。 出现这种情况的原因有很多,例如称为“万向节锁”的问题,当其中一个旋转达到90度时,您将失去一个自由度。
如果您对欧拉角背后的背景及其所带来的问题(如万向节锁)感兴趣,请观看以下视频,这很好地说明了这一点。
我们可以通过使用物体的Transform
属性来避免在Godot中使用3D欧拉角。这个属性表示物体在空间中的位置和方向。它使用一个叫做矩阵的数学结构来做这个,但是你真的不需要理解底层的数学来使用它。
look_at()
假设我们有一个3D对象,比如导弹或箭,你想让它指向目标。我们可以使用Spatial
方法look_at()来做到这一点:
func _process(delta):
var target_position = $Target.transform.origin
$Arrow.look_at(target_position, Vector3.UP)
此代码将使我们的节点($Arrow
)始终指向目标的位置,无论其如何移动。