prop_ragdoll
< Zh
参见: 有关创建布娃娃的具体细节,详见
$collisionjoints
.
类层级 |
---|
CRagdollProp |
physics_prop_ragdoll.cpp
|
prop_ragdoll
是一个点实体 ,可在所有的 起源 游戏中使用。是一个具有物理性质的布娃娃。布娃娃是一组约束在一起的物理对象的集合,用于模拟像尸体这样的关节物体,它们的物理模拟有着昂贵的性能开销.
警告:该实体生成的是服务端布娃娃,会与任何道具发生碰撞,但这会造成大量网络开销。通过默认休眠(勾选Start asleep Flag),禁用物理运动或禁用与动态道具的碰撞(不存在于FGD!在soild键值中使用0为参数),并仅在需要时启用物理运动,可以显著减少网络开销
错误:通过Hammer设置自定义动作并勾选
Start Asleep
Flag会导致渲染框无法更新,在生成时唤醒布娃娃一帧时间后再次休眠即可解决此问题 [todo tested in?]AltNames: 此实体也绑定到
physics_prop_ragdoll
。
注意:原始版本仍可作为
prop_ragdoll_original 使用。区别在于:
|
Contents
尸体布娃娃/布娃娃转换
在NPC/玩家死亡,或者接收到BecomeRagdoll
输入的情况下,通常会创建一个客户端布娃娃,并将大部分动画和视觉数据复制到其中。与服务端布娃娃不同的是,这些客户端布娃娃完全基于每个客户端进行处理,在性能开销方面比服务端布娃娃要廉价,简单的多,但代价是在服务端上几乎不存在,在客户端的视角之间存在不一致,并且只会与在客户端上具有物理属性的道具互动(比如worldspawn
)
然而,当NPC处于以下任意一种情况时,其会变成服务端布娃娃
- NPC位于
trigger_serverragdoll
体积内 - NPC在单人模式中被玩家的载具撞死
- 重力枪处于充能状态
- 当Alyx darkness mode开启时,NPC被烧死
- NPC是重要队友(比如
npc_alyx
)
和prop_ragdoll一样,这些服务端的尸体布娃娃会与物理道具和其他东西发生碰撞,但它们被标记为debris
,不会互相产生碰撞,不像客户端布娃娃,它们也不会与自身产生碰撞(已在 Entropy : Zero 2和 黑山中被修复)。这通常被认为是有意为之,皆在减少性能/网络开销
注意:以上的大部分内容虽尚未进行进一步的测试,但理论上也适用与玩家
警告:虽然大部分的动画/视觉数据都被复制到了客户端布娃娃上,但诸如淡入/淡出距离一类的数据并没有被复制
- 代码:对于服务端布娃娃,可以修改
baseanimating.cpp
中的CBaseAnimating::CopyAnimationDataFrom()
,而对于客户端布娃娃,则可以修改c_baseanimating.cpp
中的C_BaseAnimating::CreateRagdollCopy()
Keyvalues
参见: Generic Keyvalues, Inputs and Outputs available to all entities
- Name
(targetname)
<string > - 其他实体引用该实体的目标名称。
- Override Animation
(angleOverride)
<string > - 以
index,x y z,...
为格式表示的关节旋转列表,由引擎通过hammer_update_entity指令或 Hammer++的物理模拟工具填充。除非需要清空,否则不要手动修改
GMODSandbox:
|
Flags
Debris : [4]
- 不会与玩家或其他碎片交互
Use 'Least Recently Used' Retirement : [4096]
- 不存在于FGD!使用LRU机制,“LRU”指的是起源的布娃娃清理系统,该系统会自动删除未使用的布娃娃。由NPC生成的服务端布娃娃会自动添加到此系统中,但是由地图制作者放置的布娃娃不会
Allow Dissolve : [8192]
- 允许被分解
Motion Disabled : [16384]
- 禁用物理运动
Allow stretch : [32768]
- 允许拉伸
Start asleep : [65536]
- 默认休眠
Inputs
StartRagdollBoogie
- 开始布娃娃抖动效果,持续5秒错误:这个输入实际上应该使用一个参数来指定抖动时长,但在代码中的数据类型描述时使用了错误的字段类型 [todo tested in?]
- 代码修复:在
CRagdollProp
的数据类型中,查找DEFINE_INPUTFUNC( FIELD_VOID, "StartRagdollBoogie", InputStartRadgollBoogie )
并将FIELD_VOID
替换为FIELD_FLOAT
.
EnableMotion / DisableMotion
- 启用/禁用物理运动
AllowBloodPool
(仅存在于 之中) 不存在于FGD!- 如果放置在固体上,则会产生一摊血迹(粒子特效)注意:不适用于
prop_ragdoll_original
和prop_ragdoll_attached
.