查看: 1455|回复: 0
打印 上一主题 下一主题

AStar寻路算法属性设置_资料

[复制链接]

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-6-15 17:40:38 |只看该作者 |倒序浏览
下载工程包:http://www.arongranberg.com/unity/a-pathfinding/download/



在Unity导入unitypackage,并打开Terrain场景,点击层次(hierarchy)面板的A*gameObject,在属性(inspector)面板就可以看到A*对应的一系列控件,点击Show Gird按钮激活,在场景(scene)面板中就会显示覆盖在地形上的网格



这些网格可以用来导航,每条连线表示节点之间的联通路径,目标可以沿着连线到达一个一个目标点。空缺处(红色方块标记)表示障碍或地形中的斜坡,标记为不可走。最外边的大白边框表示网格的边界,之外的区域没有路径可走。(如果你创建了过于一个网格对象)每个网格对象有不同的颜色,不同颜色间不可寻路,所以多数时候一个世界只需要一个网格对象。



继续说控件。



编辑器中许多控件都有鼠标提示,所以不确定的时候,把鼠标移上去。



控件第一行是个工具栏,包括“Static Setting”,“Runtime Setting”之类的按钮,先看“Static Setting”:



StaticSetting



这些是在运行游戏之前调整的设置,运行时调整可能会出错(数据可能越界)

控件中最重要的是最下边的“Scan Map”,用来更新你以上所作的选择(在场景中调整到Y轴的视角,或游戏(game)面板中调整摄像机的视角能更清楚看到更新),如果你点了“Calculate Grid On Startup”选项,则更新也会被调用。



Grids



还是那句话,你可以用多个网格对象,但多数情况下你只需要一个。

网格所处的位置越高,优先级越高。

例如在一个地方你用了一个节点设置较大的网格,其中有个小房子,你希望路径更精细而用了一个节点设置较小的网格。小房子处的网格有了重复,脚本就会根据两个网格对象优先级,判断房子处应该用哪个(意味着精细的网格应拥有更高的优先级即更高的位置)。



接下来是节点属性设置,留意下其中有些属性只有选择了相应模块后才会显示。



Variables



Show Debug 是不是在场景面板中显示网格

Width X轴的网格数

Depth Y轴的网格数

Node Size 节点大小,与X、Y轴的网格数相乘,得到世界的X、Y轴网格数(Width,Depth)

Height 此处应保证白边框将你要走的多有区域都包含在内。另外,多数时候寻路单元会从轴而不是脚下开始计算高度(意味着偏 高一点),这个属性会使用世界单元的数据,而不是[node size]的,例如Width 、Depth

Offset 网格在世界空间的偏移位置

Physics 检测障碍的所有途经



Walkablecheck 障碍检测的方式,包括

Overlap:球面覆盖检测

Touch:球体接触检测

Capsule:胶囊检测(高度半径单独设置,更符合实际)

Raycast:投射式检测,只检测节点正中心是否可走

Height (上个选项选了胶囊)胶囊高度

Radius 选择了Capsule, Touch 或Overlap模式时,设置半径。

Mask 应该被检测为障碍的层(Layers)

Direction (raycast模式),检测方向

Length (raycast模式),射线长度





网格的设置就这些了。但是如果你使用了地形,而不想使用平面的网格,将要说道的就是适用于地形的设置。这里有三种不同设置定义节点Y轴方向的位置,Flat就是平面网格模式,无需其他设置,Terrain是地形模式,选择之后,节点就会根据地形设置其起始高度。

需要注意的是:如果你使用了一个大地形,就可能会出现“vertexCount > 60000&rime;,脚本无法处理高于60000的VertexCount值,这样的话可以选择raycast模式,将地形放在不同的层。。。。。。。。。。。。。



最后一种是raycast模式,利用光线投射计算出节点的位置,它比terrain模式有更多特性,它可以获取碰撞点的法线,因此可以根据StaticMax Angle属性的值,将坡度太高的点射为不可走。Raycast模式也适用于terrain模式,相比之下terrain模式只检测节点之间的弧度,而不是真正的法线,就变的不可靠了。

所以在你不能使用平面模式时,建议使用投射模式。



参数

Use Normal ForMax Angle Calculation 计算角度时使用法线

Static Max Angle 可走节点的最大角度

Mask 定义被射线检测的层,这里应该选择玩家、NPC或之类的物体可以站立的层,而不是障碍层



接下来是Neighbours属性

如果你仔细看场景面板中的网格线,可以发现每个点上连接着四或八条线,有些游戏中你可能希望你的人物走对角线,有的则不,Neighbours属性可以满足你的要求。



最后一个属性石heapsize,这个是高级属性,理解起来有点费力。

如果你对A*有一定的了解,在A*的脚本中存储了一个包含所有可走节点的开启列表,从当前所在点的下一个可走节点中,选择F值最低的节点,此选中的点的所有可走点再加入开启列表,依次迭代下去,这样脚本在每一帧就要查找200或2000次,但如果从列表中搜索就不需要了,所以脚本用一个二叉堆来加速搜索。

A*算法的详细讲解:

http://www.policyalmanac.org/games/aStarTutorial.htm(英)

http://blog.vckbase.com/panic/archive/2005/03/20/3778.html(中)



Heap size 参数就是用来定义二叉堆的最大长度的,设为1意味着所需的全部节点都可以保存在二叉堆中,相应所需的内存多,设为0.1就是开启列表只能存储十分之一的节点,而所需内存就少了。推荐值为0.5。



详见:http://www.gamengines.com/article-1560.html
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-29 21:15 , Processed in 0.093549 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部