如今,在Unity中拖动UI元素变得异常容易:创建一些UI项。添加组件->事件->事件触发器。放在下面的脚本上。单击以添加四个明显的触发器。你完成了。
然而。
我完全迷失了指针坐标和UI坐标之间的关系(如RectTransform等所示)。
在DragIt
下面:到底如何在手指下正确移动UI面板?
假设您有一个大面板,其中十个UIButton位于面板上并带有Dragster
按钮。RectTransform坐标和鼠标指针之间有什么关系?
简而言之,如何在下面的DragIt()处移动按钮之一?
/* modern Unity drag of UI element */
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class Dragster:MonoBehaviour
{
public int index; // number each of your UI items
static bool beingDragged = false;
static int dragFrom;
public void DragStart()
{
beingDragged = true; dragFrom = index;
}
public void DragIt()
{
? ? W T F ? ?
}
public void DragEnd()
{
beingDragged = false;
}
public void DroppedBra()
{
Debig.Log("Drag: from/to " +dragFrom +" --> " +index);
}
}
对于拖动东西,我只是这样做:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
public void OnBeginDrag(PointerEventData eventData) {
}
public void OnDrag(PointerEventData eventData) {
//Debug.Log ("OnDrag");
this.transform.position = eventData.position;
}
public void OnEndDrag(PointerEventData eventData) {
Debug.Log ("OnEndDrag");
}
}
这是具有两个简单功能的相同的惊人URIPOPOV代码,在拖动时始终需要它们:
// allow dragging with two basic problem fixes:
// - limit drag to the parent box
// - don't "jump" based on where you hold down
100%经过测试:
using UnityEngine;
using UnityEngine.EventSystems;
public class AmazingUPDrag : MonoBehaviour,
IBeginDragHandler, IDragHandler, IEndDragHandler
{
Vector2 dragOffset = Vector2.zero;
Vector2 limits = Vector2.zero;
public void OnBeginDrag(PointerEventData eventData)
{
dragOffset = eventData.position - (Vector2)transform.position;
limits = transform.parent.GetComponent<RectTransform>().rect.max;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position - dragOffset;
var p = transform.localPosition;
if (p.x < -limits.x) { p.x = -limits.x; }
if (p.x > limits.x) { p.x = limits.x; }
if (p.y < -limits.y) { p.y = -limits.y; }
if (p.y > limits.y) { p.y = limits.y; }
transform.localPosition = p;
}
public void OnEndDrag(PointerEventData eventData)
{
dragOffset = Vector2.zero;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句