不过在使用时需要先获取两个红色显示的变量,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; }