zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    Java基础——银行例题
    JavaEE——HTML5绘画
    Java基础——构造器
    HTML5-GPS定位
    HTML+CSS+JavaScript小例题
    JDBC综合例题
    java并发编程(更新)
    struts2配置文件的解释
    排序
    集合
  • 原文地址:https://www.cnblogs.com/Study088/p/7903082.html
Copyright © 2011-2022 走看看