在项目创建一个脚本文件包新建脚本Cor
将以下代码复制
using UnityEngine;
public class Cor : MonoBehaviour{
#region 碰撞检测函数
#endregion
//至少一个刚体和两个碰撞器让两个游戏物体产生碰撞
//物理材质Phy Material让两个游戏物体之间表现不同效果
//触发器:让两个物体碰撞不产生效果,只进行碰撞处理
//注意:碰撞响应函数 属于 特殊的生命周期函数 也是通过反射调用
#region 物理碰撞检测响应函数
#endregion
//碰撞时 会自动执行这个函数
private void OnCollisionEnter(Collision collision){
//Collision类型的 参数 包含了碰到自己对象的相关信息
//关键参数
//1.碰撞到的对象碰撞器的信息 collision.collider
//2.碰撞对象的依附对象(GameObject) collision.gameObject
//3.碰撞对象的依附对象的位置信息 collision.transform
//4.碰触点数相关 collision.contactCount
//5.接触点具体坐标 ContactPoint[] pos = collsion.contacts;
//只要得到了以上任意一个信息就能获得该对象上的所有信息
//通过GetComponent<>
//collision.gameObject.GetComponent<Collider>().enabled = false;
print($"{this.name}被{collision.gameObject.name}撞到了");
}
//碰撞结束时 会自动执行这个函数
private void OnCollisionExit(Collision collision){
print($"{this.name}被{collision.gameObject.name}碰撞结束了");
}
//两个物体相互接触摩擦时 会不停的调用这个函数
private void OnCollisionStay(Collision collision){
print($"{this.name}一直在和{collision.gameObject.name}接触");
}
}
将代码挂载在物体Cube上运行
运行查看控制台信息 我们发现OnColliderEnter只发生了一次,OnColliderStay发生了很多次
以下代码
场景物体开启触发器后
物体穿透地面