Unity2D 触摸移动变换
Unity2D move transform on touch
我想在用户移动鼠标(在 PC 上)或手指(在移动设备上)时移动我的主播放器
我做了一个简单的插图。如果我将手指向左移动 10 个单位,我希望玩家也向左移动 10 个单位。对于移动设备和 PC,我怎样才能实现这一目标?
您需要两个函数:DragStart()
在每次按下鼠标时调用,以及 Drag()
在鼠标停留的每一帧调用。
在 DragStart()
方法中,您希望首先将鼠标位置捕获到名为 'Vector2 mouseDown' 的变量中,并将其他对象位置捕获到名为 Vector2 objectStart
.
的变量中
在 Drag()
函数中,您创建了一个名为 Vector2 offset
的变量,基本上您只需执行 offset = mouseDown - Input.mousePosition;
即可获得您的偏移量,现在您所要做的就是将另一个对象移动与您的抵消金额相同:objectToMove.transform.localPosition = objectStart + offset
.
Vector3 screenPoint;
Vector3 offset;
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
将此代码添加到播放器的脚本中。
编辑:将此代码转换为 "move via click from every where" 非常简单。唯一的问题是 OnMouse* 函数仅在您单击脚本和碰撞对象时才起作用。只需将其更改为 Input.GetMouseButton 即可解决。
bool flag = false;
void Update()
{
if (Input.GetMouseButton(0))
{
if (!flag)
{
flag = true;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
else
{
flag = false;
}
}
我想在用户移动鼠标(在 PC 上)或手指(在移动设备上)时移动我的主播放器
我做了一个简单的插图。如果我将手指向左移动 10 个单位,我希望玩家也向左移动 10 个单位。对于移动设备和 PC,我怎样才能实现这一目标?
您需要两个函数:DragStart()
在每次按下鼠标时调用,以及 Drag()
在鼠标停留的每一帧调用。
在 DragStart()
方法中,您希望首先将鼠标位置捕获到名为 'Vector2 mouseDown' 的变量中,并将其他对象位置捕获到名为 Vector2 objectStart
.
在 Drag()
函数中,您创建了一个名为 Vector2 offset
的变量,基本上您只需执行 offset = mouseDown - Input.mousePosition;
即可获得您的偏移量,现在您所要做的就是将另一个对象移动与您的抵消金额相同:objectToMove.transform.localPosition = objectStart + offset
.
Vector3 screenPoint;
Vector3 offset;
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
将此代码添加到播放器的脚本中。
编辑:将此代码转换为 "move via click from every where" 非常简单。唯一的问题是 OnMouse* 函数仅在您单击脚本和碰撞对象时才起作用。只需将其更改为 Input.GetMouseButton 即可解决。
bool flag = false;
void Update()
{
if (Input.GetMouseButton(0))
{
if (!flag)
{
flag = true;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
else
{
flag = false;
}
}