如何解决如何在Godot GDscript中获取骨骼的全局世界坐标
我正在使用 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()
方法,但我不完全确定它的作用。有人可以解释这些方法之间的差异以及如何获得全局位置吗?谢谢!
解决方法
我将从这些方法开始:
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)
我们有:
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_globla($Skeleton.get_bone_global_pose(bone_index).origin)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。