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;
    }
}