![]() |
1
4
好吧,我们放一些 数学 对此。 我一直提倡数学在gamedev中的重要性和实用性,也许我在这个问题上做得太多了,但我真的认为你的问题根本不是关于编码,而是关于建模和解决代数问题。不管怎样,我们走吧。 参数化
如果你有大学学位,你可能会记得
功能
-获取参数并产生结果的操作-以及
图
-一个函数对其参数演化的图形表示(或绘图)。
你可能不熟悉这些术语,但你总是这样做。你的
参数化的一个有趣之处是,您可以获取一个系统并用其他参数来描述它。再说一遍,你已经在做了。当你描述你的轨迹随时间的演变时,你是说每个坐标都是时间的函数,
轨道系统建模最后,我会开始回答你的问题。为了完整地描述你想要的轨道系统,你需要两件事:
你实际上已经解决了这个问题。在场景空间中设置一些点并使用 Catmull'rom样条曲线 插值点并生成路径。这很聪明,而且没什么可做的了。
另外,您还添加了一个字段
路径解决方案的一个有趣之处是,您使用
这很标准,但有一个微妙之处。你忽略了描述一个运动的一个非常重要的部分: 行驶距离 . 我建议你换一种方法。使用行驶距离参数化路径。然后,对象的移动将是相对于时间参数化的移动距离。这样,您将拥有两个独立且一致的系统。动手! 例子:从现在开始,为了简单起见,我将把所有东西都变成二维的,但是以后把它改成三维的就很简单了。 考虑以下路径:
在哪里?
一个物体用你当前的解决方案所产生的运动可以描述为
在哪里?
上方显示了对象如何随着时间前进。水平轴是时间,垂直轴是行驶距离。我们可以想象,纵轴是在一条平面线上“展开”的路径。下面的图表是速度随时间的演变。
在这一点上,我们必须回忆一些物理学,并注意到,在每一段,距离的图形是一条直线,对应于匀速运动,没有加速度。这样的系统由以下方程式描述:
每当对象到达检查点时,其速度值会突然改变(因为其图形中没有连续性),这在场景中会产生奇怪的效果。是的,你已经知道了,这正是你发布这个问题的原因。
好吧,我们怎么才能做得更好呢?隐马尔可夫模型。。。如果速度图是连续的,那就不是那么烦人的速度跳跃。对这样的运动最简单的描述可能是一个统一的无耐力运动。这样的系统由以下方程式描述:
和我们预期的一样,速度图是连续的,运动通过路径加速。这可以被编码成unity来改变methids
好吧,让我们看看进展如何…
呃…哦,哦。 它看起来几乎不错,只是在某个点上它向后移动然后又向前移动。实际上,如果我们检查我们的图表,它是在那里描述的。在12到16秒之间,速度为负值。为什么会这样?因为这个运动函数(恒定加速度)虽然简单,但有一些局限性。对于一些突然的速度变化,可能没有一个恒定的加速度值可以保证我们的前提(在正确的时间通过检查站),而不会产生这些副作用。 我们现在该怎么办? 你有很多选择:
别停在那儿!在路径的线gizmo上添加渐变以方便查看它的速度或速度,添加用于在编辑器模式下操作路径的句柄…发挥创造力! |
![]() |
2
0
据我所知,大多数解决方案都已经存在,只是初始化不正确。 本地速度取决于样条曲线的长度,因此您应该通过 段长度的倒数 (你只需几步就可以很容易地接近它)。
当然,在您的情况下,您不能控制速度,只能控制输入时间,所以您需要正确地分配
正如在评论中提到的那样,有些数学可以用
|
![]() |
3
0
我们先定义一些术语:
缓解每个关节速度变化的最简单方法是:
哪里:
上面的直觉是,当我到达第一条样条曲线的末端时,我预测下一条样条曲线的预期速度,并将当前速度减缓到那里。 最后,为了让宽松政策看起来更好:
|
![]() |
4
0
您可以尝试使用他们的车轮系统的车轮碰撞器教程。 它有一些变量,你可以调整与刚体变量,以实现模拟驾驶。 就像他们写的
免责声明:我只有很少的经验与车轮碰撞。但在我看来他们就像你要找的一样。 https://docs.unity3d.com/Manual/WheelColliderTutorial.html
|
![]() |
Nick X Tsui · 2D插值导致溢出错误:要插值的数据点太多 7 年前 |
![]() |
Silver moon · 二维网格上的numpy/scipy插值 7 年前 |
![]() |
Liwellyen · x值在特定范围内的指数插值 7 年前 |
![]() |
Nick X Tsui · 使用多个相邻点进行插值 7 年前 |
|
user7867434 · SQL插值字符串 7 年前 |
![]() |
bhjghjh · 使用scipy在符号图中进行曲线拟合或插值 7 年前 |
![]() |
steff · 通过插值转换熊猫数据帧列 7 年前 |