美文网首页
UGUI的中心拖拽和精准拖拽

UGUI的中心拖拽和精准拖拽

作者: 不过一书生 | 来源:发表于2019-10-21 19:50 被阅读0次

参考链接:https://www.cnblogs.com/mrmocha/p/8040649.html;

/*************************************************

* 项目名称:UGUI通用

* 脚本创建人:魔卡

* 脚本创建时间:2017.12.14

* 脚本功能:UI图片拖拽功能(将脚本挂载在需要拖放的图片上)

* ***********************************************/

using UnityEngine;

using System.Collections;

using UnityEngine.EventSystems;

//UI图片拖拽功能类

public class UIDragByMocha : MonoBehaviour,IBeginDragHandler, IDragHandler, IEndDragHandler

{

    [Header( "是否精准拖拽")]

    public bool m_isPrecision;

    //存储图片中心点与鼠标点击点的偏移量

    private Vector3 m_offset;

    //存储当前拖拽图片的RectTransform组件

    private RectTransform m_rt;

    void Start()

    {

        //初始化

        m_rt= gameObject.GetComponent<RectTransform>();

    }

    //开始拖拽触发

    public void OnBeginDrag(PointerEventData eventData)

    {

        //如果精确拖拽则进行计算偏移量操作

        if (m_isPrecision)

        {

            // 存储点击时的鼠标坐标

            Vector3 tWorldPos;

            //UI屏幕坐标转换为世界坐标

            RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out tWorldPos);

            //计算偏移量 

            m_offset = transform.position - tWorldPos;

        }

            //否则,默认偏移量为0

        else

        {

            m_offset = Vector3.zero;

        }

        SetDraggedPosition(eventData);

    }

    //拖拽过程中触发

    public void OnDrag(PointerEventData eventData)

    {

        SetDraggedPosition(eventData);

    }

    //结束拖拽触发

    public void OnEndDrag(PointerEventData eventData)

    {

        SetDraggedPosition(eventData);

    }

    /// <summary>

    /// 设置图片位置方法

    /// </summary>

    /// <param name="eventData"></param>

    private void SetDraggedPosition(PointerEventData eventData)

    {

        //存储当前鼠标所在位置

        Vector3 globalMousePos;

        //UI屏幕坐标转换为世界坐标

        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out globalMousePos))

        {

            //设置位置及偏移量

            m_rt.position = globalMousePos + m_offset;

        }

    }

}

相关文章

  • UGUI的中心拖拽和精准拖拽

    参考链接:https://www.cnblogs.com/mrmocha/p/8040649.html; /***...

  • 2019-05-20

    简介 UGUI 图片拖拽排序demo.gif DropZone.cs 拖拽Continer PointerEven...

  • ugui拖拽

  • Unity3D UGUI , 3D物体 拖拽跟随鼠标

    不使用射线实现 拖拽物体以及UGUI主要函数为UGUI RectTransformUtility.Screen...

  • Unity_拖拽|全方位拖拽物体攻略

    Unity中UGUI控件和3D物体拖拽实现 基本原理 Unity拖拽的基本原理:射线检测,鼠标位置增量转换为统一空...

  • 拖拽操作

    应用: 1.拖拽排序2.拖拽上传3.拖拽裁剪 拖拽流程 确定可拖拽的内容-->开始拖拽-->拖拽过程-->结束拖拽...

  • UGUI基础:实现拖拽

    方案1:用unity 的拖拽接口1、UI继承IDragHandler2、实现OnDrag(PointerEvent...

  • Html5 + Css 3 文件拖拽上传功能

    拖拽上传文件功能 拖拽事件 拖拽元素ondrag 应用于拖拽元素,整个拖拽过程都会调用ondragstart应用...

  • 拖拽上传

    拖拽事件 拖拽元素ondrag 应用于拖拽元素,整个拖拽过程都会调用ondragstart应用于拖拽元素,...

  • js:拖拽事件

    拖拽事件 ondragstart当拖拽元素被开始拖拽时,event:拖拽元素。[从操作系统向浏览器拖拽文件不会触发...

网友评论

      本文标题:UGUI的中心拖拽和精准拖拽

      本文链接:https://www.haomeiwen.com/subject/bldxvctx.html