UGUI——拖动UI

拖动UI

其实我只是想要一个拖动UI的功能而已,就像是一个菜单按钮,可以放在界面的任意一个地方,到边缘自动贴边。。。就更好了不是么

http://www.cnblogs.com/coldcode/p/5521089.html

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class DragUI : MonoBehaviour
{
    public class DragMe : MonoBehaviour
    {
        private static Vector3 ON_DRAG_SCALE = new Vector3(1.2f, 1.2f, 1.2f);
        private static Vector3 NORMAL_SCALE = Vector3.one;
        private static Vector2 ON_DRAG_PIVOT = new Vector2(0.5f, 0.5f);
        private RectTransform mRectTransform;
        void Awake()
        {
            mRectTransform = GetComponent<RectTransform>();
        }
        public void OnPointerDown()
        {
            transform.GetComponent<Image>().color = Color.gray;
            mRectTransform.pivot = ON_DRAG_PIVOT;
            transform.position = Input.mousePosition;
            this.transform.localScale = ON_DRAG_SCALE;
        }
        public void OnPointerUp()
        {
            transform.GetComponent<Image>().color = Color.white;
            this.transform.localScale = NORMAL_SCALE;
            transform.position = Input.mousePosition;
        }
        public void OnDrag()
        {
            transform.position = Input.mousePosition;
        }
    }
}

首先随便建个image,然后添加一个组件,再添加OnPointerDown,OnPointerUp,OnDrag三个事件,再像button那样拖上去

后来觉着这样手动操作太麻烦了,就想着有没有像动态给button那样添加事件的代码,网上找了下还真的有,

http://www.cnblogs.com/springword/p/6039639.html
只是应该没人写目前这样的吧。那就只能“举一反三”、“照猫画虎”了233
以下这个版本就是纯代码的了,建个image,拖上脚本就可以愉快的玩耍了

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class DragUI : MonoBehaviour
{
    private static Vector3 ON_DRAG_SCALE = new Vector3(1.2f, 1.2f, 1.2f);
    private static Vector3 NORMAL_SCALE = Vector3.one;
    private static Vector2 ON_DRAG_PIVOT = new Vector2(0.5f, 0.5f);
    private RectTransform mRectTransform;
    void Awake()
    {
        mRectTransform = GetComponent<RectTransform>();
        EventTrigger trigger = gameObject.AddComponent<EventTrigger>();

        UnityAction<BaseEventData> pointerdownClick = new UnityAction<BaseEventData>(OnPointerDown);
        EventTrigger.Entry myclickDown = new EventTrigger.Entry();
        myclickDown.eventID = EventTriggerType.PointerDown;
        myclickDown.callback.AddListener(pointerdownClick);
        trigger.triggers.Add(myclickDown);

        UnityAction<BaseEventData> pointerupClick = new UnityAction<BaseEventData>(OnPointerUp);
        EventTrigger.Entry myclickUp = new EventTrigger.Entry();
        myclickUp.eventID = EventTriggerType.PointerUp;
        myclickUp.callback.AddListener(pointerupClick);
        trigger.triggers.Add(myclickUp);

        UnityAction<BaseEventData> pointerdragClick = new UnityAction<BaseEventData>(OnDrag);
        EventTrigger.Entry myclickDrag = new EventTrigger.Entry();
        myclickDrag.eventID = EventTriggerType.Drag;
        myclickDrag.callback.AddListener(pointerdragClick);
        trigger.triggers.Add(myclickDrag);
    }
    public void OnPointerDown(BaseEventData data)
    {
        transform.GetComponent<Image>().color = Color.gray;
        mRectTransform.pivot = ON_DRAG_PIVOT;
        transform.position = Input.mousePosition;
        this.transform.localScale = ON_DRAG_SCALE;
    }
    public void OnPointerUp(BaseEventData data)
    {
        transform.GetComponent<Image>().color = Color.white;
        this.transform.localScale = NORMAL_SCALE;
        transform.position = Input.mousePosition;
    }
    public void OnDrag(BaseEventData data)
    {
        transform.position = Input.mousePosition;
    }
}

虽然有点看不懂。。。嘛。。。会用就好了233

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值