统一移动控件位置

时间:2018-11-17 11:38:34

标签: c# unity3d

在我的代码中,脚本所附加到的对象始终向右移动,这意味着无论是否触摸第二个,如果始终遇到第二个,总是会向右移动。游戏对象从屏幕中间开始。如果我触摸到对象的左侧,它应该向左移动。我想念什么吗?

lambda

1 个答案:

答案 0 :(得分:1)

您可以使用此代码执行所需的操作:

if (Input.touchCount > 0)
{
    Touch touch = Input.GetTouch(0);

    var point = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y,
        transform.position.z - Camera.main.transform.position.z));

    Debug.DrawLine(Camera.main.transform.position, point, Color.green, 1);


    var delta = transform.position.x - point.x;

    if(Mathf.Abs(delta) < threshold)
    {
        return;
    }


    if (point.x < transform.position.x)
    {
        transform.Translate(-0.05f * speed, 0, 0);
    }
    else if (point.x >= transform.position.x)
    {
        transform.Translate(0.05f * speed, 0, 0);
    }
}

Input.GetTouch()将为您提供vector2,其中xy是您在手机/平板电脑的2D屏幕中触摸的位置。因此,您应该将屏幕触摸位置转换为世界位置(在3D空间中为xyz),然后将该世界位置与对象位置进行比较。

您需要使用主摄像头的原因是,您的触摸应该转换为3d空间,而将2D点转换为3D点则需要一个Z参数。您可以通过找到主摄像机与对象之间的位置差来获得此参数。您可以使用Camera.main获取主相机。

我还添加了Debug.DrawLine()来向您显示确切的点。使用UnityRemote测试并查看 Editor 中的行。

有一个threshold属性可以防止游戏对象轻弹。

注意:请记住,这只是一个示例,不适用于其他相机角度。