void DoCheckCollision() { if (collisionEvent == null) { return; } GameObject[] colliderGameObjects = Quadtree.CheckCollision(_leaf); foreach (GameObject colliderGameObject in colliderGameObjects) { if (collisionEvent == null) { break; } collisionEvent(colliderGameObject); } //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 }
private void OnDisable() { Quadtree.RemoveLeaf(_leaf); }
private void OnEnable() { UpdateLeaf(); Quadtree.SetLeaf(_leaf); }