我目前正面临着一个问题,我不能把我的头绕过去。在我的2D游戏中,最终应该成为某种虚拟模型的铁路,我可以创建一条路径,由不同的铁路类型。每条铁轨都有自己的航路点。现在的问题如下:
直线导轨不需要很多路径点,因为它们只需要定义两个:起始点和终点。另一方面,曲线需要更多的路径点,因此物体在上面的运动并不都是锯齿状和不光滑的。我所面对的问题是,在整个铁路上,道路上的路点分布是不均匀的,使物体在这条路上的速度非常不均匀。
我也已经知道了这个问题:曲线段中的点太紧了,所以分布如下:
以红色Gizmo.Spheres作为路径点的示例,请参阅此图片
现在,当我沿着上面提到的路径移动一个物体时,我会这样做:
wagon.transform.position = Vector2.MoveTowards(wagon.transform.position, wagon.GetNextPosition(), wagon.GetSpeed());方法Vector2.MoveTowards()的第三个参数是maxDistanceDelta,因此它只能将该数量移动到wagon.GetNextPosition()的方向,该方向是不断更新的。
扭曲的是,密集的填充点导致的距离要比maxDistanceDelta短得多。因此,在铁路的这些部分,对象的移动速度比每个帧的wagon.GetSpeed()慢得多。
我已经有了解决这一问题的办法,但遗憾的是,我无法使用:我选择了每一个路径点,并在路上平均分配它们。我不想那样,我希望道路保持原样,但速度在眼睛看来是一致的。
提前感谢您的帮助!
PS:我已经看过类似的线程,但这些解决方案似乎都不适合我:(即:
发布于 2021-09-23 12:03:33
我想对此发表评论,但不幸的是,我没有足够的声誉,以下是:
我能想到的最好的想法是为你的曲线创建两个路径点(在开始和结束时),并使用抛物线函数来定义它们之间的运动。因此,换句话说,你的火车遵循抛物线,而不是直接向路点移动。
我在一个关于抛物线轨迹的统一论坛上找到了一个有用的回答,您可能会发现它对您的项目很有用(在撰写本文时,它是问题下面的第一个答案)。
发布于 2021-09-23 12:11:20
你是怎么生成这些路标的?你能用贝塞尔曲线代替吗?如果是的话,通常会遇到这个问题,并找到了解决办法。不是绝对精确的解决方案,但通常足够游戏(也就是视觉化,最终只需要像你看到的像素一样精确)。
有一段关于主题:https://www.youtube.com/watch?v=aVwxzDHniEw的优秀视频
https://stackoverflow.com/questions/69299308
复制相似问题