
文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载导读BoneAttachment3D 是 Godot 引擎中连接「骨骼动画世界」与「场景节点世界」的关键节点。本文基于 Godot 官方文档 class_boneattachment3d.rst 展开完整讲解该节点的属性、方法与两种核心工作模式跟随骨骼变换 / 覆盖骨骼姿态并结合仓库内的 tscn 场景文件格式说明、软体斗篷实战教程与 4.3 迁移记录为你呈现从场景编辑器操作到底层运行机制的完整视图。读完本文你将掌握如何把武器、饰品、贴花等对象精准挂接到指定骨骼如何让附着节点反向驱动骨骼姿态以及如何处理外部骨骼与潜在的性能注意事项。节点概览继承关系与核心职责BoneAttachment3D 的继承链为Node3D Node ObjectInherits父类Node3D因此它天然具备三维变换Transform3D能力可被平移、旋转、缩放也可挂载任意子节点。继承者Inherited By从 class_node3d.rst 的继承关系表可以看到BoneAttachment3D 是 Node3D 的直接子类与 Camera3D、CollisionShape3D、Marker3D 等并列。它的核心职责可以用一句话概括在父级 Skeleton3D 中选择一根骨骼并动态复制或覆盖该骨骼的三维变换。也就是说BoneAttachment3D 节点本身不参与渲染它是一个「中间节点」专门用来描述「某个节点被父级到骨架的某根骨骼上」这一关系——这正是它在 tscn.rst 中被定义为intermediate node中间节点的原因。工作原理动态复制与姿态覆盖官方文档将其工作模式描述为「dynamically copies or overrides动态复制或覆盖」复制模式跟随BoneAttachment3D 节点实时将自身变换设置为所绑定骨骼的变换任何挂载在其下的子节点都会随骨骼一起运动例如角色手中挥舞的武器。覆盖模式驱动当override_pose开启时附着节点可以反过来改变骨骼的位姿pose用于程序化驱动骨骼。两种模式的切换完全由override_pose属性决定下文逐一拆解所有属性与默认值。属性详解下表完整列出该节点的全部属性及其默认值来自 class_boneattachment3d.rst类型属性默认值说明intbone_idx-1所附着骨骼的索引Stringbone_name所附着骨骼的名称NodePathexternal_skeleton空外部 Skeleton3D 节点的 NodePathbooloverride_posefalse是否覆盖骨骼姿态PhysicsInterpolationModephysics_interpolation_mode2物理插值模式覆盖自 Node 的默认值booluse_external_skeletonfalse是否使用外部 Skeleton3D 而非父节点bone_idx 与 bone_name双通道骨骼寻址bone_idxint默认 -1所附着骨骼的索引。配套的 setter/getter 为set_bone_idx(value)与get_bone_idx()。索引与骨骼名称是一一对应的二者可以互换寻址。bone_nameString默认 所附着骨骼的名称配套set_bone_name(value)/get_bone_name()。在场景文件中这两个属性会同时写入。例如 tscn.rst 中展示的枪械骨骼挂接示例[node nameGunBone typeBoneAttachment3D parentPlayerModel/Robot_Skeleton/Skeleton3D index5] transform Transform3D(0.333531, 0.128981, -0.933896, 0.567174, 0.763886, 0.308015, 0.753209, -0.632331, 0.181604, -0.323915, 1.07098, 0.0497144) bone_name hand.R bone_idx 55可以看到真实场景中既保留了骨骼名称hand.R也写入了对应的索引55二者协同定位骨骼避免因重命名或骨架重组导致失配。external_skeleton 与 use_external_skeleton外部骨骼支持默认情况下BoneAttachment3D 会使用父节点作为 Skeleton3D。当需要把节点绑定到非父级的骨骼时use_external_skeletonbool默认 false置为true后节点放弃查找父级骨架转而使用external_skeleton中指定的 Skeleton3D。external_skeletonNodePath指向外部 Skeleton3D 节点的路径配套set_external_skeleton(value)/get_external_skeleton()。这一机制让「一个骨架的骨骼」可以驱动「场景树中任意位置」的附着节点是实现跨节点骨骼绑定的关键开关。override_pose从「跟随」切换到「驱动」false默认BoneAttachment3D 总是被设置为骨骼的变换即纯跟随模式trueBoneAttachment3D 可以改变所附着骨骼的位姿即驱动模式。重要注意事项官方文档原文强调这种覆盖是在骨架更新过程中通过信号以「中断式interruptively」方式执行的属于旧设计的遗留行为。当与SkeletonModifier3D同时使用时可能引发非预期的行为。因此在需要程序化控制骨骼姿态、又希望与其他修改器链协作的场景下官方更推荐使用 ModifierBoneTarget3D——该节点功能与 BoneAttachment3D 类似但采用SkeletonModifier3D的更新循环并设计为充当另一个 SkeletonModifier3D 的目标详见 class_modifierbonetarget3d.rst。physics_interpolation_mode物理插值该节点将physics_interpolation_mode的默认值覆盖为2继承自 Node 的属性被覆写。其含义为骨骼绑定场景下节点变换跟随骨架在物理帧之间进行插值避免高速骨骼运动时出现抖动。如需对单个附着节点精细控制插值策略可修改该属性。方法与回调返回类型方法说明Skeleton3Dget_skeleton()返回父级或外部 Skeleton3D 节点若不存在则返回nullvoidon_skeleton_update()骨架更新时自动调用在非覆盖模式下该函数负责更新节点位置以正确绑定骨骼get_skeleton()统一返回当前生效的骨架无论是父级还是外部便于在代码中直接取得骨架引用。on_skeleton_update()由 Skeleton3D 在更新时自动触发是 BoneAttachment3D 保持自身与骨骼同步的核心回调。文档特别指出该函数在「不覆盖骨骼姿态」时负责更新节点位置使其正确绑定。值得注意的是on_skeleton_update是 Godot 4.3 的命名调整结果在 upgrading_to_godot_4.3.rst 的迁移表中明确记录on_bone_pose_update已被on_skeleton_update取代GDScript 兼容C# 二进制/源码级兼容同时 Skeleton3D 的信号bone_pose_changed也替换为skeleton_updated。如果你从旧版本迁移代码需要同步更新这两个标识符。实战把武器挂到骨骼上编辑器操作在 Godot 编辑器中将物体附着到骨骼的典型流程如下在场景树中为角色模型创建Skeleton3D节点模型导入时会自动生成。在 Skeleton3D 节点下添加一个BoneAttachment3D子节点。在检查器Inspector中将bone_name或bone_idx设置为目标骨骼如hand.R。在 BoneAttachment3D 节点下添加武器、盾牌、饰品等子节点其局部变换会叠加在骨骼变换之上。关于枪口点Muzzle的经典做法若需要「从枪口射出子弹」之类的玩法可在 BoneAttachment3D 下再挂一个Marker3D标记点。正如 tscn.rst 中所示[node nameShootFrom typeMarker3D parentPlayerModel/Robot_Skeleton/Skeleton3D/GunBone] transform Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0)这个ShootFrom标记挂在GunBoneBoneAttachment3D之下通过脚本读取其全局变换即可获得每帧正确的枪口世界坐标而无需手动跟踪骨骼位置。实战进阶软体布料绑定SoftBody3D BoneAttachment3D仓库的 软体斗篷教程 展示了 BoneAttachment3D 的真实用例——把一块软体布料挂在角色颈部骨骼上创建骨骼附着点在 Skeleton3D 节点下添加一个 BoneAttachment3D并在检查器中选中 Neck颈部骨骼。教程特别提示暂时不要把 SoftBody3D 节点直接移入 BoneAttachment3D 之下而是让软体的「固定点pinned points」跟踪该节点。选择固定点在 SoftBody3D 节点中选中上方的顶点被选中的固定点在 3D 视口中以蓝色显示。指定附着路径在 SoftBody3D 检查器中展开 Collision碰撞区块下的 Attachments附着物部分为每个固定关节的Spatial Attachment Path属性选择 BoneAttachment3D 节点。技巧可以直接从场景树停靠面板把 BoneAttachment3D 节点拖放到该属性字段上大幅提高赋值效率。若 Attachments 区块未出现可先取消再重新选中 SoftBody3D 节点。避免穿模把场景根节点如 CharacterBody3D 的 Player加入 SoftBody3D 的Parent Collision Ignore属性防止布料与角色自身碰撞而穿模。最终运行场景斗篷即可随颈部骨骼运动并被软体模拟驱动。这印证了 BoneAttachment3D 的核心价值让任意场景节点包括物理模拟节点以骨骼为锚点获得动态变换。底层运行细节与注意事项更新时序非覆盖模式下BoneAttachment3D 的变换由on_skeleton_update()在骨架更新循环中同步因此其变换始终与骨骼保持一致子节点无需每帧手动同步。覆盖模式的信号机制覆盖模式通过信号在骨架更新过程中中断执行旧设计遗留与 SkeletonModifier3D 同时使用可能产生非预期结果。程序化驱动骨骼的现代替代方案是 ModifierBoneTarget3D它融入 SkeletonModifier3D 的更新链更适合与其他骨骼修改器协同。外部骨骼注意使用use_external_skeleton true时请确保external_skeleton的 NodePath 有效get_skeleton()在骨架不存在时返回null代码中需做判空处理。GLTF 导入关联在 class_gltfskeleton.rst 中可以看到GLTF 骨架类提供get_bone_attachment(idx)方法用于从导入的 GLTF 骨架数据中获取对应的 BoneAttachment3D说明该节点是引擎在模型导入流程中同步生成与管理的标准骨骼附属机制。结语BoneAttachment3D 是 Godot 3D 骨骼系统中「把场景节点与骨骼解耦又精准耦合」的桥接节点。通过bone_name/bone_idx寻址、override_pose切换跟随与驱动模式、use_external_skeleton跨节点绑定它足以覆盖武器挂接、软体布料、程序化姿态控制等绝大多数骨骼附着场景。唯一需要留意的是覆盖模式的信号式执行局限——涉及复杂修改器链时请优先考虑 ModifierBoneTarget3D。掌握这一节点你的角色动画与物理交互工作流将更加灵活可控。赞分享文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载相关推荐Godot 2D 骨骼动画核心节点 Bone2D 完全指南从 Rest Pose 到代码驱动Godot 2D 骨骼动画核心节点 Bone2D 完全指南从 Rest Pose 到代码驱动 Bone2D 是 Godot 引擎中配合 Skeleton2D文档教程游戏开发Godot 4 骨骼瞄准修改器 AimModifier3D 完全指南让骨骼平滑注视参考骨骼Godot 4 骨骼瞄准修改器 AimModifier3D 完全指南让骨骼平滑注视参考骨骼 AimModifier3D 是 Godot 4.7 引入的骨骼修改文档教程游戏开发Godot 骨骼空间修正器 BoneSpaceAdjuster3D 详解让皮肤缩放与子骨骼位置完美同步Godot 骨骼空间修正器 BoneSpaceAdjuster3D 详解让皮肤缩放与子骨骼位置完美同步 导读 BoneSpaceAdjuster3D 是 Go文档教程游戏开发上一篇KTransformers AMX/AVX加速Intel CPU优化技术深度解析下一篇lsd性能优化指南加快大型目录列表速度的10个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考