·不得不说,20来天的时间,头上全是包。
·首先上来就是用Unity自己的Ragdoll生成面板,结果造出来那个玩意真是惨不忍睹(懂的都懂)。而且碰撞边界溢出的不像样,妈的。
·然后这不就是想着,把人体伤害碰撞器跟Ragdoll碰撞关节用同一套。这环节倒还行,用了多个碰撞器混合基本可以包含目标人体。毕竟射击/击杀游戏,最后伤害碰撞肯定要匹配的,总不能一直用一个大胶囊xD
基本能契合
·当然,按照目前人物多体型设定,目测后期还要配套很多的人体变形相关的物理适配,只是后话。(有生之年)
·然后一开始估计,这个关节之间由于填充的很爆满,互相交叉,怀疑容易卡住,结果实测完全没问题。有点意外。
·但是大坑就在后面,Unity使用的Character Joint,是一种刚性/弹性体关节,跟人体这种半软物质实在差别太远。反正怎么设定就是狂抖个不停。而且由于我的关节配置量比默认还要复杂,那就基本很难停下来,一直微抖。就算把rigidBody里的sleep阈值提高也没用(而且翻了外网一堆老外还在怀疑这个阈值到底有没有用)。所以大部分时间都在研究这个关节的特性。
·网上翻了一圈,基本都说的跟Unity官方一样迷糊,又或者单纯只是讲解关节的基本原理。所以只能经过不断的肉测,摸明白了几个道理:
- 每个关节最好仅允许二个轴旋转(Twist、Swing1),使用第三轴旋转(Swing2)则极易加强微抖动
- Bounciness和Contact Distance经反复琢磨基本毫无实际用处都设为0,对克制抖动也无效,因为抗抖需要的是吸能。
- Projection这玩意似乎对标PhyX,用来在超过某种角度和距离时把关节复位或卡死,非常坑爹的设定,关了。
- 两个Limit Spring里面的Spring可以等于零,因为关节角度到达极限的默认反应实测是柔性的,不是完全硬限位。
- 两个Limit Spring里面的Damper作用有点迷糊,如果Spring不等于零,最好别设Damper,因为会让Spring玄学起来。
- Enable Collision不能开,车裂警告!(笑尿)
- Enable Preprocessing也不能开,按照官方说明是他会让关节回到标准位置,其结果就是你可能原地升仙!(再笑)
- 大概关节配置完就跟下面的图所示,啥没有,才是正解。

·所有上面没提到的其他弹性和damp设定啥的,全部交给physicMaterial和rigidBody里面的Drag和AngularDrag。就Over了!Drag和AngularDrag设定,我目前按照肢体分叉的重量权重分配,也就是比如:手臂节点的权重包含手和臂,腰节点的权重包含整个上身(头手胸)。
·最后,由于这么设定下来,单尸体情况基本不抖动,但多个尸体堆在一起又开始抖起来,而且要抖了很久才能停下来,有时候甚至不停。系统默认的Sleep真是尼玛玄学!......所以只能用脚本在每个Ragdoll里面计算运动能量,小于一定阀值强制Sleep。目前效果如下:

目前该稳定的基本稳定(最后一帧后面是完全不抖就没录)
·另外,还写了些Editor配套面板方便导入。网上搜了一圈听说商店上有一个很强的布娃娃插件,采用了布娃娃和rig bone分开机制,我觉得不错。但是由于我是采用变体型角色,应该是用不了了。只能自己写一个类似的,估计又是燃烧发量的干活。



暂无关于此日志的评论。