gpt4 book ai didi

unity3d - 以统一的初始冲量在抛物线路径上移动二维物理体

转载 作者:行者123 更新时间:2023-12-04 23:45:37 26 4
gpt4 key购买 nike

我有什么:

Unity 5 2D 中的弹丸,受重力影响,我想在抛物线路径上以初始冲量从 A 点移动到 B 点

我所知道的:

  • 随机起始位置 (A) 的二维坐标
  • 随机目标位置(B)的二维坐标
  • 我希望 body 到达目标位置的时间 (X)

我想知道的:

  • 初始脉冲(如 applyforce 和 forcemode 脉冲统一),我必须一次性施加到 body 上,以便它在 X 时间后到达所需位置 B。

注意事项:

  • 这是一个使用 Unity 2D 物理的 2D 世界
  • A 和 B 这两个位置是完全随机的,可能高度相同也可能不相同(y 坐标)
  • 我只想在产生射弹时应用一次脉冲
  • 抛射物除了重力之外没有任何其他力影响他(对于当前的问题,让我们假设它始终指向下方的 9.8 级)

这是我想要的(坏的)图 :D enter image description here

先谢谢大家!

最佳答案

让我们解决一些更简单的问题。我们的目标是找到粒子的初始速度,而不是“脉冲”,因为我们将通过这种方式实现更好的控制。

首先,考虑一下如果没有 Unity 物理,我们将如何解决这个问题。作为时间函数的粒子位置取决于其初始位置、速度和加速度。无论您有多少维度,都适用相同的方程式。这个等式是:

current_position = 1/2 * acceleration * time^2 + velocity * time + starting_position

current_position为我们想要的目的地,time为您选择的旅行时长,starting_position为目的地的起始位置粒子。

在 x 维度上,没有加速度。设 X_0 是我们的起始 X 位置,X_1 是我们的目的地,T 是我们到达该目的地要花费的时间。我们想要找到 v_x,或 x 维度中的速度。为了便于解释,我将所有常量标记为大写,将变量标记为小写。

  1. X_1 = v_x*T + X_0
  2. v_x = (X_1-X_0)/T

在 y 维度上,我们有某种引力。因此,让我们将其纳入我们的加速:

  1. Y_1 = 0.5*G*T*T + v_y*T + Y_0
  2. v_y = (Y_1 - Y_0 - 0.5*G*T*T)/T

现在您有了 v_xv_y,只需设置速度:

rigidbody2d.velocity = new Vector2(v_x, v_y);

由于不同的物体具有不同的质量,因此您不想尝试计算冲量。只需在生成对象时将速度设置为您在帧中想要的速度即可。

这与您可能在 Internet 其他地方找到的建议相反,但在做更复杂的事情之前先尝试

一些重要的注意事项:

  • Unity 中的物理处理并不稳定:您可能会在不同的平台上获得不同的结果,尤其是在不同的移动设备之间。如果有性能压力,物理评估可能会减少,因此结果不正确。这通常不是二维物理的问题。
  • 您可能会遇到重力比例问题,具体取决于您的版本和您拥有的其他设置。

关于unity3d - 以统一的初始冲量在抛物线路径上移动二维物理体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com