如何在Godot GDscript中获取骨骼的全局世界坐标

Joe*_*Joe 4 gdscript godot

我正在用 GDscript 用 Godot 编写一个程序,旨在改变骨架中多个骨骼的位置。骨骼将按照我希望骨骼移动到的点减去骨骼当前位置计算出的值进行平移。translateValue = endPoint - currentPoint但是,所有值都必须位于世界坐标或全局位置中,代码才能正常工作。Godot 有多种方法来检索骨骼变换以访问位置,例如:skeleton.get_bone_pose() , skeleton.get_bone_global_pose , skeleton.get_bone_rest。我尝试使用skeleton.get_bone_global_pose ,但它没有给出全局位置,并且似乎仍然与某些东西相关。还有一个to_global()方法,但我不完全确定它的作用。有人可以解释这些方法之间的差异以及如何获得全球地位吗?谢谢!

The*_*aot 7

我将从这些方法开始:

  • get_bone_rest
  • get_bone_custom_pose
  • get_bone_pose

首先,get_bone_rest为您提供骨骼相对于其父骨骼的默认变换。然后按照上述顺序堆叠其他变换。


然后我们有:

  • get_bone_global_pose

此方法为您提供骨骼的最终变换。而且它是相对于Skeleton. 也就是说,此变换已经包括前面提到的从父骨骼到子骨骼组合的变换。

因此,将其结果转换为世界空间就是构成 的变换的问题Skeleton

$Skeleton.global_transform * $Skeleton.get_bone_global_pose(bone_index)
Run Code Online (Sandbox Code Playgroud)

我们有:

  • get_bone_global_pose_no_override

顾名思义,get_bone_global_pose_no_override忽略任何全局姿势覆盖。没错,您可以覆盖全局姿势。为此,请使用set_bone_global_pose_override. 也可以看看clear_bones_global_pose_override。当然,这些都是相对于Skeleton.


该方法Spatial.to_global(vector3)与 无关Skeleton。它将向量从您调用它的节点的局部空间转换为世界空间。这也可能有用:

$Skeleton.to_global($Skeleton.get_bone_global_pose(bone_index).origin)
Run Code Online (Sandbox Code Playgroud)