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;
}
}
}
您会注意到,当最初按下按钮时,当前玩家位置和当前鼠标位置都会被记录下来。所以,他们的行为就好像他们是起源一样。当玩家按下按钮时,玩家只会移动鼠标从其初始位置移动的距离。
如果我用鼠标移动精灵,精灵总是正好在光标下方。
目前我的代码如下所示:
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;
}
}
}
您会注意到,当最初按下按钮时,当前玩家位置和当前鼠标位置都会被记录下来。所以,他们的行为就好像他们是起源一样。当玩家按下按钮时,玩家只会移动鼠标从其初始位置移动的距离。