internal void RemoveBehavior(BaseBehaviour behaviour)
 {
     if (behaviour.IsAlive())
     {
         behaviour.SetEnable(false);
         behaviour.SetAlive(false);
         m_BehaviourOrdered.DeleteByIndex(m_BehaviourOrdered.GetIndexByKey(behaviour));
         m_RemoveBehavioursCache.Add(behaviour);
     }
     else
     {
         MDebug.LogError("Core"
                         , $"RemoveBehavior ({behaviour.GetName()}) failed. It doesn't alive.");
     }
 }
        protected void OnApplicationQuit()
        {
            WaitTaskUpdate();
            CollectionBehavioursForTraverse();

            for (int iBehaviour = 0; iBehaviour < m_BehavioursForTraverse.Count; iBehaviour++)
            {
                BaseBehaviour behaviour = m_BehavioursForTraverse[iBehaviour];
                behaviour.SetEnable(false);
                DisableBehaviour(behaviour);
            }

            for (int iBehaviour = 0; iBehaviour < m_BehavioursForTraverse.Count; iBehaviour++)
            {
                BaseBehaviour behaviour = m_BehavioursForTraverse[iBehaviour];
                behaviour.SetAlive(false);
                ReleaseBehaviour(behaviour);
            }

            m_BehavioursForTraverse.Clear();
            m_AddBehavioursCache.Clear();
            m_RemoveBehavioursCache.Clear();
            m_BehaviourOrdered.Clear();
        }