如果我用鼠标移动我的精灵,精灵总是在光标下面。
目前我的代码看起来像这样:
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;
}
}
但我想移动精灵,无论我的鼠标在背景上的哪个位置。所以,如果我点击并按住精灵旁边的鼠标并向右移动鼠标,我希望我的精灵在同一方向上以相同的方式移动。
答案 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;
}
}
}
您会注意到,最初按下按钮时会记录当前玩家位置和当前鼠标位置。所以,他们表现得像是他们的起源。播放器仅移动鼠标按下按钮时从其初始位置移动的距离。