在 Godot GDscript 中翻译骨架中的骨骼

Translate a bone in an armature in Godot GDscript

我正在尝试使用 t.translated(translateVector) 函数更改 Godot GDscript 中骨架中骨骼的位置,其中 t 是一个变换(具有旋转、比例和位置信息的 3x4 矩阵)。为了让骨骼移动到特定的点,平移向量被提前计算:translateVector = endPosition - currentPosition。问题是 currentPosition 是一个 Transform,endPosition 是一个 Vector3,它们不能相加或相减。有什么方法可以将 Vector3 转换为转换以减去它们吗? 谢谢

你说……

currentPosition is a Transform, and the endPosition is a Vector3

我不会那样做。如果是 Transform,我会称之为“转换”,而不是“位置”。我提醒你,Transform 表示旋转和缩放放在一边的位置(即使旋转和缩放是 none)。就此答案而言,后缀为“Position”的变量是 Vector3。而后缀为“Transform”的变量是 Transform.


Is there any way to convert a Vector3 into a transform

您从身份转换开始,然后翻译它:

var endTransform = Transform.IDENTITY.translated(endPosition)

in order to subtract them?

没有加法或减法这样的东西。相反,变换组合是通过乘法完成的。 Godot 中的变换最接近核心库提供的矩阵,它们的组合遵循矩阵规则。于是,相反的合成就是用逆变换合成:

var relativeTransform = currentTransform.affine_inverse() * endTransform

然后您可以将其组合到您拥有的转换中:

t * relativeTransform

但是,您可能想做相反的事情。您可以从变换中获取位置向量,而不是将向量转换为变换:

var currentPosition = currentTransform.origin

然后你可以减去向量:

translateVector = endPosition - currentPosition

并按照您的预期进行翻译:

t.translated(translateVector)