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