在我的代码中,脚本所附加到的对象始终向右移动,这意味着无论是否触摸第二个,如果始终遇到第二个,总是会向右移动。游戏对象从屏幕中间开始。如果我触摸到对象的左侧,它应该向左移动。我想念什么吗?
lambda
答案 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
,其中x
和y
是您在手机/平板电脑的2D屏幕中触摸的位置。因此,您应该将屏幕触摸位置转换为世界位置(在3D空间中为x
,y
和z
),然后将该世界位置与对象位置进行比较。
您需要使用主摄像头的原因是,您的触摸应该转换为3d空间,而将2D点转换为3D点则需要一个Z
参数。您可以通过找到主摄像机与对象之间的位置差来获得此参数。您可以使用Camera.main
获取主相机。
我还添加了Debug.DrawLine()
来向您显示确切的点。使用UnityRemote测试并查看 Editor 中的行。
有一个threshold
属性可以防止游戏对象轻弹。
注意:请记住,这只是一个示例,不适用于其他相机角度。