1

我正在 Unity3d 中开发一款手机游戏,玩家需要使用 transform.position 移动一根比手指稍高一点的棍子,然后用 Force.Mode2D.impulse 挡住一个球。问题是如果球杆移动得太快,球就会穿过球杆。谁能教我如何用力(或任何其他有效的方式)编写仍然根据触摸屏上的手指位置(AKA 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 基本上,如果我不移动它击中的棍子,但如果我快速移动它,球就会直接穿过。(弹跳音效如果太快也不起作用)

4

2 回答 2

2

使用物理对象时,您将只想在移动它们时使用刚体组件。否则,它会被解释为传送,不应用物理,也不计算运动。

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

另外,确保你的球杆和球上的刚体组件都collisionDetectionMode设置为“连续动态”。这就是如何让小型快速移动的物理对象在帧之间相互碰撞。

 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));
于 2017-09-18T19:35:11.077 回答
1

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

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

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

于 2017-09-17T17:16:11.050 回答