franciscochonge 发表于 2022-12-5 08:34

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

今天被坑了一次,本来想通过碰撞检测实现一个射击功能,但是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个小时的时间。

mastertravels77 发表于 2022-12-5 08:38

你开连续检测了没有?(缺省是离散检测)
页: [1]
查看完整版本: [坑]Unity 碰撞事件收不到通知