/// <summary> /// Adds the listener with editor. /// </summary> /// <param name="myEvent">My event.</param> /// <param name="action">Action.</param> public static void AddListenerWithEditor(this UnityEvent myEvent, UnityAction action) { #if UNITY_EDITOR myEvent.RemoveEmptyPersistentListeners(); #endif /* * for (int i = 0; i < myEvent.GetPersistentEventCount (); i++) { * if(myEvent.GetPersistentTarget (i) == null) * { * myEvent.RemoveAllListeners (); * break; * } * }*/ if (myEvent.GetPersistentEventCount() == 0) { #if UNITY_EDITOR UnityEditor.Events.UnityEventTools.AddPersistentListener(myEvent, action); #else myEvent.AddListener(action); #endif return; } for (int i = 0; i < myEvent.GetPersistentEventCount(); i++) { string _storedMethodName = myEvent.GetPersistentMethodName(i); Object _storedTargetObj = myEvent.GetPersistentTarget(i); string _storedTypeName = _storedTargetObj.GetType().Name; if (_storedTargetObj == (Object)action.Target && _storedMethodName == action.Method.Name && _storedTypeName == action.Method.DeclaringType.Name) { //Debug.LogFormat ("{0}.{1}.{2} has exsit in {3} !", _storedTargetObj.name, _storedTypeName, _storedMethodName, myEvent.ToString()); //Debug.Log ("Skip add listener"); return; } } #if UNITY_EDITOR UnityEditor.Events.UnityEventTools.AddPersistentListener(myEvent, action); #else myEvent.AddListener(action); #endif }