物理引擎
Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。
1、刚体
在介绍物理引擎之前,需要先学习一下刚体(Rigidbody)。Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。
下面创建一个游戏对象,给这个游戏对象添加上刚体组件。如下图所示。
下面我们学习一下物理组件中刚体的一些属性。
Mass:质量,该项用于设置游戏对象的质量,数据类型是float类型,默认情况都是1,一般来说,大部分刚体的Mass属性值应该设置为0.1-10.0之间,这样模拟出来的刚体更加接近于生活。
Drag:阻力,这里的阻力是指物体移动时的阻力,物体在任何方向移动都会受到Drag的影响。数据类型float类型,默认情况下为0,Drag值是阻碍物体做位移运动,它的方向总是和物体移动的方向相反,通过设置Drag值可以达到羽毛和石头掉落的效果。
Angular Drag:旋转阻力,与Drag相似,旋转阻力也是用来物体运动的,旋转阻力是用来阻碍物体旋转的,数据类型是float类型,默认情况都是1。
Use Gravity:使用重力,若开启此项,游戏对象会受到重力的影响。
Is Kinematic:是否开启动力学,若开启此项,游戏对象将不再受物理引擎的影响从而只能通过Transform属性来对其操作
Interpolate:插值,该项用于控制运动的抖动情况,有3项可以选择,None:没有插值;Interpolate:内插值,基于前一帧的Transform来平滑此次的Transform;Extrapolate:外插值,基于下一帧的Transform来平滑此次的Transform
Collision Detection:碰撞检测,该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞,有3项可以选择,Discrete:离散碰撞检测,该模式与场景中其他的所有碰撞体进行碰撞检测;Continuous:连续碰撞检测;Continuous Dynamic:连续动态碰撞检测模式
Constraints:约束,该项用于控制对于刚体运动的约束
2.刚体变量
为了获取和更改物体的运动状态,unity3D还预留了多个变量接口,这些接口简化了对物体运动状态的处理,使得开发人员能够轻易地对物体的运动状态进行干预。
角速度(angularVelocity):表示刚体的角速度向量,其数据类型为Vector3,该向量的方向即为刚体旋转轴的方向,旋转方向遵循左手定则;该角速度的大小为向量的摸,单位为rad/s。建议不要对此变量进行修改。
Void Start(){
GetComponent<Rigibody>().angularVe