Unity3d将2D Sprite相对于鼠标位置移动
问题描述:
如果我用鼠标移动我的精灵,精灵始终恰好在光标下。Unity3d将2D Sprite相对于鼠标位置移动
目前我的代码看起来像这样:
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;
}
}
,但我想移动精灵,无论在哪里我的鼠标骏马上的背景。所以如果我点击并按住精灵旁边的按钮并将鼠标移动到右侧,我希望我的精灵以相同方向移动。
答
在这种情况下,你应该使用相对运动,也就是鼠标从当前位置移动鼠标点击的按钮时,仿佛那是起源量。
因此,当用户按下鼠标按钮时,应该注意当前的鼠标位置。
这里是一个解决方案,做什么,我形容:
// 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;
}
}
}
你会发现,当按钮被按下最初两当前玩家的位置和当前鼠标位置说明。所以,他们的行为就好像他们是起源一样。只有当按钮被按下时,播放器才会移动鼠标从其初始位置移动的距离。
哇谢谢你,完美的作品。我在这个问题上挣扎了很多小时 – Shivo
很高兴为您提供帮助。我看到你是新来的,所以也许你不知道,但你应该接受答案。谢谢。 – imerso