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