找回密码
 立即注册
查看: 203|回复: 1

[坑]Unity 碰撞事件收不到通知

[复制链接]
发表于 2022-12-5 08:34 | 显示全部楼层 |阅读模式
今天被坑了一次,本来想通过碰撞检测实现一个射击功能,但是OnTriggerEnter 却怎么也触发不了。
我检查了以下设置都没有问题:
1、子弹和怪的身上都添加了碰撞体Collider,同时勾选了IsTrigger。
2、子弹身上也添加了Rigidbody,同时 勾选了 IsKinematic。我不需要物理驱动。
3、子弹和怪身上都挂了脚本并实现了 OnTriggerEnter。

发现并没有触发OnTriggerEnter事件。

于是我猜测可能Edit -> Physics ->Layer Collsion Mathrix设置的不对,查了下也没有问题。



最后想了想肯定是代码里有个全局的开关将碰撞检测的功能给关了,但是又觉得不可能啊,其他功能也有用到碰撞检测啊,于是抱着试试的态度查了下,果然有个控制器再控制这个功能
public class PhysicsController
{
    private List<PhysicsUseType> _used = new List<PhysicsUseType>();

    public void Use(PhysicsUseType type)
    {
        if (!_used.Contains(type))
        {
            _used.Add(type);
        }
        UpdatePhysicsSimulation();
    }

    public void Unuse(PhysicsUseType type)
    {
        _used.Remove(type);
        UpdatePhysicsSimulation();
    }

    // 刷新物理开关状态。
    public void UpdatePhysicsSimulation()
    {
        bool bSimulation = false;
        if (GameEntry.SceneContainer?.MainScene != null || GameEntry.SceneContainer?.PveScene != null)
        {
            if (_used.Count > 0)
                bSimulation = true;
        }
        else
        {
#if UNITY_EDITOR
            bSimulation = true;
#endif
            _used.Clear();
        }

        Physics.autoSimulation = bSimulation;
    }
}
这个类动态控制了Physics.autoSimulation,进入我的场景的时候是关闭的,所以碰撞检测一直不生效。

唉。。。 不知不觉被坑到了,浪费了我2个小时的时间。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-12-5 08:38 | 显示全部楼层
你开连续检测了没有?(缺省是离散检测)
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 19:38 , Processed in 0.092798 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表