Unity - 跟随手指仅适用于一个方向

时间:2018-05-05 00:56:35

标签: unity3d

我已经制作了一些代码,可以让我的玩家朝着手指的方向移动:

if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
    Vector2 pos = Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));

    if (pos.x < rb.position.x)
    {
        movehorizontal = -1;
    }
    if(pos.x > rb.position.x)
    {
        movehorizontal = 1;
    }

    if (pos.y < rb.position.z)
    {
        movevertical = -1;
    }
    if(pos.y > rb.position.z)
    {
        movevertical = 1;
    }
}

Vector3 movement = new Vector3(movehorizontal, 0.00f, movevertical)*speed;

这是一款带有顶视图的3D游戏,所以我的播放器从0,0,0开始,只沿x和z轴移动。我的相机位于0,10,3。以下工作在x轴上,所以当我的手指触摸右侧时它向右移动,如果在左侧向左,但无论我在哪里触摸它,它只会移动到前面而不是移动到前面我的屏幕底部。

我尝试过调试,但instructions当时没有工作。

1 个答案:

答案 0 :(得分:1)

screentoWorldPoint应存储为vector3。因为相机距您的飞机10个单位,最后一个参数应为10。

编辑,这只适用于直接向下指向的凸轮。无论相机角度如何,此代码都应该有效。

Vector3 pos = Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 1f));

Vector3 pointDelta = pos - Camera.main.transform.position;
float multiplier = -Camera.main.transform.position.y / pointDelta.y;
pos = Camera.main.transform.position + pointDelta * multiplier;

最后这些行应该将z值相互比较

 if (pos.z < rb.position.z)

 if(pos.z > rb.position.z)

进行这些更改并告知我们是否还存在任何其他问题