Determines if the cursor is over a Graphics element in the Scene. See: BaseRaycaster.
Use this to determine if the cursor is over a Graphics element in the Scene. It accepts the mouse pointer event data as a parameter. Make sure you have an EventSystem in your hierarchy. If you don’t, go to Create >UI >Event System. Some common uses of this include: setting up your own custom UI system; telling when you hover over Text or Images which aren’t automatically selectable; UI click and drag operations; and many more.
//Attach this script to your Canvas GameObject. //Also attach a GraphicsRaycaster component to your canvas by clicking the Add Component button in the Inspector window. //Also make sure you have an EventSystem in your hierarchy.
using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic;
public class GraphicRaycasterRaycasterExample : MonoBehaviour { GraphicRaycaster m_Raycaster; PointerEventData m_PointerEventData; EventSystem m_EventSystem;
void Start() { //Fetch the Raycaster from the GameObject (the Canvas) m_Raycaster = GetComponent<GraphicRaycaster>(); //Fetch the Event System from the Scene m_EventSystem = GetComponent<EventSystem>(); }
void Update() { //Check if the left Mouse button is clicked if (Input.GetKey(KeyCode.Mouse0)) { //Set up the new Pointer Event m_PointerEventData = new PointerEventData(m_EventSystem); //Set the Pointer Event Position to that of the mouse position m_PointerEventData.position = Input.mousePosition;
//Create a list of Raycast Results List<RaycastResult> results = new List<RaycastResult>();
//Raycast using the Graphics Raycaster and mouse click position m_Raycaster.Raycast(m_PointerEventData, results);
//For every result returned, output the name of the GameObject on the Canvas hit by the Ray foreach (RaycastResult result in results) { Debug.Log("Hit " + result.gameObject.name); } } } }