UGUI的中心拖拽和精准拖拽

参考链接: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;

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • // Copyright © 2018, Meta Company. All rights reserved. ...
    LunarShade阅读 1,742评论 0 0
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,925评论 0 3
  • 使用Unity完成简单的背包功能 用UGUI布局成一下这个样子 设置BackGround的tag为Bag Lft,...
    Unity学习的路上阅读 11,206评论 1 4
  • 城东一角,遇见自乐班鸣锣开场,驻足聆听!昔年还为秦腔传承担心,随着阅历丰富感触深刻,愈发觉得只要有秦人秦地,就有秦...
    符成方阅读 3,940评论 0 1
  • 经过多年的努力,A国和B国终于确立了正式的外交关系,为此,A国全国放假三天。为了表示对B国的诚意,A国决定送B...
    风中豆蔻阅读 3,552评论 0 0

友情链接更多精彩内容