在没有 transform.position 的情况下通过触摸屏移动 GameObject? (在 Unity3d 中)

Moving GameObject without transform.position through a touchscreen? (In Unity3d)

我正在 Unity3d 中开发一款手机游戏,玩家需要用 transform.position 移动一根比手指高一点的棍子,并用力挡住一个球。Mode2D.impulse。问题是如果球杆移动得太快,球就会穿过球杆。谁能教我如何用力(或任何其他有效的方式)编写仍然根据手指在触摸屏上的位置移动的摇杆运动(A.K.A Input.mousePosition)而不是使用按钮?

如果有人需要信息,代码就这样;

坚持:

 float defencePosX = Mathf.Clamp( Input.mousePosition.x / Screen.width * 5.6f - 2.8f , -2.8f, 2.8f);
 float defencePosY = Mathf.Clamp( Input.mousePosition.y / Screen.height * 10 - 4f, -3.3f, -0.5f);
 this.transform.position = new Vector3 (defencePosX, defencePosY, 0);

球:

projectileSpeed = Random.Range (maxSpeed, minSpeed);
 projectileSwing = Random.Range (-0.001f, 0.001f);
 rb.AddForce (new Vector2 (projectileSwing * 1000, 0), ForceMode2D.Impulse);
 rb.AddForce (new Vector2 (0, projectileSpeed), ForceMode2D.Impulse);

错误视频: https://youtu.be/cr2LVBlP2O0 基本上,如果我不移动球杆,它就会击中,但如果我快速移动球杆,球就会直接穿过。 (弹跳音效如果太快也不起作用)

我建议您在给它增加力之前将球力设置为 Vector3.zero,或者您使用阻挡运动的对撞机作为球的弹跳垫。

请记得检查您的碰撞器是否根据阻挡器正确缩放。

显示您的问题的视频将有助于更好地理解它。

在处理物理对象时,您将希望在移动它们时仅使用 Rigidbody 组件。否则,它被解释为瞬移,不应用任何物理,也不计算移动。

尝试使用 Rigidbody.MovePosition 而不是 transform.position

此外,请确保您的摇杆和球上的刚体组件都已 collisionDetectionMode 设置为 'Continuous Dynamic'。这就是让快速移动的小型物理对象在帧之间相互撞​​击的方式。

 float defencePosX = Mathf.Clamp( Input.mousePosition.x / Screen.width * 5.6f - 2.8f , -2.8f, 2.8f);
 float defencePosY = Mathf.Clamp( Input.mousePosition.y / Screen.height * 10 - 4f, -3.3f, -0.5f);
 rb.MovePosition(new Vector3 (defencePosX, defencePosY, 0));