栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

《Unity》 实现UI的拖动

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《Unity》 实现UI的拖动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
 public class SyncUIDrag : MonoBehaviour
    {
        private bool isDraging = false;
        private RectTransform rect;
        private Vector2 lastMousePosition;
        private Vector2 lastAnchorPosition;
        public List ingoreList = new List();
        public float interval = 2;
        public Camera UICamera;

        public void OnClick()
        {
            isDraging = true;
            lastMousePosition = Input.mousePosition;
            lastAnchorPosition = rect.anchoredPosition;
        }
        private void Start()
        {
            rect = transform as RectTransform;
     
          

        }
        /// 
        /// point 屏幕空间
        /// 
        /// 
        /// 
        private bool IsPointInRectTransform(Vector2 rPosition)
        {
            bool bOK =  RectTransformUtility.RectangleContainsScreenPoint(rect, rPosition, UICamera);
            if(!bOK)
            {
                return false;
            }
            //只能是当前UI物体
            if (ingoreList.Count>0)
            {
                for (int i = 0; i < ingoreList.Count; i++)
                {
                    RectTransform ingoreRect = (RectTransform)(ingoreList[i].transform);
                    bOK = RectTransformUtility.RectangleContainsScreenPoint(ingoreRect, rPosition, UICamera);
                    if (bOK)
                    {
                        return false;
                    }
                }
            }
            return true;
        }
        private void Update()
        {
 
            if(isDraging)
            {
                Vector3 mousePosition = Input.mousePosition;
#if UNITY_ANDROID && !UNITY_EDITOR
                Vector3 mousePosition = Input.GetTouch(0).position;
#endif
                Vector2 delta = new Vector2(mousePosition.x,mousePosition.y) - lastMousePosition;
                if(Mathf.Abs(delta.x)> interval || Mathf.Abs(delta.y)>interval)
                {
                    rect.anchoredPosition = lastAnchorPosition + delta;
                }
            }
            if (Input.GetMouseButtonDown(0))
            {
                if (IsPointInRectTransform(Input.mousePosition))
                {
                    OnClick();
                }
            }
            if (Input.GetMouseButtonUp(0))
            {
                isDraging = false;
            }
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号