Unity2D-怪物AI启发式寻路算法(多目标,任意怪物大小,攻击范围)
完整工程下载在最后,先上效果:
红色方块为怪物体积大小为2x2个数1。
黄色为目标个数3。
白色点为障碍物。
怪物攻击范围2x2(自身大小)。
(这里为了方便观看,对算法每一步都进行了延时)
怪物大小1x1,怪物攻击范围1x1(自身大小)。
搜索过程中出现的红色路线就是路径,最后重新绘制的红色路径为对允许斜方向行走的路径。
实现步骤
- 使用BFS(广度优先搜索)
每次将当前搜索位置周围的位置加入到搜索队列。
周围位置是一个抽象的概念,如果加入为 上下左右,4个方向,那么每次就只会在4个方向进行挑选最优路径。
扩展一下:
Q:如果我需要进行任意角度斜着走呢?如果我需要45度角走呢?
A:那么只需要改变周围位置的定义即可。
添加优先条件
其实就是对BFS进行了优先级排序,每次选取目标都从我们计算出的最优值进行搜索。(这样搜索就是有目的性的)
即:BFS + 优先队列 = A*,(这差不多就是A*的核心思想了,优先队列只是一种选最优的方法)
如何找到最优路径
可以先假设我们已经找到了最优路径,那么最优路径有哪些性质?
对于每一个点我总是能到达,只是到达方式不同,导致到达使用的步数不同。因此我们可以在地图中记录到达这个点当前点使用的最小步数。如果有更小的步数的走法,我们就覆盖掉它。
通过记录最小步数来源的方向我们可以还原整条路径。(当然对于任意方向,如8方向同理)。
实现碰撞体积
实现体积的需要处理的其实只有两个部分。
- 物体的中心在哪?
- 物体的体积怎么表示
当我们确定体积的表示方法后就简单了:
我们只需要在搜索过程中使用对每个体积单位进行碰撞检查就可以!
如何动态搜索多个目标
- 一种最简单的方法就是搜索多次,每次对不同的目标进行搜索
这种方法的弊端很明显,就是随着目标的增多,搜索次数会不断增大。
而且在第一个目标的搜索中我们已经知道了很多地方的最短来源,而搜索第二个目标的时候却需要重新搜索,这实在是一种浪费。
顶部的演示图就是使用这种方法。切换到多目标同时搜索很容易。
- 同时对多个目标进行搜索
每次搜索都将多个目标的距离进行计算对比,并且只走最短的那条路。
这种方式的优点就很明显,可以对很多目标进行搜索,并且快速选出最短的那个。
下面是使用同时搜索多个目标,并且只找最近目标的路径。
演示时使用的配置信息:
项目完整演示包:
https://download.csdn.net/download/qq_41709801/86911269
Unity2D-怪物AI启发式寻路算法(多目标,任意怪物大小,攻击范围)相关推荐
- 寻路算法实例解析:贪吃蛇AI的实现
本文是寻路算法的实际应用篇,以贪吃蛇的实现为例子. 1.首先看下这个在微博上很火的贪吃蛇gif 这次我们尝试用代码来模拟下,说不定上面这个图就是计算机搞的. 2.讲贪吃蛇snake AI之前,我们先看 ...
- 贪吃蛇AI算法中的A star寻路算法
A*寻路算法 在之前的贪吃蛇游戏比赛里,计算蛇吃食物路径时要用到寻路算法,于是就去了解了一下,以下是我的算法演化过程. 1.简单寻路–按图索骥 我一开始想到的方法就是最简单的:目标在哪个方位就往哪个方 ...
- Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路
本人正在努力建设自己的公众号,大家可以关注公众号,此文章最近也会上线我的公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的 ...
- unity学习:寻路算法(AStar算法)与简单AI(势能场估价算法)
项目地址:https://github.com/kotomineshiki/AIFindPath 视频地址:多重寻路 综合寻路--包括攻击考量的寻路算法 GamePlay 这是一个<文明> ...
- 读论文1.Preference-inspired co-evolutionary algorithms using weight vectors 使用权重向量的偏好启发式协同进化算法(多目标优化算法)
1请抄写抽到论文的题目,并用中文翻译论文题目和关键词.(10分) Preference-inspired co-evolutionary algorithms using weight vectors ...
- Unity2D敌人/怪物AI控制 第一期
AI:原地巡逻自动攻击型 AI会在横版地图上向左向右移动,移动一段距离后会原地停止移动,等待一段时间后,会随机向左或向右移动,以此循环,其中AI移动速度,移动时间.停留时间均可以自行调控,当人物进入怪 ...
- 游戏编程中的寻路算法研究
近年来,游戏产业的快速发展带动了游戏中人工 智能(Artificial Intelligence,简称AI)的发展,越来越 多的游戏采用人工智能技术提高游戏的可玩性.在电 子游戏中,玩家操控主要角色, ...
- [转] 游戏编程中的寻路算法研究
[url]http://blog.csdn.net/ityuany/archive/2010/04/21/5509750.aspx[/url] 近年来,游戏产业的快速发展带动了游戏中人工 智能(Art ...
- 光速AStar寻路算法(C++)
光速AStar寻路算法(C++) 一.最终效果 可以看到,我创建了500个小动物,也有110的FPS.虽然它们并不是每一帧都在计算寻路,但是平均下来不卡顿也不错了.我是i7 6700 + GT 720 ...
最新文章
- 序列每天从1开始_时间序列预测一
- iOS程序的启动过程介绍
- Elementui icon图标不显示
- oracle 格式化报表输出,perl的格式化(Format)报表输出实现代码
- 使用SecureCRT录制自动脚本
- mysql+firewall_mysql - ERROR 1123(HY000):无法初始化函数'mysql_firewall'; 插件初始化功能失败 - 堆栈内存溢出...
- 九.激光SLAM框架学习之LeGO-LOAM框架---速腾Robosense-16线雷达室外建图和其他框架对比、录包和保存数据
- python-socket模块基本用法收集
- Android Animation之TranslateAnimation(平移动画)
- powerDesign导出word操作步骤
- python批量修改文件夹名称,简洁快捷
- 中国大学计算机专业排名教育部,中国校友会网2018中国大学计算机类各本科专业排行榜...
- python爬取网页数据步骤_如何轻松爬取网页数据?
- 16.4 weak_ptr简介、weak_ptr常用操作与尺寸问题
- 对象存储只能按文件名搜索,你out了吧
- java五大浏览器,[Java教程]各主流浏览器(PC、移动端)userAgent属性信息
- 『 云原生·Docker』Docker存储
- UCOSii和Linux的区别和联系
- nyoj 1237 最大岛屿(dfs)
- python小游戏《孙悟空大战白骨精》 (循环的练习)