如果我用鼠标移动我的精灵,精灵总是在光标下面。
目前,我的代码看起来是这样的:
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;
}
}但我想移动雪碧,不管我的鼠标在哪里的背景。因此,如果我点击并保持在雪碧旁边,并将鼠标移向右边,我希望我的精灵以相同的方向移动。
发布于 2017-11-03 23:49:18
在这种情况下,您应该使用一个相对的移动,即鼠标单击鼠标按钮时从其当前位置移动的数量,就好像这是原点一样。
因此,当用户按下鼠标按钮时,您应该注意到当前的鼠标位置。
以下是我所描述的一个解决方案:
// 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;
}
}
}您会注意到,当最初按下按钮时,会注意到当前的播放器位置和当前的鼠标位置。所以,他们的行为就像是他们的起源。当鼠标按下按钮时,玩家只会根据鼠标从初始位置移动的距离来移动。
https://stackoverflow.com/questions/47105597
复制相似问题