Перетаскивать объект в Unity 2D

Я искал объект, перетаскивающий script для Unity 2D. Я нашел хороший метод в Интернете, но, похоже, он работает только в Unity 3D. Это не очень хорошо для меня, поскольку я делаю 2D-игру, и она не сталкивается с "стенами" таким образом.

Я попытался переписать его на 2D, но я врезался в ошибки с помощью Vectors.

Я был бы очень рад, если бы вы могли помочь мне переписать его на 2D.

Вот код, который работает в 3D:

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(BoxCollider))]

public class Drag : MonoBehaviour {
    private Vector3 screenPoint;
    private Vector3 offset;

void OnMouseDown() {

    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

void OnMouseDrag()
{
    Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}
}

Ответ 1

Ты почти там.

Измените строку RequireComponent в вашем коде на:

[RequireComponent(typeof(BoxCollider2D))]

И добавьте компонент BoxCollider2D к объекту, к которому вы добавляете script. Я просто протестировал его, и он отлично работает.

Ответ 2

Для тех, у кого проблемы с использованием этого кода, я удалил screenPoint и заменил его на 10.0f (это расстояние от объекта с камеры). Вы можете использовать любой флоат, который вам нужен. Теперь это работает. Также для объекта требуется BoxCollider или CircleCollider, чтобы его можно было перемещать. Поэтому нет смысла использовать [RequireComponent(typeof(BoxCollider2D))].

Последний код, который отлично подходит для меня, это:

using UnityEngine;
using System.Collections;


public class DragDrop : MonoBehaviour {

    private Vector3 offset;

    void OnMouseDown()
    {

        offset = gameObject.transform.position -
            Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f));
    }

    void OnMouseDrag()
    {
        Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f);
        transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset;
    }
}