Unity中UGUI鼠标穿透UI问题的解决方法


 不过在使用时需要先获取两个红色显示的变量,graphicRaycastereventSystem

这两个变量分别对应的是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; }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM