【问题标题】:Unity2D: move object along path - unevenly distributed waypoints - constant speed neededUnity2D:沿路径移动对象 - 不均匀分布的航路点 - 需要恒定速度
【发布时间】:2021-11-16 19:27:59
【问题描述】:

我目前面临一个无法解决的问题。在我最终应该成为某种虚拟模型铁路的 2D 游戏中,我可以创建一条由不同铁路类型组成的路径。每条铁路都有自己的航路点。现在问题如下:

直轨不需要很多航路点,因为它们只需要定义两个;起点和终点。另一方面,曲线需要更多的航路点,因此在其上移动的物体并非都是锯齿状和不平滑的。我面临的问题是,整个铁路上的路点分布如此不均匀,这使得物体沿路径移动的速度非常不均匀。

我也已经知道这个问题:曲线部分的点非常狭窄,分布看起来像这样:

See this picture for an example with red Gizmo.Spheres as waypoints

现在,当我沿着所述路径移动对象时,我会这样做:

wagon.transform.position = Vector2.MoveTowards(wagon.transform.position, wagon.GetNextPosition(), wagon.GetSpeed());

Vector2.MoveTowards()方法的第三个参数是maxDistanceDelta,所以它只能将那个量移动到wagon.GetNextPosition()的方向上,而wagon.GetNextPosition()是不断更新的。

扭曲的是,密集打包的点导致的距离比 maxDistanceDelta 短。所以在铁路的那些部分,物体的移动速度比 wagon.GetSpeed() 每帧慢。

我已经有了解决方案,但遗憾的是我无法使用:我获取了每个航路点并将它们均匀地分布在路径上。我不想要那个;我希望路径保持原样,但速度要一致。

提前感谢您的帮助!

PS:我已经看过类似的线程,但这些解决方案似乎都不适合我:(即:

【问题讨论】:

    标签: c# performance unity3d path move


    【解决方案1】:

    我会对此发表评论,但不幸的是我没有足够的声誉,所以在这里:

    我能想到的最好办法是为您的曲线创建 2 个航点(在起点和终点),并使用抛物线函数来定义它们之间的运动。所以换句话说,你的火车沿着抛物线而不是直接朝着航路点移动。

    我在一个统一论坛上找到了一个有用的answer,关于抛物线轨迹,您可能会发现它对您的项目很有用(这是撰写本文时问题下方的第一个答案)。

    【讨论】:

    • 这个我会调查的!听起来很有希望,所以我没有这么高的点密度。如果我以这种方式找到可行的解决方案,我会通知您。谢谢!
    • 别担心!我实际上对此很感兴趣,我很惊讶我以前从未遇到过这种情况。感谢您发布问题,因为现在我们都可以学习如何做到这一点哈哈。我希望它对你有用!
    【解决方案2】:

    您是如何生成这些航点的? 你能用贝塞尔曲线代替吗? 如果是,则通常会遇到此问题并且已找到解决方案。不是绝对准确的解决方案,但对于游戏来说通常就足够了(也就是最终只需要与您看到的像素一样准确的可视化)。

    有关于这个话题的精彩视频:https://www.youtube.com/watch?v=aVwxzDHniEw

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      相关资源
      最近更新 更多