第二周论文心得(关于unity3D寻路的思考)

一、 寻路

1、什么是寻路

这个问题我在网上找很久,都没有一个较为明确的答案。我只能将自己的理解写出来。寻路是游戏中人物(某个单位)要从一端到达另一端进行路线的确定

2、寻路的意义

这里引用一位名叫“黑夜路人”博主的“关于寻路算法的一些思考(1):A*算法介绍”的一段话

物体的移动算法似乎显得很简单,然而寻路规划问题却十分复杂。考虑下面这个例子:
这个单位的初始位置在地图的下方,想要到达地图的顶部。如果物体所能侦测到的地方(粉色部分所示)并没有障碍,那么物体就会直接向上走到它的目标位置。但在距离顶端较近的位置时,物体侦测到了障碍,因而改变了方向。该物体将不得不行进一个“U”形的路径绕过障碍物(如红色路径所示)。通过对比可知,寻路系统能够通过搜索一个更大的范围(如蓝色区域所示),并寻找一个更短的路线(如蓝色路径所示),使物体避免绕这条由凹陷障碍物造成的远路。
当然,可以通过改进物体的移动算法解决上图所示的陷阱。即要么避免在地图上创建有凹陷的物体,要么标记整个凹陷物体的整个凸包为危险区域(即除非目标在该区域内,否则避免进入该区域),如下图所示:
而寻路系统则会让路径的决定提前,而不是像上图一样,物体直到移动到最后一刻才发现问题所在。对于“改进物体移动算法”和“使用寻路系统规划路径”两种方式有以下的折中:规划路径一般来说更慢,但效果更好;改进移动算法则会快一些,但有时候会卡住。如果游戏地图经常改变,那么路径规划的方式可能就意义不大了。我建议两者都使用:在更大的尺度、缓慢变换的地图和更长的路径上进行寻路规划,而对于局部区域、快速更改的地图和短的路径则使用改进的物体移动算法。

直接运用移动算法是很简单,但是有其弊端。在不同的情况之下的效果也不相同,这时通过寻路系统规划路径就可以有效弥补单独使用物体移动算法的弊端,或者在不适用物体移动算法的情况之下,对物体移动的补充。

二、 算法

1、寻路算法

在搜索寻径问题中,Dijkstra算法是目前许多工程解决最短路径问题采用的理论基础,只是不同工程 对 Dijkstra算 法 在 不 同 方 面 采 用 了 各 异 的 改 进 方 法[1,2]。常见的搜索算法有深度优先算法(DFS)、广 度优先算法(BFS)、迭代加深算法、双向广度优先搜 索算法、IDA* 算法、A* 搜索等[3,4]。它们分为盲目式 与启发式两种。盲目式是指其没有目的性的搜索,其 可以在一定的规则下全局进行搜索;而启发式则是指有目的性地朝着一定的目标进行搜索

寻路算法简而意之就是在物体要移动到另外一点之时对所处点至目标点的路线搜索,而最理想化的寻路算法就是两点之间最短的路径。

2、流行算法A~*

1.1 A* 算法基本原理 A*
算法是游戏开发中人工智能寻路方面最为常用的算法之一。此算法类似于对广度优先算法的 优化,其原理也是在查询点周围进行寻找,其不同点在于以下两个方面[7]: 第一方面为加入了估价函数: F(n)=g(n)+h(n) (1) g(n)代表某点n 从当前位置上距离起点的代 价函数值,它是由有限个数起始点与目标点代价函数的值累加构成。h(n)代表点n从其位置上距离终 点的代价函数值。即用 F(n)代表n点总的路径代 价。常用的经典启发函数代价计算方法h(n)有:曼 哈顿距离(ManhattanDistance)、对角线距离、欧几 里得距离(EuclideanDistance)等[8]。 第二方 面 为 增 加 两 个 表 (Open-List与 Close- List)来进行路径点的筛选与扩展,更好地统计整理 路径点,通过判断和比较来节省资源消耗。

1.2 A* 算法具体实现过程
算法具体过程描述如下: ① 通过循环提取 Open-List中的值并不断地比 较寻找此时列表中代价最低的路径点,将代价最低 点移除 Open-List,加入 Close-List后进入②。持续 循环此步骤直到 Open-List中的路径点个数为0。 ② 判断此路径点是否为寻路终点,若是则计算 路径,直接进入④。否则,获得此点周围的非障碍点,进入③。 ③ 判断周围非障碍点是否已经存在于 Open- List中,如果存在,重新计算并更新路径点代价函数值。如若不存在,计算路径点代价函数值后并将路径 点储存在 Open-List中。后将①中的提取点与此周围 非障碍点设为父子关系,方便最终路径点的提取。 ④ 得到最终点,依次根据节点的父子关系寻找 父节点并存入数列中,直至寻找到初始路径点。数列中所有点的集合,即为寻路路径。

三、unity中自带的自动寻路导航系统

unity3d中是自带有自动寻路导航系统的如下图所示

在这里插入图片描述

1、原理

1、认知周围环境
2、确定目标位置
3、AI自身属性的设置

2、优缺点

优点:作为unity自带的寻路系统,在unity内部有这极高的稳定性。
缺点:对目标进行追踪。但还做不到设计出作战案,自动判断当前的作战路线等。无法对寻路系统进行更改以优化路径。

宛博文, 陈洁, 朱瑞晨, et al. 改进的A~*算法在游戏寻路功能中的应用与研究[J]. 信息化研究, 2019(6).

王志岗 基于Unity3D的自动寻路导航系统的研究

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值