|
今天被坑了一次,本来想通过碰撞检测实现一个射击功能,但是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个小时的时间。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|