晚上好,问题很快。
我在Unity3D中开发了一个自上而下的2D平台游戏。这是游戏的图片。
我几乎在桌面上都能解决所有问题,但在尝试设置移动设备控件时,我似乎无法按照应有的方式工作。我所需要的只是让玩家朝着用户触摸屏幕的方向移动。使用当前代码,玩家只需向上,向下,向左和向右四个方向旋转。他也移动了一点,但从不远离他的产卵点。
请查看我修改后的代码:
public Camera camera;
public float movespeed = 0;
// Use this for initialization
void Start () {
movespeed = 2.75F;
}
// Update is called once per frame
void Update () {
if (Input.touchCount > 0) {
// The screen has been touched so store the touch
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
// If the finger is on the screen, move the object smoothly to the touch position
Vector3 touchPosition = camera.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, -13));
Quaternion rot = Quaternion.LookRotation(transform.position - touchPosition, Vector3.back);
transform.rotation = rot;
transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z);
rigidbody2D.angularVelocity = 0;
//float input = Input.GetAxis ("Vertical");
transform.position = Vector3.Lerp(transform.position, touchPosition, Time.deltaTime);
}
}
}
}
关于如何让我的播放器移动到触摸屏的任何想法都在屏幕上?任何帮助将非常感激。提前谢谢。
答案 0 :(得分:1)
如果我理解正确,您希望您的玩家游戏对象移动到正在触摸的屏幕上的点。我认为最好描述代码的行为,以便您可以更好地了解可能发生的情况。
从发布的代码中,我可以看到一个可能的问题。再看看这一行:
Quaternion rot = Quaternion.LookRotation(transform.position - touchPosition, Vector3.back);
在这里,您要求Unity计算单位四元数,该单位四元数表示从Vector3.forward方向到触摸位置的玩家游戏对象方向的旋转。这可能不是你想要的。从问题描述中,您希望游戏对象旋转以面向被触摸屏幕上的点(而不是相反的方向)。您可以更改减法操作数的顺序,或者最好使用Transform.LookAt方法。
在此之后,您将更新转换的旋转:
transform.rotation = rot;
没关系,但请注意,在使用Transform.LookAt时你不需要这样做。 然后使用此行再次设置变换的旋转:
transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z);
我不完全确定你为什么要这样做。如果您只想要一个旋转轴,则可以使用,例如:
transform.LookAt(new Vector3(touchPosition.x, touchPosition.y, transform.position.z))
这应该围绕z轴旋转玩家的变换,以查看被触摸点的方向。
最后,您将变换的位置从当前位置线性插值到被触摸点:
transform.position = Vector3.Lerp(transform.position, touchPosition, Time.deltaTime);
这不是必要的。相反,你应该只是向前移动玩家的变换。播放器应朝向触摸屏幕点的方向。因此,向前翻译玩家会将玩家移向所述屏幕点:
transform.position += transform.forward * speed * Time.deltaTime;
当播放器非常接近触摸的屏幕点时,它将超调并立即旋转以向相反方向看。这将重复发生。你应该包括一些距离,指明玩家何时达到目标点。