物理系统(1/3)
碰撞检测
概念
两个或者两个以上的物体发生了接触,我们称为碰撞。程序代码监视到两个或两个以上物体发生了碰撞,我们称为检测;综合起来讲就是碰撞检测
检测分类
检测需要通过不同坐标系产生不同的检测
2D坐标系:2D系统检测较为简单,一般使用AABB碰撞法,就是利用简单的几何图形相交认为碰撞;
3D坐标系:3D系统比较复杂,碰撞也比较精细,使用立体几何边缘碰撞检测法
碰撞检测需要的条件
碰撞必须要两个或两个以上的物体相互作用
碰撞必须是两个动态或者一个动态一个静态物体发生碰撞
以上说明看出碰撞必须有一个动态物体的存在
什么是动态物体?
会发生运动变化的物体,他必须拥有运动特性->可以受到力的影响
什么是静态物体?
没有运动特性的物体
如何让物体产生动态特性
在Unity引擎中我们可以使用“刚体”实现动态特性
刚体
他具有运动特性,在收到外力作用下可以保持物体的形状不发生改变,这样的组件,我们称为“刚体组件”;
用途
在游戏个体上提供基础力学
刚体在引擎中我们可以提供力学关系让物体发生运动
有个刚体证明这个物体就是运动物体
我们可以去除重力特性,让其保持碰撞特性
光有刚体不可以产生完整的碰撞检测
碰撞几何体
为运动物体和静态物体提供一个几何图形的包围盒来保护我们的物体内部结构,同时提供检测的特性
立方体
球体
胶囊体
网格面
轮距
Rigidbody 刚体组件
物体发生碰撞的必要条件
1、两个物体之中,必须至少有一个具有刚体组件,并且这个刚体组件不能处于休眠状态,也不能是运动学刚体
2、两者必须都有碰撞器
3、如果一方是运动学刚体,另外一方必须是非运动学刚体
4、如果一方使用的是网格碰撞器,那么可以在正面进行碰撞,如果想要与网格碰撞器的反面也能碰撞,需要勾选网格碰撞器的凸多边形选项。
物体的触发器触发的必要条件
1、两个物体之中,必须至少有一个具有刚体组件,并且这个刚体组件不能处于休眠状态
2、两者必须都有碰撞器
3、如果其中一方是运动学刚体,则另一方必须是非运动学刚体。(两个物体都有刚体、碰撞器)
触发的方式
带有碰撞效果
void OnCollisionEnter ( Collision col ) { }
void OnCollisionExit ( Collision col ) { }
void OnCollisionStay ( Collision col ) { }
不带有碰撞效果
void OnTriggerEnter( Collider col ) { }
void OnTriggerExit ( Collider col ) { }
void OnTriggerStay ( Collider col ) { }