• unity3dScrollRect与OnDrag事件的冲突解决方法


    借鉴  https://www.jianshu.com/p/8bfe94822886

    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    /// <summary>
    /// 脚本挂载到每个可拖拽的Item上面即可
    /// </summary>
    public class ItemOnDrag : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
    {
        // 实例化的新item
        public GameObject mNewItem;
        public Transform mNewItemRoot;
        public ScrollRect mScrollRect;
        // 是否按下
        public bool mIsDown = false;
        // 按下与松开鼠标之间的距离
        public float mBorderDis = 0.5f;
        // 总的按下时间
        public float mTotalTime = 1;
        private float mCurTime = 0;
        // 当前鼠标位置
        public Vector3 mCurPos;
        // 上一次鼠标位置
        public Vector3 mPrevPos;
        private NewItemOnDrag mNewDrag;
        void Start()
        {
            mNewItemRoot = GameObject.Find("InfoBoard").transform;
            mScrollRect = GameObject.Find("InfoBoard").GetComponent<ScrollRect>();
        }
        void Update()
        {
            if (mScrollRect == null)
            {
    
            }
    
            if (mIsDown)
            {
                mCurTime += Time.deltaTime * 1;
                if (mCurTime >= mTotalTime)
                {
                    if (Vector3.Distance(mPrevPos, mCurPos) > mBorderDis)
                    {
                        mCurTime = 0f;
                        return;
                    }
                    mCurTime = 0f;
                    mIsDown = false;
                    GameObject item = Instantiate(mNewItem);
                    item.transform.SetParent(mNewItemRoot);
                    item.transform.localScale = Vector3.one;
                    mNewDrag = item.GetComponent<NewItemOnDrag>();
                    if (mNewDrag == null)
                        mNewDrag = item.AddComponent<NewItemOnDrag>();
                    item.transform.position = Input.mousePosition;
                }
            }
        }
    
        public void OnPointerDown(PointerEventData eventData)
        {
            mNewDrag = null;
            mPrevPos = Input.mousePosition;
            mCurPos = Input.mousePosition;
            mIsDown = true;
        }
    
        public void OnPointerUp(PointerEventData eventData)
        {
            mPrevPos = Vector3.zero;
            mCurPos = Vector3.zero;
            mIsDown = false;
            mNewDrag = null;
        }
    
        public void OnBeginDrag(PointerEventData eventData)
        {
            mScrollRect.OnBeginDrag(eventData);
        }
    
        public void OnDrag(PointerEventData eventData)
        {
            mCurPos = eventData.position;
            if (mNewDrag == null)
                mScrollRect.OnDrag(eventData);
            else
                mNewDrag.transform.position = Input.mousePosition;
        }
    
        public void OnEndDrag(PointerEventData eventData)
        {
            mNewDrag = null;
            mScrollRect.OnEndDrag(eventData);
        }
    
    
    }
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class NewItemOnDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
    {
        public void OnBeginDrag(PointerEventData eventData)
        {
    
        }
    
        public void OnDrag(PointerEventData eventData)
        {
            transform.position = Input.mousePosition;
        }
    
        public void OnEndDrag(PointerEventData eventData)
        {
    
        }
    }

    用法

    将ItemOnDrag挂在每个可拖拽的Item上面即可
      其中的mNewItem就是Item本身的预设体,mNewItemRoot是ScrollRect组件容器的transform,mScrollRect是ScrollRect组件容器的ScrollRect,但是mNewItemRoot和mScrollRect需要手动关联

    NewItemOnDrag脚本会自动挂载到新实例化出来的item上的,不要做处理,后期可加入检测

  • 相关阅读:
    Saltstack cmd.run 多项命令
    salt state.sls windows 传输文件
    mysql 时区更改;5.7 弱口令
    nginx 端口转发
    nohup 后台执行
    检测 nginx 关闭切换keepalived
    Centos 7 安装 dotnet 环境
    unison 双向镜像同步
    samba 配置参数详解
    数据结构与算法面试题80道(15)
  • 原文地址:https://www.cnblogs.com/lingLuoChengMi/p/10009414.html
Copyright © 2020-2023  润新知