根据@davidluzgouveia对匿名发布的评论,我将启动我的项目。但是,路径跟随和路径查找是非常不同的。路径查找更多是匿名发布的内容,对于路径查找,我将研究Dijkstra的算法。对于路径跟踪,我将完全使用我选择的物理引擎。我设置的方式是,单元类要通过的2D偏移量在它的路径子类中设置每个位置,因此是2D而不是3D,这是因为我在游戏中设置了物理方法。
3D解释:
每个单元只有一个主碰撞器,专门为与地形和世界物体碰撞而设置。从程序上讲,它是一个胶囊形状,具有半径和高度。它建立在模型的中心,应该延伸到模型的顶部和顶部。但是我也有一个表面偏移量,该偏移量始终是在离地面多远的位置,并且有一次浮动,允许它向下滑动然后一次略微弹起多少。这听起来像是我为地形碰撞问题应用了某种固定的解决方法,但是我有自己的理由。
无论如何,您都应向此胶囊对象施力,并且它应始终保持悬停在地面上。这并不是说它不能再走高,只是它不能再走低。它需要悬停的原因(在我的情况下)是因为在刚体和布娃娃物理引擎中,我的单元的腿会按照程序进行动画处理。因此,通过向胶囊施加简单的力,我实体的腿将自行重新定位。他们还将有各自的重力应用程序!这样做是为了让我的角色倾斜时,一只脚的高度可以比另一只脚的高度低。
这正是您应该做的。根据您的要求判断。如果您想保留一些功能,那显然很好,尤其是在RTS或FPS上,而没人会反正脚部或在乎。但通常,该单元应具有一个MAIN碰撞对象,几乎可以与角色移动一起工作。
特别是2D:
您仍然应该有一个主要要点,或者只是某种参考,以便引擎能够推动运动,这是一个单元的运动。您可以为每个单元提供一个路径子类,该子类具有一些需要去的位置,您可以在级别代码中指定它(例如location1(x,y)location2(x,y)等),最好的方法是(不知道您正在从事哪种游戏)可能是在关卡中指定位置,并让每个单元按关卡指定的顺序处理它们,并在到达每个位置后,将其替换为所需的位置下一个需要到达的地方。
您可以通过多种方式进行修改,例如,首先为每个单元找到一个位置列表,因为这意味着并非所有单元都必须移到相同的位置。但是,以同样的方式,您也可以在级别代码中执行此操作(unit1.location1(x,y)unit1.location2(x,y)grunt.l1(x,y)knight.loc3(x,y)随你)
只是一些想法!我建议您阅读3D版本,即使它的相关性远不如此。
编辑:我决定只为可能读过此书的任何人提供这两个文件(是的,是的)....(我最初只是略过您的问题,直到我重读它才意识到这是2D特有的。>)