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

时间:2017-11-03 23:09:19

标签: unity3d position 2d mouse relative

如果我用鼠标移动我的精灵,精灵总是在光标下面。

目前我的代码看起来像这样:

    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

1 个答案:

答案 0 :(得分:0)

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

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

以下是我所描述的一种解决方案:

// by Vander 'imerso' Nunes to StackOverflow 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;
        }
    }
}

您会注意到,最初按下按钮时会记录当前玩家位置和当前鼠标位置。所以,他们表现得像是他们的起源。播放器仅移动鼠标按下按钮时从其初始位置移动的距离。

相关问题