UnityGame/Library/PackageCache/com.unity.ugui/Runtime/UGUI/EventSystem/Raycasters/BaseRaycaster.cs
2024-10-27 10:53:47 +03:00

102 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
namespace UnityEngine.EventSystems
{
/// <summary>
/// Base class for any RayCaster.
/// </summary>
/// <remarks>
/// 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.
/// </remarks>
public abstract class BaseRaycaster : UIBehaviour
{
private BaseRaycaster m_RootRaycaster;
/// <summary>
/// Raycast against the scene.
/// </summary>
/// <param name="eventData">Current event data.</param>
/// <param name="resultAppendList">List of hit Objects.</param>
public abstract void Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList);
/// <summary>
/// The camera that will generate rays for this raycaster.
/// </summary>
public abstract Camera eventCamera { get; }
[Obsolete("Please use sortOrderPriority and renderOrderPriority", false)]
public virtual int priority
{
get { return 0; }
}
/// <summary>
/// Priority of the raycaster based upon sort order.
/// </summary>
public virtual int sortOrderPriority
{
get { return int.MinValue; }
}
/// <summary>
/// Priority of the raycaster based upon render order.
/// </summary>
public virtual int renderOrderPriority
{
get { return int.MinValue; }
}
/// <summary>
/// Raycaster on root canvas
/// </summary>
public BaseRaycaster rootRaycaster
{
get
{
if (m_RootRaycaster == null)
{
var baseRaycasters = GetComponentsInParent<BaseRaycaster>();
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;
}
}
}