布娃娃系统可以通俗地理解为,通过物理引擎来模拟角色的骨骼和关节反应,使得角色能够在没有预设动画的情况下自由运动。这种技术让角色在受到外力作用时(如被击中、摔倒等),能够呈现出更加自然和真实的动作反应。例如,角色死亡时的倒地动作、受到爆炸冲击后的四肢散开动作等。此外,它还可以用于角色与环境的交互,如角色在跳跃或摔倒时与地面或障碍物的碰撞反应。本文意在记录个人学习过程中学习到的如何简单的在C++中实现布娃娃系统。
首先从描述中可推断几个关键点:
一、需要有物理相关设置;
二、需要对碰撞进行设置
三、需要限制或停止角色的移动等行为的动画。
因此,在C++中创建RagDoll函数,首先为了在启用布娃娃系统后关闭对其他角色的碰撞,将其胶囊体设置为无碰撞。然后再来到Mesh,首先要模拟物理的效果并且防止其穿模向下掉落,则需要将其CollisionEnable设置为QueryAndPhysics,然后设置ObjectType为ECC_PhysicsBody,并对所有的通道先设置为阻挡,然后为了让其他角色不会被阻挡,则将其对pawn和worlddynamic设置为忽略。最后SetAllBodiesBelowSimulatePhysics,开启骨骼物理模拟,并以pelvis作为起始模拟的骨骼。
在设置好各类碰撞后,再通过动画实例暂停所有的蒙太奇动画,并设置运动模式为空。
这里在伤害事件中进行调用,判断是否死亡,死亡则调用布娃娃系统,并通过定时器在五秒后销毁actor。
可以发现在目标不同运动形态下击杀后会有其对应不同的布娃娃物理模拟效果。