private void UpdateFocusExit(AFocuser focuser)
        {
            FocusArgs arg = new FocusArgs();

            arg.Focuser = focuser;
            for (int index = 0; index < focuser.FocusExitList.Count; index++)
            {
                GameObject obj = focuser.FocusExitList[index];
                arg.CurNumFocusers = UpdateObjectCount(obj, -1);

                obj.SendMessage("FocusExit", arg, SendMessageOptions.DontRequireReceiver);
            }

            focuser.FocusExitList.Clear();
        }
        //----------------------------------------------------------------------

        #region Private Functions

        /// <summary>
        /// Update the game object being focused on
        /// </summary>
        private void UpdateFocus()
        {
            m_PrevFocusedList.AddRange(m_FocusedList);
            m_FocusedList.Clear();

            for (int index = 0; index < m_Focusers.Length; index++)
            {
                AFocuser focuser = m_Focusers[index];
                if (focuser != null && focuser.CanInteract)
                {
                    this.UpdateFocusList(focuser);
                }
            }

            for (int index = 0; index < m_Focusers.Length; index++)
            {
                AFocuser focuser = m_Focusers[index];
                if (focuser != null && focuser.CanInteract)
                {
                    this.UpdateFocusEnter(focuser);
                }
            }

            for (int index = 0; index < m_Focusers.Length; index++)
            {
                AFocuser focuser = m_Focusers[index];
                if (focuser != null && focuser.CanInteract)
                {
                    this.UpdateFocusExit(focuser);
                }
            }

            FocusArgs args = new FocusArgs();

            for (int index = 0; index < m_Focusers.Length; index++)
            {
                AFocuser focuser = m_Focusers[index];
                if (focuser != null && focuser.CanInteract && focuser.PrimeFocus != focuser.OldPrimeFocus)
                {
                    args.Focuser = focuser;

                    if (focuser.OldUIInteractibleFocus != focuser.UIInteractibleFocus)
                    {
                        PointerEventData pointerEventData = focuser.GetPointerData();

                        ExecuteUIFocusEvent(focuser.OldUIInteractibleFocus, pointerEventData, ExecuteEvents.pointerExitHandler);
                        pointerEventData.pointerEnter = focuser.UIInteractibleFocus;
                        ExecuteUIFocusEvent(focuser.UIInteractibleFocus, pointerEventData, ExecuteEvents.pointerEnterHandler);
                    }

                    // Invoke events
                    if (OnFocusExit != null && focuser.OldPrimeFocus != null)
                    {
                        args.CurNumFocusers = m_ObjectFocusCount[focuser.OldPrimeFocus];
                        OnFocusExit(focuser.OldPrimeFocus, args);
                    }

                    if (OnFocusEnter != null && focuser.PrimeFocus != null)
                    {
                        args.CurNumFocusers = m_ObjectFocusCount[focuser.PrimeFocus];
                        OnFocusEnter(focuser.PrimeFocus, args);
                    }
                }
            }

            // Clean up
            m_ObjectFocusCount.Clear();

            m_PrevFocusedList.Clear();
        }