您現在所在的位置:首頁 >關于奇酷 > 行業動態 > 鄭州unity3d培訓 UGUI長按監測的兩種方法

鄭州unity3d培訓 UGUI長按監測的兩種方法

來源:奇酷教育 發表于:

鄭州unity3d培訓 UGUI長按監測的兩種方法,奇酷(www qikuedu com)老師總結兩種辦法如下: 簡單的demo,隨便建幾個UI,把

        鄭州unity3d培訓 UGUI長按監測的兩種方法,奇酷(www.tonecolour.cn)老師總結兩種辦法如下:
        簡單的demo,隨便建幾個UI,把腳本拖到任意物體,按1秒鐘后有響應事件。以下腳本可避免ScrollView失效,以及重疊UI穿透選擇。
鄭州unity3d培訓,Z???VR1VJ" src="http://uploadfile.qikuedu.com/2019/0319/20190319110022305.jpg" style="width: 480px; height: 270px;" />
方法一:使用EventSystems,適合場景中簡單的UI操作
using UnityEngine;
using UnityEngine.EventSystems;
 
public class RyanPressTest : MonoBehaviour {
        Vector3 lastMousePose;
    EventSystem m_EventSystem;
        float curT = 0;
        // 是否已經被選擇
        bool isPressed = false;
        void Start(){
        m_EventSystem = FindObjectOfType();
        }
        void Update () {
                if(Input.GetMouseButtonDown(0)){
                        lastMousePose = Input.mousePosition;
                }
        if (Input.GetMouseButton(0) && !isPressed && lastMousePose == Input.mousePosition)
        {
                        curT += Time.deltaTime;
                        // 長按1秒
                        if(curT >= 1f){
                    Debug.Log(m_EventSystem.currentSelectedGameObject + " was pressed.");
                                isPressed = true;
                        }
        }
                if(Input.GetMouseButtonUp(0)){
                        isPressed = false;
                        curT = 0;
                }
        }
}
 
方法二:使用射線,適用于鼠標一下選擇多個UI的復雜場景
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
 
public class RyanPressTest : MonoBehaviour {
        Vector3 lastMousePose;
    GraphicRaycaster m_Raycaster;
    PointerEventData m_PointerEventData;
        float curT = 0;
        // 是否已經被選擇
        bool isPressed = false;
        void Start(){
        m_Raycaster = FindObjectOfType ();
        }
        void Update () {
                if(Input.GetMouseButtonDown(0)){
                        lastMousePose = Input.mousePosition;
                }
        if (Input.GetMouseButton(0) && !isPressed && lastMousePose == Input.mousePosition)
        {
                        curT += Time.deltaTime;
            m_PointerEventData = new PointerEventData(null);
                        m_PointerEventData.position = lastMousePose;
 
            List results = new List();
            m_Raycaster.Raycast(m_PointerEventData, results);
                        // 長按1秒
                        if(results.Count > 0 && curT >= 1f){
                                // 當有多個重疊UI,results會返回所有被射線穿透的UI數組,一般我們只需要最上面的那個UI
                    Debug.Log(results[0].gameObject + " was pressed.");
                                isPressed = true;
                        }
        }
                if(Input.GetMouseButtonUp(0)){
                        isPressed = false;
                        curT = 0;
                }
        }
}
 
其實EventTrigger也能監測長按,但用了它ScrollView就失效了,還是用上面兩種方法比較通。
主站蜘蛛池模板: 综合无码一区二区三区| 久久婷婷五月综合成人D啪| 97SE亚洲国产综合自在线观看| 三级韩国一区久久二区综合| 久久综合九色综合网站| 狠狠色丁香久久婷婷综合五月| 小说区 图片区色 综合区| 久久久久综合国产欧美一区二区 | 曰韩人妻无码一区二区三区综合部| 欧美韩国精品另类综合| 综合久久国产九一剧情麻豆| 亚洲综合五月天| 亚洲狠狠综合久久| 99久久婷婷国产综合亚洲| 欧美精品色婷婷五月综合| 国产成人精品综合久久久| 精品亚洲综合在线第一区| 亚洲综合中文字幕无线码| 伊人久久综合无码成人网| 色婷婷综合久久久久中文| 亚洲综合图色40p| 狼狼综合久久久久综合网| 一本一本久久a久久综合精品蜜桃| 色五月丁香六月欧美综合图片| 色偷偷91久久综合噜噜噜噜| 色综合天天综合网国产成人网| 曰韩人妻无码一区二区三区综合部| 狠狠色伊人亚洲综合成人| 亚洲国产婷婷综合在线精品| 国产AV综合影院| 婷婷成人丁香五月综合激情| 综合久久国产九一剧情麻豆| 亚洲精品综合久久| 综合久久一区二区三区| 亚洲综合色区在线观看| 色婷婷综合久久久久中文字幕| 91精品欧美综合在线观看| 亚洲伊人色欲综合网| 免费精品99久久国产综合精品| 91精品一区二区综合在线| 欧美日韩国产色综合一二三四|