Unity3d 相对于鼠标位置移动2D Sprite

Unity3d Move 2D Sprite relative to mouse position

如果我用鼠标移动精灵,精灵总是正好在光标下方。

目前我的代码如下所示:

    public GameObject player;
    private float distance = 1;

    private void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);
            Vector3 playerPos = Camera.main.ScreenToWorldPoint(mousePos);
            player.transform.position = playerPos;
        }
    }

但我想移动精灵,无论我的鼠标骏马在背景中的什么位置。因此,如果我单击并按住精灵旁边并将鼠标向右移动,我希望我的精灵以相同的方式朝相同的方向移动。

Example Picture

在这种情况下,您应该使用相对移动,即单击鼠标按钮时鼠标从当前位置移动的量,就好像那是原点一样。

因此,您应该记下用户按下鼠标按钮时鼠标的当前位置。

这里有一个解决方案可以满足我的描述:

// by Vander 'imerso' Nunes to Whosebug answer

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

public class MouseDrag : MonoBehaviour
{
    public GameObject player;

    bool dragging = false;
    Vector3 mouseStartPos;
    Vector3 playerStartPos;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            dragging = true;
            mouseStartPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
            playerStartPos = player.transform.position;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            dragging = false;
        }

        if (dragging)
        {
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
            Vector3 move = mousePos - mouseStartPos;
            player.transform.position = playerStartPos + move;
        }
    }
}

您会注意到,当最初按下按钮时,当前玩家位置和当前鼠标位置都会被记录下来。所以,他们的行为就好像他们是起源一样。当玩家按下按钮时,玩家只会移动鼠标从其初始位置移动的距离。