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,保證地面不會受碰撞移動。