示例#1
0
        /// <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
        }