我已经制作了一些代码,可以让我的玩家朝着手指的方向移动:
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当时没有工作。
答案 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)
进行这些更改并告知我们是否还存在任何其他问题