1.物理碰撞检测响应函数
//碰撞触发接触时会 自动执行这个函数
private void OnCollisionEnter(Collision collision)
{
//Collision类型的 参数 包含了 碰到自己的对象的相关信息
//关键参数
//1.碰撞到的对象碰撞器的信息
//collision.collider
//2.碰撞对象的依附对象(GameObject)
//collision.gameObject
//3.碰撞对象的依附对象的位置信息
//collision.transform
//4.触碰点数相关
//collision.contactCount
//接触点 具体的坐标
//ContactPoint[] pos = collision.contacts;
//只要得到了 碰撞到的对象的 任意一个信息 就可以得到它的所有信息
}
//碰撞结束分离时 会自动执行的函数
private void OnCollisionExit(Collision collision)
{
}
//两个物体相互接触摩擦时 会不停的调用该函数
private void OnCollisionStay(Collision collision)
{
}
2.触发器检测响应函数
//触发开始的函数 当第一次接触时 会自动调用
protected virtual void OnTriggerEnter(Collider other)
{
}
//触发结束的函数 当重合的状态结束时 会调用一次
private void OnTriggerExit(Collider other)
{
}
//当两个对象 重合的时候 会不停调用
private void OnTriggerStay(Collider other)
{
}
3.刚体加力
//给刚体加力的目标就是
//让其有一个速度 朝向某一个方向移动
//1.首先应该获取刚体组件
rigidBody = this.GetComponent<Rigidbody>();
//2.添加力
//相对世界坐标
//世界坐标系 Z轴正方向加了一个力
//加力过后 对象是否停止移动 是由阻力决定的
//如果阻力为0 那给了一个力过后 始终 是不会停止运动
rigidBody.AddForce(Vector3.forward * 10);
//如果想要在 世界坐标系方法中 让对象 相对于自己的面朝向动
rigidBody.AddForce(this.transform.forward * 10);
//相对本地坐标
rigidBody.AddRelativeForce(Vector3.forward * 10);
//3.添加扭矩力,让其旋转
//相对世界坐标
rigidBody.AddTorque(Vector3.up * 10);
//相对本地坐标
rigidBody.AddRelativeTorque(Vector3.up * 10);
//4.直接改变速度
//这个速度方向 是相对于 世界坐标系的
rigidBody.velocity = Vector3.forward * 5;
//5.模拟爆炸效果
//模拟爆炸的力 一定是 所有希望产生爆炸效果影响的对象
//都需要得到他们的刚体 来执行这个方法 才能都有效果
rigidBody.AddExplosionForce(100, Vector3.zero, 10);
//获取刚体是否处于休眠状态 如果是
if (rigidBody.IsSleeping())
{
//就唤醒它
rigidBody.WakeUp();
}