public void RemoveEventListener(int _index)
        {
            if (dic.ContainsKey(_index))
            {
                SuperFunctionUnit unit = dic[_index];

                dic.Remove(_index);

                Dictionary <string, List <SuperFunctionUnit> > tmpDic = dic2[unit.target];

                List <SuperFunctionUnit> tmpList = tmpDic[unit.eventName];

                tmpList.Remove(unit);

                if (tmpList.Count == 0)
                {
                    tmpDic.Remove(unit.eventName);

                    if (tmpDic.Count == 0)
                    {
                        SuperFunctionControl control = unit.target.GetComponent <SuperFunctionControl>();

                        control.isDestroy = true;

                        GameObject.Destroy(control);

                        dic2.Remove(unit.target);
                    }
                }
            }
        }
        public void RemoveEventListener(GameObject _target, string _eventName)
        {
            if (dic2.ContainsKey(_target))
            {
                Dictionary <string, List <SuperFunctionUnit> > tmpDic = dic2[_target];

                if (tmpDic.ContainsKey(_eventName))
                {
                    List <SuperFunctionUnit> list = tmpDic[_eventName];

                    foreach (SuperFunctionUnit unit in list)
                    {
                        dic.Remove(unit.index);
                    }

                    tmpDic.Remove(_eventName);

                    if (tmpDic.Count == 0)
                    {
                        SuperFunctionControl control = _target.GetComponent <SuperFunctionControl>();

                        control.isDestroy = true;

                        GameObject.Destroy(control);

                        dic2.Remove(_target);
                    }
                }
            }
        }
        private void DestroyControl(GameObject _target)
        {
            SuperFunctionControl[] controls = _target.GetComponents <SuperFunctionControl>();

            for (int i = 0; i < controls.Length; i++)
            {
                SuperFunctionControl control = controls[i];

                if (!control.isDestroy)
                {
                    control.isDestroy = true;

                    GameObject.Destroy(control);
                }
            }

            dic2.Remove(_target);
        }
        public void RemoveEventListener(GameObject _target, string _eventName, Action <SuperEvent> _callBack)
        {
            if (dic2.ContainsKey(_target))
            {
                Dictionary <string, List <SuperFunctionUnit> > tmpDic = dic2[_target];

                if (tmpDic.ContainsKey(_eventName))
                {
                    List <SuperFunctionUnit> list = tmpDic[_eventName];

                    for (int i = 0; i < list.Count; i++)
                    {
                        if (list[i].callBack == _callBack)
                        {
                            dic.Remove(list[i].index);

                            list.RemoveAt(i);

                            break;
                        }
                    }

                    if (list.Count == 0)
                    {
                        tmpDic.Remove(_eventName);

                        if (tmpDic.Count == 0)
                        {
                            SuperFunctionControl control = _target.GetComponent <SuperFunctionControl>();

                            control.isDestroy = true;

                            GameObject.Destroy(control);

                            dic2.Remove(_target);
                        }
                    }
                }
            }
        }
        public void RemoveEventListener(GameObject _target)
        {
            if (dic2.ContainsKey(_target))
            {
                SuperFunctionControl control = _target.GetComponent <SuperFunctionControl>();

                control.isDestroy = true;

                GameObject.Destroy(control);

                Dictionary <string, List <SuperFunctionUnit> > tmpDic = dic2[_target];

                dic2.Remove(_target);

                foreach (List <SuperFunctionUnit> list in tmpDic.Values)
                {
                    foreach (SuperFunctionUnit unit in list)
                    {
                        dic.Remove(unit.index);
                    }
                }
            }
        }