制作方式
- 倒地动作的某个时刻开启ragdoll,如果模型偏离胶囊体过远,需要调整胶囊体位置。
- 接着播放起身动画,此时需要SaveSnapShot得到ragdoll的Pose。
- 利用此Pose在动画蓝图里通过Blend Pose In Mesh Space(或者Blend Pose,在Local空间)节点,以及一个Weight变量来动态的Blend 两者。
姿势朝向问题
Ragdoll 后身体的朝向可能会和起身姿势偏差较大,比如一个是向着正方形趴着,但起身动作是从负方向趴着站起来,然后转向正方向。比如如下起身动作。

这时如果直接Blend两个Pose,会导致模型旋转。如果模型的朝向大致一致,blend效果会更好。
起身资源的朝向(模型空间里)是固定的,但ragdoll开启后,骨骼朝向是由物理驱动的,不是模型变换影响(Mesh的ComponentTransform)。所以可以调整ragdoll的pose的模型朝向。
调整ragdoll 模型朝向
这里的调整不能让模型真的转向起身动作,世界空间中ragdoll的朝向不变,但模型空间中ragdoll的朝向和起身姿势保持一致,之后blend 效果会很好。
所以需要调整模型空间的朝向。因为ragdoll期间,模型空间的旋转不影响ragdoll的pose,所以这时先旋转模型空间,让起身动画朝向和ragdoll姿势朝向一致。
需要下一帧SaveSnapShot,这时骨骼数据从物理通过过来时会根据当前的模型变换重新计算。
如果在当前帧Save Pose的话,由于骨骼变换已经从物理同步并计算好了相对变换,当前模型变换会导致ragdoll的pose也一起转。所以需要下一帧,让物理通过过来时,根据当前的物理世界变换依照我们设置的模型变换计算新的骨骼变换。
比如ragdoll姿势是模型朝向和ragdoll朝向相差90度,起身动作和模型朝向相差180度。这时模型朝向需要旋转90度,让起身动作刚好能和ragdoll朝向一致。ragdoll的朝向需要从90度,也变成180度。
朝向计算
上面提到需要计算模型的旋转朝向,这个角度差是由ragdoll的姿势朝向和起身动作的朝向决定的。
可以根据某根骨骼的朝向做参考(比如Pelvis的某个轴),也可以通过指定两个骨骼(比如Pelvis指向Neck)。
- 计算模型空间里ragdoll 的姿势朝向 Q_1。
- 计算模型空间里当前Pose的姿势朝向Q_2。
- 计算从当前起身姿势转向到ragdoll朝向姿势的差值Q_d = Q_1 * Q_2^(-1)
- 转胶囊体(会带到模型空间旋转)RootComRotWS = Q_d * RootCompInitRotWS。
总结
ragdoll的姿势朝向可能会和起身朝向相差较大,为了让两个pose 的Blend更加自然,需要调整ragdoll的相对朝向。通过反向调整模型空间得到和起身动作一致的ragdoll姿势。之后进行blend.
上面操作Blend的权重控制,朝向计算和调整可以放在NotifyState中进行。