zoukankan      html  css  js  c++  java
  • 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,保证地面不会受碰撞移动。

  • 相关阅读:
    MyBatis Plus 导入IdType失败
    SpringBoot+Vue项目上手
    高并发
    多线程
    Java 接口
    Java后端总结
    Aliyun Linux2安装Docker
    Zookeeper集群部署及报错分析
    CentOs7配置java环境
    kafka笔记——kafka启动
  • 原文地址:https://www.cnblogs.com/elvisxu/p/4090490.html
Copyright © 2011-2022 走看看