找回密码
 立即注册
查看: 616|回复: 0

Unity寻路插件(A* Pathfinding)入门教程七:Graph 类型

[复制链接]
发表于 2020-12-29 10:24 | 显示全部楼层 |阅读模式
本系列的教程文章基于 A*Pathfinding Project 4.2.8的官网教程翻译,每一章节的原文地址都会在教程最下方给出。
本篇简单概览一下 graph的几种类型。
Grid Graph

这是最直接的一种Graph,和名字一样,他生成的是栅格类型的Graph。它在大多数的场景下表现都是良好的,并且如果你需要在运行时动态更新graph数据也十分的容易和方便。(比如RTS或者塔防游戏)
但它对于拥有巨量空间的大型世界表现乏力,因为栅格的特性,它会在所有的地方生成相同格式的数据,即使那些地方是大片的空白地区,因此它会消耗过多的内存和使用更长的寻路时间。
grid traph的类型还会被用于六边形的地图寻路,你只需在grid graph的面板选项上将 Shape设定为Hexagonal。你可以在插件的示例场景14(Example14_TurnBased_Hexagon) 里面查看详细。
或者这里了解更多:
Navmesh Graph

这个是另外一个常用的graph类型,他用三角形替代了gird graph里的栅格形态,以及point graph里的路点。
这个寻路方式在大多数静态场景下(即不会在运行时动态调整障碍和阻挡点)是完美的。他通常来说性能要优于 grid graph,因为他搜索的节点少,并且也不怎么需要平滑处理。它返回的路径一般来说可以直接使用,但是还是强力建议使用funnel modifier的修饰符。
你可以用系统自动生成导航网格,也可以使用你喜欢的3D软件手动编辑导航网格。一个导航网格的概念就是使用多边形去描述哪些地方可以行走,它生成的顶点应该始终在多边形的边上而不是内部。
注意 你最好是将比较巨大的多边形分割成较小的差不多的多边形,因为一个超大的多边形和一个迷你的多边形在一起的时候,寻路坑会会出故障。(前面章节有解释过)
Point Graph

所有类型里面 PointGraph是最简单的,但是却允许更多的自定方式。它是由用户放置一系列的固定点链接起来组成的。
point graph 通过一个Root Transform 来扫描它们,然后把每一个点当做一个子节点。然后它用射线检测一下不同节点之间是不是真的能够联通起来。如果你想要让路线平滑起来就有一些困难了,因为它必须要经过哪些已经设定好的路点,就不能像上面两种类型一样自动进行平滑优化。不过这里可以使用 raycast modifier修饰符来进行适当优化。
但是,这里有一个问题就是,当我们到达一个路点的时候,距离它最近的那个路点有可能在墙的后面。所以当你放置路点的时候最好能规避这个问题。
Recast Graph (Pro版本专属)

这是目前为止最先进的graph生成器。它是基于Recasts,一个用C++写的开源的导航网格和导航系统。
这里我们将它的一部分转成了C#语言来适配Unity。
recast graph生成器,主要是将场景的Mesh都体素化,然后模拟建立一个可以用 navmesh graph处理的导航网格。他可以用几秒钟就自动生成一个,正常情况下可能几个小时才能手动生成的网格。
Layered Grid Graph (Pro版本专属)

GridGraph的表现一般来说已经比较完美了。但是如果有一些场景有一些重叠的区域,比如移动建筑有很多层,他就不能很完美的处理这些情况了。所以这个graph就用来处理这种情况了。这里有点局限的地方就是目前只支持4方向的寻路,8方向的暂时不能支持。另外还有一些额外的内存开销,但是当你需要进行分层寻路的时候,你可能不得不去使用它……
这里查看简单介绍:


原文地址:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 07:08 , Processed in 0.091407 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表