在没有 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));
我正在 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));