Unity ColliderTrigger分析

写代码的时候在unity的OnTriggerEnter、OnTriggerStay、OnTriggerExit绕了好久,不太能理解它是在什么时候运行的,开了一个空工程文件来做实验,正方体作为触发器,球(必须要有刚体和碰撞体)负责进入,代码输出运行状态。

测试代码(挂正方体上)

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("Enter");
    }
    private void OnTriggerStay(Collider other)
    {
        Debug.Log("Stay");
    }
    private void OnTriggerExit(Collider other)
    {
        Debug.Log("Exit");
    }
}

实验一:

运行前:球和触发器正方体在运行前重叠

enter后逐帧stay

重叠过程中禁用collider

结果:不执行exit

重叠过程中更换球所在层级

结果:无变化,持续stay

将球通过transform缩小至不接触触发器

结果:在物体最后一个顶点离开触发器时执行exit

将球通过transform移动至不接触触发器

结果:在物体最后一个顶点离开触发器时执行exit

ps.瞬移至不接触触发器也会执行exit

实验二:

运行前:球和触发器无接触

将球通过transform放大至接触触发器

结果:在物体第一个顶点接触触发器时执行enter

将球通过transform移动至接触触发器

结果:在物体第一个顶点接触触发器时执行enter

ps.瞬移至接触触发器,会执行enter、stay


总结:这三个函数是周期性执行的,在不禁用其必须组件的情况下,一定会将三个函数都按序执行一遍,Enter和Exit的判定都是最近顶点,只执行一次


2024.1.17

之前一直认为有OnTriggerEnter、stay、exit的方法代码必须挂在作为触发器的一方,也就是前面的正方体上的collider要勾选Is Trigger,后面做项目发现不是这样,又做了实验摸出来的规律是:

1)一方有rigidbody且双方都有collider

2)Is Trigger在任意一方的collider勾选上或两个collider都勾上

都会执行带OnTrigger的代码,无论它挂在正方体还是球上,若挂在正方体上检测到的collider就是球的collider,挂球上检测到的collider就是正方体的collider

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值