Dynamic Bone Chain (动态骨骼链)
Dynamic Bone Chain (动态骨骼链)
Dynamic Bone Chain(动态骨骼链)组件允许你为绑定模型或 Avatar 的骨骼添加 Rigidbody(刚体)物理效果。具有刚体物理效果的骨骼被称为“动态骨骼(Dynamic Bones)”;该名称源自一个提供类似功能的 Unity 资源。如图所示:
要为模型添加动态骨骼,请在 Inspector(检查器)中浏览模型的骨架层级,找到你想作为“根(Root)”或“主(Master)”骨骼的那个骨骼。然后,附着 Dynamic Bone Chain 组件,并点击 Setup From Children(从子对象设置)。这将把根骨骼及其所有子骨骼添加到动态骨骼链中。
Dynamic Bone Chain 组件包含多种属性,用于调整骨骼链的物理行为。组件中最重要的属性包括 Inertia(惯性)、InertiaForce(惯性力)、Damping(阻尼)、Elasticity(弹性)和 Stiffness(刚度)。各项详细说明如下:
字段 (Fields)
| 属性名称 | 类型 | 描述 |
|---|---|---|
| Inertia (惯性) |
Float | 控制骨骼受到的惯性大小。不影响骨骼的加速度。 |
| InertiaForce (惯性力) |
Float | 控制骨骼受到的惯性大小。会影响骨骼的加速度。 |
| Damping (阻尼) |
Float | 控制骨骼受到的阻尼大小。高阻尼值会导致骨骼快速减速。 |
| Elasticity (弹性) |
Float | 控制骨骼关节的弹性。高弹性值会导致骨骼更快地加速回到其初始旋转状态。 |
| Stiffness (刚度) |
Float | 控制骨骼关节的硬度。 |
| SimulateTerminalBones (模拟末端骨骼) |
Bool | 是否使用链中的最后一根骨骼。如果你的骨架末端骨骼不控制任何网格,你可能需要关闭此选项。 |
| BaseBoneRadius (基础骨骼半径) |
Float | 用于交互的骨骼球体的默认大小。 |
| DynamicPlayerCollision (动态玩家碰撞) |
Bool | 是否允许该骨骼链与玩家发生碰撞。 |
| CollideWithOwnBody (与自身躯体碰撞) |
Bool | 是否允许该骨骼链与该动态骨骼链的活跃用户发生碰撞。 |
| HandCollisionVibration (手部碰撞震动) |
VibratePreset | 当手接触链碰撞体时的震动强度。 |
| CollideWithHead (与头部碰撞) |
Bool | 是否允许该骨骼链与玩家头部发生碰撞。 |
| CollideWithBody (与躯体碰撞) |
Bool | 是否允许该骨骼链与玩家躯体部位发生碰撞。 |
| CollideWithLeftHand (与左手碰撞) |
Bool | 是否允许该骨骼链与玩家的左手发生碰撞。 |
| CollideWithRightHand (与右手碰撞) |
Bool | 是否允许该骨骼链与玩家的右手发生碰撞。 |
| Gravity (重力) |
Float3 | 在 GravitySpace 空间中始终施加于骨骼链的类似重力的力。 |
| GravitySpace (重力空间) |
RootSpace | 应用 Gravity 的坐标空间。 |
| UseUserGravityDirection (使用用户重力方向) |
Bool | 是否使用动态骨骼链活跃用户的角色控制器重力作为重力方向。 |
| LocalForce (本地力) |
Float3 | 在动态骨骼链的本地空间中施加于骨骼的恒定力。 |
| GlobalStretch (全局拉伸) |
Float | 骨骼链在静止时的拉伸程度。 |
| MaxStretchRatio (最大拉伸比) |
Float | 拉扯骨骼时允许的最大拉伸量。 |
| CurrentStretchRatio (当前拉伸比) |
Float (Output) | 当前施加在骨骼上的拉伸量。 |
| StretchRestoreSpeed (拉伸恢复速度) |
Float | 额外拉伸消散的速度。 |
| UseLocalUserSpace (使用本地用户空间) |
Bool | 是否仅让动态骨骼响应由用户 Slot 本地位置变化产生的移动。 |
| SimulationSpace (模拟空间) |
RootSpace | 在该坐标空间内的移动会影响此动态骨骼链。 |
| StaticColliders (静态碰撞体) |
List<IDynamicBoneCollider> | 要使用的动态骨骼碰撞体列表。 |
| VisualizeColliders (可视化碰撞体) |
Bool | 显示所有与此骨骼发生碰撞的骨骼碰撞体。 |
| VisualizeBones (可视化骨骼) |
Bool | 显示骨骼、其碰撞体以及它们之间的连接。 |
| IsGrabbable (可抓取) |
Bool | 允许你通过触摸并抓取来操控骨骼。需要勾选 DynamicPlayerCollision。 |
| ActiveUserRootOnly (仅活跃用户根) |
Bool | 仅允许动态骨骼链的活跃用户(即该组件所在层级的用户)抓取它。 |
| AllowSteal (允许抢夺) |
Bool | 当有人持有时,是否允许第二个用户抓取该链条。 |
| GrabPriority (抓取优先级) |
Int | 抓取优先级设置。 |
| IgnoreGrabOnFirstBone (忽略首骨骼抓取) |
Bool | 被抓取时,防止 EffectorBoneIndex 为 0。 |
| GrabRadiusTolerance (抓取半径容差) |
Float | 用户的抓取球体即使未接触到骨骼半径,允许抓取骨骼的额外距离。 |
| GrabReleaseDistance (抓取释放距离) |
Float | 骨骼被拖拽多远后会自动释放。 |
| GrabSlipping (抓取滑动) |
Bool | 当手沿骨骼链移动远离第一根骨骼时,是否增加 EffectorBoneIndex(受动骨骼索引)。除非重新抓取,否则不允许索引减少。 |
| GrabTerminalBones (抓取末端骨骼) |
Bool | 链中的最后一根骨骼是否可以被抓取。 |
| GrabVibration (抓取震动) |
VibratePreset | 用手抓取链条时的震动强度。 |
| IgnoreOwnLeftHand (忽略自身左手) |
Bool | 是否允许活跃用户的左手抓取此骨骼链。 |
| IgnoreOwnRightHand (忽略自身右手) |
Bool | 是否允许活跃用户的右手抓取此骨骼链。 |
| EffectorTarget (效应器目标) |
Slot | 链条尝试将其中的一根骨骼定位到此 Slot(用于抓取)。 |
| EffectorBoneIndex (效应骨骼索引) |
Int | 哪根骨骼正在被定位,此索引之后的每根骨骼表现得像未被抓取一样。 |
| EffectorBoneOffset (效应骨骼偏移) |
Float3 | 骨骼被抓取瞬间,在抓取 Slot 本地空间中的偏移量。本质上是为了防止骨骼瞬间吸附到手部抓取球体的中心,并保持偏移以获得更平滑的抓取体验。每次抓取时自动设置。 |
| _activeGrabber | Grabber | 当前正在抓取此骨骼链的 Grabber 组件引用。 |
| Bones (骨骼列表) |
List<DynamicBoneChain.Bone> | 由此动态骨骼链控制的骨骼列表。 |
同步委托 (按钮)
| 按钮名称 | 描述 |
|---|---|
| SetupFromChildren (从子对象设置) |
从子对象设置骨骼,忽略已经被驱动的骨骼。 |
| SetupFromAllChildren (从所有子对象设置) |
设置所有子骨骼,无论它们是否已被驱动(会断开现有驱动链接并替换为来自此组件的链接)。 |
| SetupFromAllRigChildren (从所有 Rig 子对象设置) |
将子骨骼设置为此组件的动态骨骼。会忽略所有 Slot,除非它们被包含在父级 Slot 上的 Rig component(骨架组件)中。 |
| ReplaceSmoothTransforms (替换平滑变换) |
将影响此链目标骨骼的任何 Smooth Transform(平滑变换)替换为来自此链的驱动。 |
| AddCollidersFromHierarchy (从层级添加碰撞体) |
将此骨骼层级下所有的动态骨骼碰撞体(Dynamic Bone Collider)添加到此骨骼链的 StaticColliders 列表中。 |
| AlwaysGrabLastBone (始终抓取末端骨骼) |
更改链中每个 Bone 的 GrabOverride,使其指向链中的最后一根骨骼。 |
| CleanSmoothTransforms (清理平滑变换) |
移除目标骨骼上的 Smooth Transform 组件。 |
Bone (嵌套类型)
| 属性名称 | 类型 | 描述 |
|---|---|---|
| BoneSlot (骨骼插槽) |
Slot | 此骨骼引用的动态骨骼 Slot。 |
| OrigPosition (原始位置) |
Float3 | BoneSlot 的静止位置。 |
| OrigRotation (原始旋转) |
FloatQ | BoneSlot 的静止旋转。 |
| RadiusModifier (半径修正) |
Float | 用于乘以动态骨骼链指定的默认半径,以生成此骨骼的最终半径。 |
| GrabOverride (抓取覆盖) |
Bone | 引用另一个 Bone。当此骨骼被抓取时,将抓取那个 Bone 来代替。 |
| Collide (碰撞) |
Bool | 此骨骼是否具有碰撞。 |
| _posDrive | FieldDrive<Float3> | 驱动 BoneSlot 的位置以产生动态骨骼移动效果。 |
| _rotDrive | FieldDrive<FloatQ> | 驱动 BoneSlot 的旋转以产生动态骨骼移动效果。 |
Bone 同步委托
| 函数名称 | 描述 |
|---|---|
| OnSetupFromSlot() | 按下时,如果 BoneSlot 不为空,则自动设置 Bone 的 OrigPosition、OrigRotation、_rotDrive 和 _posDrive 字段。 |
用法
暂无用法说明。

No comments to display
No comments to display