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