UnityEngine.EventSystems.BaseInputModule.FindCommonRoot C# (CSharp) Method

FindCommonRoot() protected static method

Given 2 GameObjects, return a common root GameObject (or null).

protected static FindCommonRoot ( GameObject g1, GameObject g2 ) : GameObject
g1 UnityEngine.GameObject
g2 UnityEngine.GameObject
return UnityEngine.GameObject
        protected static GameObject FindCommonRoot(GameObject g1, GameObject g2)
        {
            if ((g1 != null) && (g2 != null))
            {
                for (Transform transform = g1.transform; transform != null; transform = transform.parent)
                {
                    for (Transform transform2 = g2.transform; transform2 != null; transform2 = transform2.parent)
                    {
                        if (transform == transform2)
                        {
                            return transform.gameObject;
                        }
                    }
                }
            }
            return null;
        }

Usage Example

コード例 #1
0
 protected void HandlePointerExitAndEnter(PointerEventData currentPointerData, GameObject newEnterTarget)
 {        /*	called in
           *     StandaloneInputModule
           *             ProcessTouchPress
           *             ProcessMousePress
           *     PointerInputModule
           *             ProcessMove
           *             ClearSelection
           *     sets PointerEventData.pointerEnter
           *     call OnPointerEnter and/or OnPointerExit depending on what is under the pointer
           *     OnPointerEnter is called on only the first one that catches raycast
           *     OnPointerExit is called either on the fist or all of in the stack
           *     update hovered stack
           */
     if (newEnterTarget == null || currentPointerData.pointerEnter == null)
     {
         for (int i = 0; i < currentPointerData.hovered.Count; i++)
         {
             ExecuteEvents.Execute <IPointerExitHandler>(currentPointerData.hovered[i], currentPointerData, ExecuteEvents.pointerExitHandler);
         }
         currentPointerData.hovered.Clear();
         if (newEnterTarget == null)
         {
             currentPointerData.pointerEnter = newEnterTarget;
             return;
         }
     }
     /*newEnterTarget != null*/
     if (!(currentPointerData.pointerEnter == newEnterTarget) || !newEnterTarget)
     /*pointerEnter is something other than newEnter target, or null*/
     {
         GameObject gameObject = BaseInputModule.FindCommonRoot(currentPointerData.pointerEnter, newEnterTarget);
         if (currentPointerData.pointerEnter != null)
         {
             Transform transform = currentPointerData.pointerEnter.transform;
             while (transform != null)
             {
                 if (gameObject != null && gameObject.transform == transform)
                 {
                     break;
                 }
                 ExecuteEvents.Execute <IPointerExitHandler>(transform.gameObject, currentPointerData, ExecuteEvents.pointerExitHandler);
                 currentPointerData.hovered.Remove(transform.gameObject);
                 transform = transform.parent;
             }
         }
         currentPointerData.pointerEnter = newEnterTarget;
         if (newEnterTarget != null)
         {
             Transform transform2 = newEnterTarget.transform;
             while (transform2 != null && transform2.gameObject != gameObject)
             {
                 ExecuteEvents.Execute <IPointerEnterHandler>(transform2.gameObject, currentPointerData, ExecuteEvents.pointerEnterHandler);
                 currentPointerData.hovered.Add(transform2.gameObject);
                 transform2 = transform2.parent;
             }
         }
     }
 }
All Usage Examples Of UnityEngine.EventSystems.BaseInputModule::FindCommonRoot