刚体
简介
- 带有刚体组件的游戏物体。
add Compoment-physics-Rigidbody - 刚体组件可使游戏对象受物理引擎控制,在受到外力时产生真实世界中的运动。
- 物理引擎:模拟真实世界中物体物理特性的引擎。
属性
- 质量 Mass:物体的质量。
- 阻力 Drag:当受力移动时物体受到的空气阻力。
0表示没有空气阻力。极大时可使物体停止运动,通常砖头0.001,羽毛设置为10。 - 角阻力 Angular Drag:当受扭力旋转时物体受到的空气阻力。
0表示没有空气阻力,极大时使物体停止旋转。 - 使用重力 Use Gravity:若激活,则物体受重力影响。
- 是否是运动学Is Kinematic:若激活,该物体不再受物理引擎控制,而只能通过变换组件来操作。
- 插值Interpolate:用于缓解刚体运动时的抖动。
- 无 None :不应用插值。
- 内插值 Interpolate :基于上一帧的变换来平滑本帧变换。
- 外插值 Extrapolate :基于下一帧的预估变换来平滑本帧变换。
- 碰撞检测 Collision Detection:碰撞检测模式。快速移动的刚体在碰撞时有可能互相穿透,可以设置碰撞检测频率,但频率越高对物理引擎性能影响越大。
- 不连续 Discrete:不连续碰撞检测。适用于普通碰撞(默认模式)。
- 连续 Continuous:连续碰撞检测。
- 动态连续 Continuous Dynamic:连续动态碰撞检测,适用于高速物体。
- 约束 Constraints:对刚体运动的约束。
- 冻结位置 Freeze Position:刚体在世界中沿所选X,Y,Z轴的移动,将无效。
- 冻结旋转 Freeze Rotation:刚体在世界中沿所选的X,Y,Z轴的旋转,将无效。
碰撞器
简介
- 使刚体具有碰撞效果。
- 可以单独作用于物体,但是要使移动的物体具有碰撞效果,必须附加刚体组件。
分类
- 静态碰撞器 Static Collider :只有碰撞器没有刚体的物体
现象:保持静止或者轻微移动,如:平面/树木。 - 刚体碰撞器 Rigidbody Collider:具有刚体和碰撞器的物体;
现象:完全受物理引擎影响。 - 运动学刚体碰撞器:带刚体,且勾选Is Kinematic。
此碰撞器不能添加力,只能通过transform移动。属性
- 是否触发器 Is Trigger:如激活,此碰撞器用于触发事件,并且被物理引擎忽略。
- 材质 Material:引用何种物理材质决定了它和其它对象如何作用。
- 凸起的Convex:不激活则网格碰撞器间没有碰撞效果;
- Mesh网格:用于碰撞所引用的网格。
碰撞条件
- 两者具有碰撞组件。
- 运动的物体具有刚体组件。
碰撞三阶段
- 当进入碰撞时执行
void OnCollisionEnter(Collision collOther)
- 当碰撞体与刚体接触时每帧执行
void OnCollisionStay(Collision collOther)
- 当停止碰撞时执行
void OnCollisionExit(Collision collOther)
Collision参数
事件参数类
- 获取对方碰撞器组件
other.cllider.getCompontent<?>();
- 获取接触点
CotactPoint cp = other.contacts[0];
- 获取接触点世界坐标
Vector3 p = cp.point;
- 获取接触面法线
Vector3 v = cp.normal;
触发器
简介
- 带有碰撞器组件,且Is Trigger属性被勾选的物体。
- 现象:无碰撞效果。
触发条件
- 两者具有碰撞组件
- 其中至少一个带有刚体组件。
- 其中至少一个勾选isTrigger。
触发三阶段
- 当Collider(碰撞体)进入触发器时执行。
void OnTriggerEnter(Collider cldOther) - 当碰撞体与触发器接触时每帧执行。
void OntriggerStay(Collider cldOther) - 当停止触发器时执行
void OnTriggerExit(Collider cldOther)