使用屏幕空间移动UI-相机(统一)

时间:2018-10-25 08:43:07

标签: c# unity3d

在“屏幕空间-相机”上设置了“画布”时,我想移动图像UI

但是,似乎没有任何效果。我尝试了以下操作:

    public void OnDrag(PointerEventData eventData)
{

        Vector3 screenPoint = Input.mousePosition;
        screenPoint.z = 0.13f; //distance of the plane from the camera
        icon.transform.position = Camera.main.ScreenToWorldPoint(screenPoint);
    }

使图像立即移出屏幕。

 public GameObject Target;
private EventTrigger _eventTrigger;
void Start ()
{
    _eventTrigger = GetComponent<EventTrigger>();
    _eventTrigger.AddEventTrigger(OnDrag, EventTriggerType.Drag);
}

void OnDrag(BaseEventData data)
{
    PointerEventData ped = (PointerEventData) data;
    Target.transform.Translate(ped.delta);
}

相同的故事,图像失灵并移出屏幕。

    public void OnDrag(PointerEventData eventData)
{
    Vector3 clickedPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    InventoryParent.transform.position = clickedPosition;
}

如上所述。

任何人都知道如何使用Screen-Space Camera进行准确的鼠标拖动UI?进行覆盖效果很好。

1 个答案:

答案 0 :(得分:1)

将UI元素RectTransform锚点更改为:

enter image description here

并将此脚本添加到您的UI元素对象:

RectTransform rectT;

    void Start()
    {
        EventTrigger trigger = GetComponent<EventTrigger>();
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.Drag;
        entry.callback.AddListener((data) => { OnDragDelegate((PointerEventData)data); });
        trigger.triggers.Add(entry);
        rectT = GetComponent<RectTransform>();
    }

    public void OnDragDelegate(PointerEventData data)
    {
        rectT.anchoredPosition = data.position;

    }

您还需要UI元素对象上的EventTrigger组件。