UGUI——拖动UI

来源:互联网 发布:mac flash 安装不允许 编辑:程序博客网 时间:2024/05/19 03:25

拖动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 0
原创粉丝点击