碰撞检测——碰撞检测函数

物理碰撞检测相应的函数我们将通过print函数来举例说明:

在VS code中,我们可以通过输入OnCollisionEnter,然后按Tab键来补全该函数结构,其他的函数也相同。

private void OnCollisionEnter(Collision collision) {

}
复制代码

如果我们想要碰撞触发接触时会自动执行的函数:

private void OnCollisionEnter(Collision collision) {

}
复制代码

如果我们想要碰撞结束分离时会自动执行的函数:

private void OnCollisionExit(Collision collision) {

}
复制代码

如果我们想要两个物体相互接触摩擦时会不停的调用的函数(这里要注意的是相对运动摩擦时会调用,只是静止接触可能并不会调用):

private void OnCollisionStay(Collision collision){

}
复制代码

触发器检测响应函数

值得一提的是,该函数在使用时,需要将碰撞器的is Trigger选项勾选。

如果我们想要触发开始的函数,当第一次接触时会自动调用:

private void OnTriggerEnter(Collider other){

}
复制代码

如果我们想要触发结束的函数,当水乳交融的状态结束时,会调用一次:


private void OnTriggerExit(Collider other) {

}
复制代码

如果我们想要当两个对象一直接触触发时,在水乳交融的时候会不停调用:


private void OnTriggerStay(Collider other) {

}
复制代码

我们在使用函数的时候,要明确什么时候会响应函数

1.只要挂载的物体能和别的物体产生碰撞或触发,那么对应的函数就能够被响应。

2.每个函数应当根据需求进行书写。

3.如果是一个组合物体,刚体父对象上没有碰撞器,但其子物体上有碰撞器的时候,在子物体上添加相关的脚本函数不会被触发,对其父对象添加脚本才会被触发。

4.要明确物理碰撞和触发器响应的区别。

我们一般会把想要重写的,碰撞和触发的函数都写成保护类型的,没有必要写成public类型,因为我们不会去自己手动调用,而是Unity通过反射帮助我们自动调用。

碰撞和触发器函数都可以写成虚函数在子类中被重写

举个例子:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson16 : MonoBehaviour
{
    //注意:访问修饰符需要写成 protected,没必要写成public,因为不需要自己手动调用
    protected virtual void OnTriggerEnter(Collider other)
    {
        print(this.name + "被" + other.gameObject.name + "触发了");
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Js_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值