今日来探讨一下游戏中角色的跳跃与抛射所遵循的运行原理以及其蕴含的数学意义。
游戏开发领域,速度位移方程通常较多地应用于玩家角色的跳跃过程,而匀变速直线运动方程则常常被用于重现某一段轨迹,例如在已知角色 A 从原点跳至 B 点的情况下,用以还原在特定时刻 A 角色的实时坐标。
速度位移方程与玩家的跳跃
于数学领域而言,此情况能够借助速度与位移方程予以阐述。在垂直方向上的位移能够依据如下公式:
$$
v^{2} = v_0^{2} + 2as
$$
在游戏设计过程中,通常会对玩家的弹跳能力予以设定。当下跳跃的高度已然知晓,能够较为便捷地计算出玩家所应具备的跳跃初速度 $v_0$ 。
$$
v_0 = \sqrt{- 2as} = \sqrt{-2 \times Physics.gravity.y \times jumpHeight}
$$
匀变速直线运动方程
就物理模拟层面而言,角色的跳跃抑或炮弹的抛射通常均依据牛顿运动定律。就轨迹形状来讲,匀变速曲线运动必然为抛物线或者抛物线的一部分。
于数学领域,此能够借助基础的匀变速直线运动方程予以描述。垂直方向上的位移能够依照公式:
$$
h = v_0t -\frac{1}{2}gt^{2}
$$
其中$h$是垂直位移高度,$v_0$ 是初始垂直速度,$t$ 是时间,$g$ 是重力加速度。
角色在空中的上升和下降阶段,速度会不断变化。上升时速度逐渐减小,下降时速度逐渐增大。速度的变化可以用公式 $v = v_0 - gt$ 来计算。
基于公式可以推导出G值
存在这样一种普遍的需求,即在射击炮弹(跳跃)的流程中,服务器明确在 t 秒后击中点 p,此时需要客户端补充一个抛物线轨迹。
首先针对垂直方向(Y 轴)来逆向推导重力加速度 g 的数值。此情况在手机游戏中较为常见,由于多端同步的复杂程度会增加,大多网络游戏通常将水平轴向设定为匀速(非加速运动),部分竞速类游戏会采用非线性的加速公式,相应的计算亦会更为繁杂。已知服务器在特定 t 之后发射的炮弹能够抵达目标点,依据此炮弹的初始速度 v₀y,便能计算出该炮弹的 g 。
考虑垂直方向(Y 轴)来逆向推导重力加速度 g 的数值。
垂直位移公式为 $y = v_{0y}t - \frac{1}{2}gt^{2}$ ,移项可得 :
$$
g = \frac{v_{0y}t-y}{t^{2}}
$$
现在知道了$g$ 就可以根据 $h = v_0t -\frac{1}{2}gt^{2}$ 去计算单位时间内Y轴的高度变化。如果结合水平方向的位移也就有了我们所需要的点对点抛物线轨迹。
基于公式可以推导出物体在做抛物线运动时,预测其某一时刻的某一点
在不考虑引入新变量(即不考虑阻力)的情况下,对于做抛物线运动的物体,我们基于速度变化公式来推导其在某一时刻的位置。
水平方向:$x = v_x t$ 。
垂直方向:$y = v_{0y}t - \frac{1}{2}gt^{2}$ 。
补充:基于公式可以推导出$v_0$值
如果我们要限定当前跳跃的高度,不能超出指定$h$,这时候就需要变换一下公式。
在给定 $h$ 、 $t$ 以及重力加速度 $g$ ,来计算初始速度 $v_0$ ,可以这样推导:
$$
v_0 = \frac{h}{t} + \frac{1}{2}gt
$$