Zh/Prop ragdoll: Difference between revisions
< Zh
		
		
		
		Jump to navigation
		Jump to search
		m (→Keyvalues)  | 
				m (→Inputs:  Substituted IO templates)  | 
				||
| (3 intermediate revisions by one other user not shown) | |||
| Line 7: | Line 7: | ||
{{warning|该实体生成的是服务端布娃娃,会与任何道具发生碰撞,但这会造成大量网络开销。通过默认休眠(勾选Start asleep Flag),禁用物理运动或禁用与动态道具的碰撞({{not in FGD}}在soild键值中使用0为参数),并仅在需要时启用物理运动,可以显著减少网络开销}}  | {{warning|该实体生成的是服务端布娃娃,会与任何道具发生碰撞,但这会造成大量网络开销。通过默认休眠(勾选Start asleep Flag),禁用物理运动或禁用与动态道具的碰撞({{not in FGD}}在soild键值中使用0为参数),并仅在需要时启用物理运动,可以显著减少网络开销}}  | ||
{{bug|通过Hammer设置自定义动作并勾选<code>Start Asleep</code> Flag会导致渲染框无法更新,在生成时唤醒布娃娃一帧时间后再次休眠即可解决此问题}}  | {{bug|通过Hammer设置自定义动作并勾选<code>Start Asleep</code> Flag会导致渲染框无法更新,在生成时唤醒布娃娃一帧时间后再次休眠即可解决此问题}}  | ||
{{bug|在{{Portal2|4}}中,布娃娃无法穿过传送门,这也在{{Portal|4}}中经常发生}}  | {{bug|在{{Portal2|4}}中,布娃娃无法穿过传送门,这也在{{Portal|4}}中经常发生|hidetested=1}}  | ||
{{bug|[[Prediction|预测]]时会忽略布娃娃,这会在触摸布娃娃时导致大量的预测错误}}  | {{bug|[[Prediction|预测]]时会忽略布娃娃,这会在触摸布娃娃时导致大量的预测错误}}  | ||
{{altnames|name1=physics_prop_ragdoll}}  | {{altnames|name1=physics_prop_ragdoll}}  | ||
| Line 44: | Line 44: | ||
==Keyvalues==  | ==Keyvalues==  | ||
{{KV Targetname}}  | {{KV Targetname}}  | ||
{{KV|Override Animation|intn=angleOverride|string|  | {{KV|Override Animation|intn=angleOverride|string|以<code>index,x y z,...</code>为格式表示的关节旋转列表,由引擎通过[[hammer_update_entity]]指令或{{Hammer++|4}}的物理模拟工具填充。除非需要清空,否则不要手动修改}}  | ||
{{Expand|title=非V社游戏特定内容|  | {{Expand|title=非V社游戏特定内容 {{gmod}}{{bms}}|  | ||
{{KV|Health|intn=health|integer|布娃娃要被碎尸所需受到的伤害值|only=BMS|also={{Entropy : Zero 2|4}}}}  | {{KV|Health|intn=health|integer|布娃娃要被碎尸所需受到的伤害值|only=BMS|also={{Entropy : Zero 2|4}}}}  | ||
{{KV|Character Manifest Mimic Name|intn=MimicName|string|从角色清单中选择一个名字或实体类名来给布娃娃穿衣|only=BMS}}  <!--谁能给我解释下这什么意思-->  | {{KV|Character Manifest Mimic Name|intn=MimicName|string|从角色清单中选择一个名字或实体类名来给布娃娃穿衣|only=BMS}}  <!--谁能给我解释下这什么意思-->  | ||
| Line 60: | Line 60: | ||
==Inputs==  | ==Inputs==  | ||
{{  | {{I|StartRagdollBoogie|开始布娃娃抖动效果,持续5秒{{bugfix|这个输入实际上应该使用一个参数来指定抖动时长,但在代码中的数据类型描述时使用了错误的字段类型|在<code>CRagdollProp</code>的数据类型中,查找<code>DEFINE_INPUTFUNC( FIELD_VOID, "StartRagdollBoogie", InputStartRadgollBoogie )</code>并将<code>FIELD_VOID</code>替换为<code>FIELD_FLOAT</code>.|code}}}}  | ||
{{  | {{I|EnableMotion / DisableMotion|启用/禁用物理运动}}  | ||
{{  | {{I|FadeAndRemove|淡出并删除自身,附加参数<nowiki>=</nowiki>淡出所需时间|since={{hl2ep2}}}}  | ||
{{  | {{I|AllowBloodPool|如果放置在固体上,则会产生一摊血迹(粒子特效){{note|不适用于<code>prop_ragdoll_original</code>和<code>prop_ragdoll_attached</code>.}}|nofgd=1|only={{bms}}}}  | ||
== 参见 ==  | == 参见 ==  | ||
* {{ent|env_ragdoll_boogie}}  | * {{ent|env_ragdoll_boogie}}  | ||
* [[Prop Types Overview]]  | * [[Prop Types Overview]]  | ||
Latest revision as of 10:29, 21 April 2025
参见:  有关创建布娃娃的具体细节,详见$collisionjoints.
| CRagdollProp | 
prop_ragdoll是一个点实体,可在所有的 
 起源 游戏中使用。是一个具有物理性质的布娃娃。布娃娃是一组约束在一起的物理对象的集合,用于模拟像尸体这样的关节物体,它们的物理模拟有着昂贵的性能开销.
Start Asleep Flag会导致渲染框无法更新,在生成时唤醒布娃娃一帧时间后再次休眠即可解决此问题  [todo tested in ?]physics_prop_ragdoll。  
prop_ragdoll_original使用。区别在于:
  | 
尸体布娃娃/布娃娃转换
在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
- Name (目标名称) <target_source>[ Edit ]
 - 这个名称是其他实体通过 输入/输出 或其他 关键值(如 
parentname或target) 来引用该实体时使用的标识符。
该名称也会显示在 Hammer 编辑器的 2D 视图和 实体报告 中。参见: 所有实体均可使用的 通用键值、输入与输出 
- Override Animation (angleOverride) <字符串>
 - 以
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.