【问题标题】:Moving GameObject without transform.position through a touchscreen? (In Unity3d)通过触摸屏移动没有transform.position的GameObject? (在 Unity3d 中)
【发布时间】:2017-09-17 14:57:51
【问题描述】:

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

【问题讨论】:

  • 我不想要操纵杆。基本上计划是,棒应该到达您手指在屏幕上的任何位置。不要用jistick移动它,而是用它自己的手指位置来移动它。
  • 谢谢。我会尝试上传一个游戏内视频,让“棒”变得更清晰。

标签: performance unity3d touchscreen collider


【解决方案1】:

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

尝试使用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));

【讨论】:

  • 太棒了!我很高兴这有帮助。
【解决方案2】:

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

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

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

【讨论】:

  • youtu.be/cr2LVBlP2O0 基本上,如果我不移动它会击中的棒,但如果我快速移动它,球就会直接通过。 (如果太快,弹跳音效也不起作用。)
  • 如果你使用物理来移动摇杆而不是直接改变变换位置,那么我相信你的问题会得到解决。目前,棍子穿过球,因为棍子不使用物理移动,而是“传送”到鼠标位置。
  • 我知道这就是问题所在。我想不出一种方法来更改我的代码,因此它使用强制而不是 tranform.position 任何机会你可以教我这样做吗?
  • CnControls 是 Unity 资源商店中的免费资源,在其示例场景中有一个操纵杆控制器,它提供沿水平轴和垂直轴的输入。现在您不一定需要显示操纵杆,但类似输入的操纵杆可能在向玩家移动的方向施加力时很有用,如果您不想显示它,只需禁用渲染器即可。它不会直接位于您单击的位置之上,但它允许鼠标控制移动。然后,您可以读取输入轴并对摇杆上的刚体 2d 施加力。
  • pastebin.com/0wUyBGiM 这是我使用 CnControls 的代码示例。请注意,我使用 FixedUpdate 而不是 Update,以确保正确的物理和力计算。根据需要调整速度变量。编辑:我输入错误,方向应该是 Vector2,而不是 Vector3。此外,您可能想将“Walk”重命名为“Move”,我重新安装了我的旧脚本。请记住锁定 Rigidbody2D 的旋转,因此只有位置发生变化,如果您不希望应用重力,请禁用重力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2011-10-02
相关资源
最近更新 更多