IndieGame/client/Packages/com.unity.ugui@1.0.0/Runtime/EventSystem/RaycastResult.cs

144 lines
4.8 KiB
C#
Raw Normal View History

2024-10-11 10:12:15 +08:00
namespace UnityEngine.EventSystems
{
/// <summary>
/// A hit result from a BaseRaycaster.
/// </summary>
public struct RaycastResult
{
private GameObject m_GameObject; // Game object hit by the raycast
/// <summary>
/// The GameObject that was hit by the raycast.
/// </summary>
public GameObject gameObject
{
get { return m_GameObject; }
set { m_GameObject = value; }
}
/// <summary>
/// BaseRaycaster that raised the hit.
/// </summary>
public BaseRaycaster module;
/// <summary>
/// Distance to the hit.
/// </summary>
public float distance;
/// <summary>
/// Hit index
/// </summary>
public float index;
/// <summary>
/// Used by raycasters where elements may have the same unit distance, but have specific ordering.
/// </summary>
public int depth;
/// <summary>
/// The sorting group ID when the hit object is influenced by a SortingGroup.
/// </summary>
/// <remarks>
/// For UI.Graphic elements will always be 0.
/// For 3D objects this will always be 0.
/// For 2D objects if a SortingOrder is influencing the same object as the hit collider then the renderers sortingGroupID will be used; otherwise SortingGroup.invalidSortingGroupID.
/// </remarks>
public int sortingGroupID;
/// <summary>
/// The sorting group order when the hit object is influenced by a SortingGroup.
/// </summary>
/// <remarks>
/// For UI.Graphic elements this will always be 0.
/// For 3D objects this will always be 0.
/// For 2D objects if a SortingOrder is influencing the same object as the hit collider then the renderers sortingGroupOrder will be used.
/// </remarks>
public int sortingGroupOrder;
/// <summary>
/// The SortingLayer of the hit object.
/// </summary>
/// <remarks>
/// For UI.Graphic elements this will be the values from that graphic's Canvas
/// For 3D objects this will always be 0.
/// For 2D objects if a 2D Renderer (Sprite, Tilemap, SpriteShape) is attached to the same object as the hit collider that sortingLayerID will be used.
/// </remarks>
public int sortingLayer;
/// <summary>
/// The SortingOrder for the hit object.
/// </summary>
/// <remarks>
/// For Graphic elements this will be the values from that graphics Canvas
/// For 3D objects this will always be 0.
/// For 2D objects if a 2D Renderer (Sprite, Tilemap, SpriteShape) is attached to the same object as the hit collider that sortingOrder will be used.
/// </remarks>
public int sortingOrder;
/// <summary>
/// The world position of the where the raycast has hit.
/// </summary>
public Vector3 worldPosition;
/// <summary>
/// The normal at the hit location of the raycast.
/// </summary>
public Vector3 worldNormal;
/// <summary>
/// The screen position from which the raycast was generated.
/// </summary>
public Vector2 screenPosition;
/// <summary>
/// The display index from which the raycast was generated.
/// </summary>
public int displayIndex;
/// <summary>
/// Is there an associated module and a hit GameObject.
/// </summary>
public bool isValid
{
get { return module != null && gameObject != null; }
}
/// <summary>
/// Reset the result.
/// </summary>
public void Clear()
{
gameObject = null;
module = null;
distance = 0;
index = 0;
depth = 0;
sortingLayer = 0;
sortingOrder = 0;
worldNormal = Vector3.up;
worldPosition = Vector3.zero;
screenPosition = Vector3.zero;
}
public override string ToString()
{
if (!isValid)
return "";
return "Name: " + gameObject + "\n" +
"module: " + module + "\n" +
"distance: " + distance + "\n" +
"index: " + index + "\n" +
"depth: " + depth + "\n" +
"worldNormal: " + worldNormal + "\n" +
"worldPosition: " + worldPosition + "\n" +
"screenPosition: " + screenPosition + "\n" +
"module.sortOrderPriority: " + module.sortOrderPriority + "\n" +
"module.renderOrderPriority: " + module.renderOrderPriority + "\n" +
"sortingLayer: " + sortingLayer + "\n" +
"sortingOrder: " + sortingOrder;
}
}
}