using System; using System.Collections.Generic; namespace UnityEngine.EventSystems { /// /// Base class for any RayCaster. /// /// /// A Raycaster is responsible for raycasting against scene elements to determine if the cursor is over them. Default Raycasters include PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster. /// Custom raycasters can be added by extending this class. /// public abstract class BaseRaycaster : UIBehaviour { private BaseRaycaster m_RootRaycaster; /// /// Raycast against the scene. /// /// Current event data. /// List of hit Objects. public abstract void Raycast(PointerEventData eventData, List resultAppendList); /// /// The camera that will generate rays for this raycaster. /// public abstract Camera eventCamera { get; } [Obsolete("Please use sortOrderPriority and renderOrderPriority", false)] public virtual int priority { get { return 0; } } /// /// Priority of the raycaster based upon sort order. /// public virtual int sortOrderPriority { get { return int.MinValue; } } /// /// Priority of the raycaster based upon render order. /// public virtual int renderOrderPriority { get { return int.MinValue; } } /// /// Raycaster on root canvas /// public BaseRaycaster rootRaycaster { get { if (m_RootRaycaster == null) { var baseRaycasters = GetComponentsInParent(); if (baseRaycasters.Length != 0) m_RootRaycaster = baseRaycasters[baseRaycasters.Length - 1]; } return m_RootRaycaster; } } public override string ToString() { return "Name: " + gameObject + "\n" + "eventCamera: " + eventCamera + "\n" + "sortOrderPriority: " + sortOrderPriority + "\n" + "renderOrderPriority: " + renderOrderPriority; } protected override void OnEnable() { base.OnEnable(); RaycasterManager.AddRaycaster(this); } protected override void OnDisable() { RaycasterManager.RemoveRaycasters(this); base.OnDisable(); } protected override void OnCanvasHierarchyChanged() { base.OnCanvasHierarchyChanged(); m_RootRaycaster = null; } protected override void OnTransformParentChanged() { base.OnTransformParentChanged(); m_RootRaycaster = null; } } }