public static void Unsubscribe(Combo combo, OnCollisionEnterHandler handler) { if (_handlers.ContainsKey(combo)) { _handlers[combo] -= handler; } }
public override void Dispose() { if (this.IsDisposed) { return; } base.Dispose(); if (OnCollisionEnterHandler != null) { var enterDelegates = OnCollisionEnterHandler.GetInvocationList(); for (int i = 0; i < enterDelegates.Length; i++) { OnCollisionEnterHandler -= enterDelegates[i] as Action <Unit, Vector3>; } } if (OnCollisionExitHandler != null) { var exitDelegates = OnCollisionExitHandler.GetInvocationList(); for (int i = 0; i < exitDelegates.Length; i++) { OnCollisionExitHandler -= exitDelegates[i] as Action <Unit, Vector3>; } } if (OnCollisionStayHandler != null) { var stayDelegates = OnCollisionStayHandler.GetInvocationList(); for (int i = 0; i < stayDelegates.Length; i++) { OnCollisionStayHandler -= stayDelegates[i] as Action <Unit>; } } }
//! ----functions---- public static Unsubscriber Subscribe(Combo combo, OnCollisionEnterHandler handler) { if (_handlers.ContainsKey(combo)) { _handlers[combo] += handler; } else { _handlers.Add(combo, handler); } return(new Unsubscriber(combo, handler)); }
void OnDestroy() { if (OnTriggerEnterHandler != null) { foreach (System.Delegate d in OnTriggerEnterHandler.GetInvocationList()) { OnTriggerEnterHandler -= (System.Action <GameObject, Collider>)d; } } if (OnTriggerExitHandler != null) { foreach (System.Delegate d in OnTriggerExitHandler.GetInvocationList()) { OnTriggerExitHandler -= (System.Action <GameObject, Collider>)d; } } if (OnCollisionEnterHandler != null) { foreach (System.Delegate d in OnCollisionEnterHandler.GetInvocationList()) { OnCollisionEnterHandler -= (System.Action <GameObject, Collision>)d; } } if (OnCollisionExitHandler != null) { foreach (System.Delegate d in OnCollisionExitHandler.GetInvocationList()) { OnCollisionExitHandler -= (System.Action <GameObject, Collision>)d; } } if (OnControllerColliderHitHandler != null) { foreach (System.Delegate d in OnControllerColliderHitHandler.GetInvocationList()) { OnControllerColliderHitHandler -= (System.Action <GameObject, ControllerColliderHit>)d; } } }
public void OnCollisionEnter(Unit unit, Vector3 pos) { Log.Debug(string.Format("和unit {0} 碰撞了,碰撞点在{1}", unit.UnitData.unitTag, pos)); OnCollisionEnterHandler?.Invoke(unit, pos); }
public static Unsubscriber Subscribe(TagName a, TagName b, OnCollisionEnterHandler handler) { var combo = new Combo(a, b); return(Subscribe(combo, handler)); }
public Unsubscriber(Combo combo, OnCollisionEnterHandler handler) { _combo = combo; _handler = handler; }