Unity3D UI,用于拖动项目的位置的计算?

胖子

如今,在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);
        }
    }
乌里·波波夫(Uri Popov)

对于拖动东西,我只是这样做:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Unity3D UI,用于拖动项目的位置的计算?

来自分类Dev

Unity3d单击并拖动Gizmos

来自分类Dev

Unity3D数学计算问题

来自分类Dev

更新位置Unity3d

来自分类Dev

Unity3d项目使VSCode崩溃

来自分类Dev

Unity3d项目使VSCode崩溃

来自分类Dev

Unity3D中UI项目的Raycast替代方法

来自分类Dev

如何计算相交平面和直线(Unity3d)

来自分类Dev

计算可能的颜色组合-Unity3D

来自分类Dev

在Unity3D的父级中计算GameObjects?

来自分类Dev

Unity3D OnPointerClick是基于凸轮位置的吗?

来自分类Dev

Unity3D OnPointerClick是基于凸轮位置的吗?

来自分类Dev

在 unity3d 中冻结相机的 y 位置

来自分类Dev

unity3d中的CustomPropertyDrawer,用于继承的类

来自分类Dev

适用于Amazon的Revmob Unity3D SDK

来自分类Dev

StreamWriter 不适用于 Android (Unity3D)

来自分类Dev

Unity3D更改项目名称

来自分类Dev

Unity3D:模糊UI画布的背景

来自分类Dev

Unity3D SetActive冻结UI面板

来自分类Dev

Unity3D新的UI系统和列表视图

来自分类Dev

在Unity3d中,如何检测UI上的触摸?

来自分类Dev

Unity3D,从Unity.UI面板构建PNG吗?

来自分类Dev

Unity3d。如何获取UI元素的屏幕或世界位置

来自分类Dev

Unity3D:将材质应用于UI图像元素的UGUI的好处

来自分类Dev

Unity3d是否有像用于2D对象的Mesh Collider之类的东西?

来自分类Dev

Unity3D:根据当前位置生成对象-放在相同位置的画布上

来自分类Dev

根据其在unity3d中的当前位置改变主摄像头的位置

来自分类Dev

在Unity3D中计算两个向量之间的实际角度

来自分类Dev

如何在Unity3D中计算组按钮的自动大小