赞
踩
对包含了碰撞体组件的物体来说,物体上是否具有刚体组件,以及刚体组件上动⼒学设置的不同,都会使物体的物理碰撞特性产⽣变化。可以将所有的碰撞体分为静态碰撞体、刚体碰撞体和动⼒学刚体碰撞体3类。
1. 静态碰撞体(Static Collider)
没有挂载刚体组件的碰撞体,称为静态碰撞体。静态碰撞体通常⽤于制作关卡中固定的部分,例如地形和障碍物⼀般不会移动位置,在刚体碰撞到它们的时候,它们的位置也不会变化。
物理系统会假定静态碰撞体不会移动和改变位置,以这个假定为前提,系统做了很多性能优化。同时,在游戏运⾏时,不应当改变静态碰撞体的开启或关闭的状态,也不应当移动或缩放碰撞体。如果这么做,物理系统会重新计算,带来额外的计算量,进⽽导致运⾏效率显著下降。更为严重的是,重新计算可能会进⼊⼀些未定义的状态,导致不正确的结果。例如,休眠的刚体在被⼀个静态碰撞体碰撞到时,很可能不会被⽴即唤醒,且⽆法计算正确的反作⽤⼒。
因此,应当仅修改⾮静态碰撞体的运动状态,⽽不要修改静态碰撞体的运动状态。如果需要碰撞体不被碰撞所影响,但⼜需要在脚本中让它运动,那么可以将刚体组件设置为动⼒学刚体。总之,对于会移动的碰撞体,务必要挂载刚体组件,并根据需要勾选Is Kinematic选项。
2. 刚体碰撞体(Rigidbody Collider)
挂载了普通刚体组件的碰撞体,称为刚体碰撞体。物理引擎会⼀直模拟计算刚体碰撞体的物理状态,因此刚体碰撞体会对碰撞以及脚本施加的⼒做出反应。
3. 动⼒学刚体碰撞体(Kinematic Rigidbody Collider)
挂载了刚体组件且刚体组件设置为动⼒学刚体的碰撞体,称为动⼒学刚体碰撞体。可以在脚本中直接修改动⼒学刚体碰撞体的位置来移动它,但它并不会对碰撞、⼒和速度的变化做出反应。动⼒学刚体碰撞体通常⽤在需要改变位置或状态的碰撞体上,如⼀个可以滑动的门,⼤部分时间门就与静⽌的障碍物⼀样,但是在必要的时候可以打开。正确地使⽤动⼒学刚体碰撞体,可以让物理引擎妥善处理各种细节问题,同时不会带来性能问题。例如动⼒学刚体碰撞体可以对其他物体产⽣适当的摩擦⼒,也可以在发⽣碰撞时正确唤醒其他刚体。
就算是在没有发⽣移动的情况下,动⼒学刚体碰撞体与静态碰撞体也有微妙的区别。例如,⼀个刚体碰撞体可以随时开启或关闭Is Kinematic选项,⽽对静态碰撞体来说,直接开启或关闭碰撞体组件会导致重新计算,带来性能问题。
再如,⼀个⾓⾊在正常情况下受动画系统的控制,但它在被爆炸冲击⼒波及或被严重撞击的时候,就会受物理影响⽽被击⻜。这是由于该⾓⾊默认是⼀个动⼒学刚体碰撞体,它的肢体受动画系统的控制,但是在必要的时候,会取消勾选Is Kinematic选项,从⽽让它变成⼀个受物理影响的刚体。
⼩知识
布偶(Ragdoll)在现代游戏中,⼈形⾓⾊在死亡或失去控制后,会保持⼈形⾻骼关节的物理运
动⽅式,并被物理系统完全接管,这种受物理控制的⼈形⾓⾊称为“布偶(Ragdoll)”。Unity也⽀持布偶,在场景中创建物体,选择“Create→3D→Ragdoll…”就会打开⼀个布偶关节编辑框,⽤于将⼈形⾓⾊对应为布偶
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。