/// <summary> /// 发送事件给接收者的所有子物体(不包含接收者)。 /// </summary> /// <param name="sender">事件发送者。</param> /// <param name="type">事件类型。</param> /// <param name="e">事件数据。</param> /// <param name="receiver">事件接收者。</param> public static void SendEventToChildren(object sender, int type, EventData e, GameObject receiver) { Dictionary <GameObject, List <EventCallback> > listeners; if (!eventTable.TryGetValue(type, out listeners)) { EventPool.Delete(e); return; } SenderCount += 1; e.Sender = sender; foreach (Transform child in receiver.transform) { if (e.IsStopped) { break; } SendEventToGameObject(sender, e, child.gameObject, listeners, true); } EventPool.Delete(e); SenderCount -= 1; }
/// <summary> /// 发送一个事件给 Component 接收者列表。 /// </summary> /// <param name="sender">事件发送者。</param> /// <param name="type">事件类型。</param> /// <param name="e">事件数据。</param> /// <param name="receivers">接收者列表。</param> /// <param name="includeChildren">是否发送给接收者的子物体。</param> public static void SendEvent(object sender, int type, EventData e, List <Component> receivers, bool includeChildren = false) { Dictionary <GameObject, List <EventCallback> > listeners; if (!eventTable.TryGetValue(type, out listeners)) { EventPool.Delete(e); return; } SenderCount += 1; e.Sender = sender; for (int i = 0; i < receivers.Count; i++) { if (e.IsStopped) { break; } SendEventToGameObject(sender, e, receivers[i].gameObject, listeners, includeChildren); } EventPool.Delete(e); SenderCount -= 1; }
/// <summary> /// 发送一个事件给指定的 GameObject 接收者。 /// </summary> /// <param name="sender">事件发送者。</param> /// <param name="type">事件类型。</param> /// <param name="e">事件数据。</param> /// <param name="receiver">接收者。</param> /// <param name="includeChildren">是否发送给接收者的子物体。</param> public static void SendEvent(object sender, int type, EventData e, GameObject receiver, bool includeChildren = false) { if (receiver == null) { throw new ApplicationException("SendEvent: receiver == null!"); } Dictionary <GameObject, List <EventCallback> > listeners; if (!eventTable.TryGetValue(type, out listeners)) { EventPool.Delete(e); return; } SenderCount += 1; e.Sender = sender; SendEventToGameObject(sender, e, receiver, listeners, includeChildren); EventPool.Delete(e); SenderCount -= 1; }
/// <summary> /// 发送一个事件给所有侦听者。 /// </summary> /// <param name="sender">事件发送者。</param> /// <param name="type">事件类型。</param> /// <param name="e">事件数据。</param> public static void SendEvent(object sender, int type, EventData e) { Dictionary <GameObject, List <EventCallback> > listeners; if (!eventTable.TryGetValue(type, out listeners)) { EventPool.Delete(e); return; } SenderCount += 1; e.Sender = sender; foreach (GameObject receiver in listeners.Keys) { if (e.IsStopped) { break; } SendEventToGameObject(sender, e, receiver, listeners, false); } EventPool.Delete(e); SenderCount -= 1; }