不過在使用時需要先獲取兩個紅色顯示的變量,graphicRaycaster和eventSystem。
這兩個變量分別對應的是Canvas中的GraphicRaycaster組件和創建UI時自動生成的“EventSystem”中的EventSystem組件。
引用
using UnityEngine;
using System.Collections.Generic;
using UnityEngine.EventSystems;
using UnityEngine.UI;
private GraphicRaycaster graphicRaycaster; private EventSystem eventSystem; void Start() { graphicRaycaster = GameObject.Find("Canvas").GetComponent<GraphicRaycaster>(); eventSystem = GameObject.Find("EventSystem").GetComponent<EventSystem>(); } // Update is called once per frame
void Update() { if (CheckGuiRaycastObjects()) return;//防止射線穿透UI界面 Debug.Log(EventSystem.current.gameObject.name); if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //獲取碰撞點的位置
if (hit.collider.name == "Terrain") { Debug.LogError(hit.collider.name); } } } } bool CheckGuiRaycastObjects() { PointerEventData eventData = new PointerEventData(eventSystem); eventData.pressPosition = Input.mousePosition; eventData.position = Input.mousePosition; List<RaycastResult> list = new List<RaycastResult>(); graphicRaycaster.GetComponent<GraphicRaycaster>().Raycast(eventData, list); Debug.Log(list.Count); return list.Count > 0; }