/* * 第二步:根据前面的委托类型定义的事件,结构是: * event 委托类型 事件名 */ void DoCheckCollision() { if (collisionEvent == null) { return; } /* * 首先要检测一下这个事件有没有被订阅,没有订阅的事件是null。 * 发出没有被订阅的事件卵用没有,谁也不会有行动,实际上你要是真的把没订阅的事件发出了马上就会报错。 */ GameObject[] colliderGameObjects = QuadtreeObjectEvent.CheckCollision(_leaf); foreach (GameObject colliderGameObject in colliderGameObjects) { if (collisionEvent == null) { break; } collisionEvent(colliderGameObject); } /* * 发出事件很简单:像方法一样用,名字(参数) * 很明显能看出来这里的使用方式和前面定义委托类型的时候的参数和返回是相同的。 * * 需要注意这里又进行了一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 */ }
private void OnEnable() { UpdateLeaf(); QuadtreeObjectEvent.SetLeaf(_leaf); }
private void OnDisable() { QuadtreeObjectEvent.RemoveLeaf(_leaf); }