亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

unity 如何判斷鼠標是否在哪個UI上(兩種方法)

 更新時間:2021年04月10日 15:14:02   作者:玉速林瘋  
這篇文章主要介紹了unity 判斷鼠標是否在哪個UI上的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

第一種

可以得到UI,再根據(jù)名字判斷是不是自己自己要點擊的UI

其中參數(shù)canvas拖入此UI的canvas

 /// <summary>
        /// 獲取鼠標停留處UI
        /// </summary>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public GameObject GetOverUI(GameObject canvas)
        {
            PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
            pointerEventData.position = Input.mousePosition;
            GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();
            List<RaycastResult> results = new List<RaycastResult>();
            gr.Raycast(pointerEventData, results);
            if (results.Count != 0)
            {
                return results[0].gameObject;
            }
            return null;
        }

第二種就簡單了

rect 為要判斷的那個UI的RectTransform

bool isUI = RectTransformUtility.RectangleContainsScreenPoint(rect, Input.mousePosition)

補充:Unity中判斷鼠標或者手指是否點擊在UI上(UGUI)

在Unity場景中,有時UI和游戲角色都需要響應觸摸事件,如果同時響應可能就會出現(xiàn)點擊UI的時候影響到了游戲角色。所以我們需要對所點擊到的東西做判斷,這里使用UGUI系統(tǒng)自帶的方法和射線檢測的方式,判斷是否點擊到UI上:

第一種方法,直接在Update中判斷:

void Update()
    {      
        //判斷是否點擊UI
        if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began))
        {
            //移動端
            if (Application.platform == RuntimePlatform.Android ||
                        Application.platform == RuntimePlatform.IPhonePlayer)
            {
                int fingerId = Input.GetTouch(0).fingerId;
                if (EventSystem.current.IsPointerOverGameObject(fingerId))
                {
                    Debug.Log("點擊到UI");                    
                }
            }
            //其它平臺
            else
            {
                if (EventSystem.current.IsPointerOverGameObject())
                {
                    Debug.Log("點擊到UI");                    
                }
            }
        }

第二種方式:射線檢測

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; 
public class NewBehaviourScript : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        //移動端
        if (Application.platform == RuntimePlatform.Android ||
                    Application.platform == RuntimePlatform.IPhonePlayer)
        {
            if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
            {
                if (IsPointerOverGameObject(Input.GetTouch(0).position))
                {
                    Debug.Log("點擊到UI");
                }
            }            
        }
        //其它平臺
        else
        {
            if(Input.GetMouseButtonDown(0))
            {
                if (IsPointerOverGameObject(Input.mousePosition))
                {
                    Debug.Log("點擊到UI");
                }
            }            
        }
    }
 
    /// <summary>
    /// 檢測是否點擊UI
    /// </summary>
    /// <param name="mousePosition"></param>
    /// <returns></returns>
    private bool IsPointerOverGameObject(Vector2 mousePosition)
    {       
        //創(chuàng)建一個點擊事件
        PointerEventData eventData = new PointerEventData(EventSystem.current);
        eventData.position = mousePosition;
        List<RaycastResult> raycastResults = new List<RaycastResult>();
        //向點擊位置發(fā)射一條射線,檢測是否點擊UI
        EventSystem.current.RaycastAll(eventData, raycastResults);
        if (raycastResults.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • C#代碼延時的幾種實現(xiàn)

    C#代碼延時的幾種實現(xiàn)

    本文主要介紹了C#代碼延時的幾種實現(xiàn),主要介紹了三種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Unity制作自定義字體的兩種方法

    Unity制作自定義字體的兩種方法

    這篇文章主要為大家詳細介紹了Unity制作自定義字體的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Unity實現(xiàn)物體跟隨鼠標移動

    Unity實現(xiàn)物體跟隨鼠標移動

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)物體跟隨鼠標移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限

    使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限

    這篇文章主要介紹了使用C#程序驗證系統(tǒng)登錄用戶與目錄權(quán)限,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C#鍵盤鼠標鉤子實例

    C#鍵盤鼠標鉤子實例

    這篇文章主要介紹了C#鍵盤鼠標鉤子的實現(xiàn)方法,以實例形式分析了針對鍵盤與鼠標鉤子的實現(xiàn)步驟與相關(guān)技巧,并配有相關(guān)官方文檔說明的地址,需要的朋友可以參考下
    2014-12-12
  • C#自定義音樂播放器進度條

    C#自定義音樂播放器進度條

    這篇文章主要為大家詳細介紹了C#自定義音樂播放器進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 深入理解C#的數(shù)組

    深入理解C#的數(shù)組

    本篇文章主要介紹了C#的數(shù)組,數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),詳細的介紹了數(shù)組的聲明和訪問等,有興趣的可以了解一下。
    2016-11-11
  • C# Aspose.Words 刪除word中的圖片操作

    C# Aspose.Words 刪除word中的圖片操作

    這篇文章主要介紹了C# Aspose.Words 刪除word中的圖片操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C# 遍歷枚舉類型的所有元素

    C# 遍歷枚舉類型的所有元素

    寫個小東西,剛好用到枚舉類型,需要顯示在DropDownList控件中。嘗試了下,用如下方法可以實現(xiàn)
    2013-03-03
  • WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF中的Panel(面板),是繼承自FrameworkElement的抽象類,表示一個可以用來排列子元素的面板,本文主要來和大家聊聊WPF如何實現(xiàn)自定義Panel,感興趣的可以了解下
    2023-09-09

最新評論