Unity3d中多足怪的物理RagDoll实现
Unity3D 4.5中的物理只支持双足人形的RagDoll,对于非双足人形的怪物,需要自己动手在每根骨骼上添加物理关节(joint)。具体做法是:
1.在3DsMax中创建怪物模型及骨骼;
2.使用NVIDIA_PhysX_For_Autodesk_3ds_Max插件生成怪物模型的RagDoll,设置骨骼碰撞体参数及关节约束(Joint Constraint)参数;
3.将生成的RagDoll导出生成.FBX和.xml文件,导出的路径名不能包含中文,否则导出.xml文件失败,xml是用来描述生成的物理信息,记录物理材质,碰撞体及约束参数;
4.将.FBX和.xml文件导入到Unity3D场景中,可看到怪物模型的骨架信息;
5.对怪物模型的每根骨骼添加Configurable Joint或Character Joint组件和RigidBody组件(加载joint时自动加入),以及Collider组件;
6.解析xml文件,将碰撞体和关键约束的参数设置到对应的骨骼中。
这样Unity3D中多足怪的物理便设置好了。
下面说一下设置参数时需要注意的一些问题。首先,Max的坐标系和Unity中的坐标系不同,在导入模型后发现两个坐标系间的对应关系是:
Unity x ==> Max -x
Unity y ==> Max z
Unity z ==> Max -y
设置时需要注意变换。其次,在设置Collider参数时需要注意Max中是以cm为单位,而Unity中是以m为单位,因此xml中Collider的参数需要在Unity中乘以0.01。另外,一定需要注意的是如果需要该Collider生效,一定要把Collider中的IsTrigger属性选为false,否则Collider不会生效,碰撞时会穿过去。
最后需要测试一下添加RagDoll后的效果,创建一个空场景,在场景中添加一个Cube作为地面,为Cube添加RigidBody组件,将做好的带物理的多足怪模型放置在地面上方,勾选每根骨骼RigidBody的UseGravity参数,使重力影响生效。将地面RigidBody组件的UseGravity参数选为false,将IsKinematic设为true,保证地面不会受碰撞移动。