如何在上下左右拖动统一对象。

时间:2018-10-28 13:41:01

标签: c# unity3d

我有一个统一的图形,我想上下左右拖动它以查看即将到来的坐标。

我编写了这段代码来拖动图形对象,但是它无限制地拖动了所有对象。我只希望它上下左右移动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragGraph : MonoBehaviour {

    float OffsetX;
    float OffsetY;

    public void BeginDrag(){
        OffsetX = transform.position.x - Input.mousePosition.x;
        OffsetY = transform.position.y - Input.mousePosition.y;
    }

    public void OnDrag(){

        transform.position = new Vector3 (OffsetX + Input.mousePosition.x, OffsetY + Input.mousePosition.y);

    }

}

2 个答案:

答案 0 :(得分:1)

if OffsetX > OffsetY,请勿使用Input.mousePosition.y

反之亦然。

弄清楚当OffsetX == OffsetY留给读者时该怎么做。

答案 1 :(得分:0)

如果您希望它上下移动,那么为什么要使用x值?您可以将其保留为0,只有y值会发生变化并使它上下波动。

修改 不确定这是否理想,但类似于向上,向下,向左和向右滑动。我尝试过,一次只能向一个方向滑动。

 Vector2 offset;
Vector2 startPos = Vector2.zero;

public void OnBeginDrag(PointerEventData eventData)
{
    startPos = eventData.position;
    offset.x = transform.position.x - Input.mousePosition.x;
    offset.y = transform.position.y - Input.mousePosition.y;
}

public void OnDrag(PointerEventData eventData)
{
    Vector2 direction = eventData.position - startPos;
    direction.Normalize();

    if ((direction.x>0 || direction.x<0) && direction.y>-0.5f && direction.y < 0.5f)
    {
        transform.position = new Vector3(offset.x+ Input.mousePosition.x, transform.position.y);
    }
    if ((direction.y > 0 || direction.y<0) && direction.x > -0.5f && direction.x < 0.5f)
    {
        transform.position = new Vector3( transform.position.x, offset.y + Input.mousePosition.y);
    }
}