Я новичок в концепции преобразования координат экрана в мировые координаты в 3D-мире вообще, тем более в Unity. Я использую библиотеку UnityEngine.EventSystems, реализуя IDragHandler, так как я хочу, чтобы это работало одинаково независимо от того, является ли источник мыши или сенсорным.Unity3D OnDrag move 3D-объект не соответствует указателю
Я хочу перетащить трехмерный объект в мировом пространстве, заблокированный до одной позиции z. Я нашел этот отличный кусок кода, который я сейчас с помощью: http://coffeebreakcodes.com/drag-object-with-mouse-unity3d/
тот же код можно найти в ответе здесь: Drag 3d object using fingers in unity3d
Он работает именно так, как я хочу, чтобы он, кроме одной вещи : Преобразование работает нормально, когда начинается перетаскивание, но объект делает больше движений, чем указатель, тем хуже, чем дальше от исходного положения объекта, которое он получает, как если бы движение умножалось на нечто большее, чем дальше от оригинала я получаю.
Это мой код, который в основном такой же, как и в приведенной выше ссылке, кроме использования указателя на PointerEventData координирует вместо Input.mousePosition (изменение, которые не влияют на поведение):
public class DragInput : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
private Vector3 screenPoint;
private Vector3 offset;
public void OnBeginDrag(PointerEventData eventData)
{
screenPoint = Camera.main.WorldToScreenPoint(transform.position);
offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(eventData.position.x, eventData.position.y, screenPoint.z));
}
public void OnDrag(PointerEventData eventData)
{
Vector3 cursorPoint = new Vector3(eventData.position.x, eventData.position.y, screenPoint.z);
Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
transform.position = cursorPosition;
}
public void OnEndDrag(PointerEventData eventData)
{
}
}
EDIT: Это видео клип демонстрирует поведение я описывающее: https://www.dropbox.com/s/qfx2p6kznizft1q/Unity%202017-01-13%2014-32-15-89.avi?dl=0
Что такое режим проекции камеры? – Programmer
Объект игры с основной камерой (у меня есть только одна камера). В компоненте камеры установлен Projection to Perspective. – Helena