Skip to main content

Dynamic Bone Chain (动态骨骼链)

Dynamic Bone Chain (动态骨骼链)

Dynamic Bone Chain(动态骨骼链)组件允许你为绑定模型或 Avatar 的骨骼添加 Rigidbody(刚体)物理效果。具有刚体物理效果的骨骼被称为“动态骨骼(Dynamic Bones)”;该名称源自一个提供类似功能的 Unity 资源。如图所示:

image.png

要为模型添加动态骨骼,请在 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
(始终抓取末端骨骼)
更改链中每个 BoneGrabOverride,使其指向链中的最后一根骨骼。
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 不为空,则自动设置 BoneOrigPositionOrigRotation_rotDrive_posDrive 字段。

用法

暂无用法说明。

示例

Dynamic bone chain parameters (社区预设)