首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity2D:沿路径移动对象-不均匀分布的路径点-所需的恒定速度

Unity2D:沿路径移动对象-不均匀分布的路径点-所需的恒定速度
EN

Stack Overflow用户
提问于 2021-09-23 11:40:15
回答 2查看 368关注 0票数 1

我目前正面临着一个问题,我不能把我的头绕过去。在我的2D游戏中,最终应该成为某种虚拟模型的铁路,我可以创建一条路径,由不同的铁路类型。每条铁轨都有自己的航路点。现在的问题如下:

直线导轨不需要很多路径点,因为它们只需要定义两个:起始点和终点。另一方面,曲线需要更多的路径点,因此物体在上面的运动并不都是锯齿状和不光滑的。我所面对的问题是,在整个铁路上,道路上的路点分布是不均匀的,使物体在这条路上的速度非常不均匀。

我也已经知道了这个问题:曲线段中的点太紧了,所以分布如下:

以红色Gizmo.Spheres作为路径点的示例,请参阅此图片

现在,当我沿着上面提到的路径移动一个物体时,我会这样做:

代码语言:javascript
复制
wagon.transform.position = Vector2.MoveTowards(wagon.transform.position, wagon.GetNextPosition(), wagon.GetSpeed());

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

扭曲的是,密集的填充点导致的距离要比maxDistanceDelta短得多。因此,在铁路的这些部分,对象的移动速度比每个帧的wagon.GetSpeed()慢得多。

我已经有了解决这一问题的办法,但遗憾的是,我无法使用:我选择了每一个路径点,并在路上平均分配它们。我不想那样,我希望道路保持原样,但速度在眼睛看来是一致的。

提前感谢您的帮助!

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

EN

回答 2

Stack Overflow用户

发布于 2021-09-23 12:03:33

我想对此发表评论,但不幸的是,我没有足够的声誉,以下是:

我能想到的最好的想法是为你的曲线创建两个路径点(在开始和结束时),并使用抛物线函数来定义它们之间的运动。因此,换句话说,你的火车遵循抛物线,而不是直接向路点移动。

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

票数 1
EN

Stack Overflow用户

发布于 2021-09-23 12:11:20

你是怎么生成这些路标的?你能用贝塞尔曲线代替吗?如果是的话,通常会遇到这个问题,并找到了解决办法。不是绝对精确的解决方案,但通常足够游戏(也就是视觉化,最终只需要像你看到的像素一样精确)。

有一段关于主题:https://www.youtube.com/watch?v=aVwxzDHniEw的优秀视频

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69299308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档