完整工程下载在最后,先上效果:

红色方块为怪物体积大小为2x2个数1。
黄色为目标个数3。
白色点为障碍物。
怪物攻击范围2x2(自身大小)。
(这里为了方便观看,对算法每一步都进行了延时)

怪物大小1x1,怪物攻击范围1x1(自身大小)。
搜索过程中出现的红色路线就是路径,最后重新绘制的红色路径为对允许斜方向行走的路径。

实现步骤

  1. 使用BFS(广度优先搜索)
    每次将当前搜索位置周围的位置加入到搜索队列。

周围位置是一个抽象的概念,如果加入为 上下左右,4个方向,那么每次就只会在4个方向进行挑选最优路径。

扩展一下:
Q:如果我需要进行任意角度斜着走呢?如果我需要45度角走呢?
A:那么只需要改变周围位置的定义即可。

添加优先条件

其实就是对BFS进行了优先级排序,每次选取目标都从我们计算出的最优值进行搜索。(这样搜索就是有目的性的)
即:BFS + 优先队列 = A*,(这差不多就是A*的核心思想了,优先队列只是一种选最优的方法)

如何找到最优路径

可以先假设我们已经找到了最优路径,那么最优路径有哪些性质?
对于每一个点我总是能到达,只是到达方式不同,导致到达使用的步数不同。因此我们可以在地图中记录到达这个点当前点使用的最小步数。如果有更小的步数的走法,我们就覆盖掉它。
通过记录最小步数来源的方向我们可以还原整条路径。(当然对于任意方向,如8方向同理)。

实现碰撞体积

实现体积的需要处理的其实只有两个部分。

  • 物体的中心在哪?
  • 物体的体积怎么表示
    当我们确定体积的表示方法后就简单了:
    我们只需要在搜索过程中使用对每个体积单位进行碰撞检查就可以!

如何动态搜索多个目标

  1. 一种最简单的方法就是搜索多次,每次对不同的目标进行搜索
    这种方法的弊端很明显,就是随着目标的增多,搜索次数会不断增大。
    而且在第一个目标的搜索中我们已经知道了很多地方的最短来源,而搜索第二个目标的时候却需要重新搜索,这实在是一种浪费。

顶部的演示图就是使用这种方法。切换到多目标同时搜索很容易。

  1. 同时对多个目标进行搜索
    每次搜索都将多个目标的距离进行计算对比,并且只走最短的那条路。
    这种方式的优点就很明显,可以对很多目标进行搜索,并且快速选出最短的那个。

下面是使用同时搜索多个目标,并且只找最近目标的路径。

演示时使用的配置信息:

项目完整演示包:
https://download.csdn.net/download/qq_41709801/86911269

Unity2D-怪物AI启发式寻路算法(多目标,任意怪物大小,攻击范围)相关推荐

  1. 寻路算法实例解析:贪吃蛇AI的实现

    本文是寻路算法的实际应用篇,以贪吃蛇的实现为例子. 1.首先看下这个在微博上很火的贪吃蛇gif 这次我们尝试用代码来模拟下,说不定上面这个图就是计算机搞的. 2.讲贪吃蛇snake AI之前,我们先看 ...

  2. 贪吃蛇AI算法中的A star寻路算法

    A*寻路算法 在之前的贪吃蛇游戏比赛里,计算蛇吃食物路径时要用到寻路算法,于是就去了解了一下,以下是我的算法演化过程. 1.简单寻路–按图索骥 我一开始想到的方法就是最简单的:目标在哪个方位就往哪个方 ...

  3. Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路

    本人正在努力建设自己的公众号,大家可以关注公众号,此文章最近也会上线我的公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的 ...

  4. unity学习:寻路算法(AStar算法)与简单AI(势能场估价算法)

    项目地址:https://github.com/kotomineshiki/AIFindPath 视频地址:多重寻路 综合寻路--包括攻击考量的寻路算法 GamePlay 这是一个<文明> ...

  5. 读论文1.Preference-inspired co-evolutionary algorithms using weight vectors 使用权重向量的偏好启发式协同进化算法(多目标优化算法)

    1请抄写抽到论文的题目,并用中文翻译论文题目和关键词.(10分) Preference-inspired co-evolutionary algorithms using weight vectors ...

  6. Unity2D敌人/怪物AI控制 第一期

    AI:原地巡逻自动攻击型 AI会在横版地图上向左向右移动,移动一段距离后会原地停止移动,等待一段时间后,会随机向左或向右移动,以此循环,其中AI移动速度,移动时间.停留时间均可以自行调控,当人物进入怪 ...

  7. 游戏编程中的寻路算法研究

    近年来,游戏产业的快速发展带动了游戏中人工 智能(Artificial Intelligence,简称AI)的发展,越来越 多的游戏采用人工智能技术提高游戏的可玩性.在电 子游戏中,玩家操控主要角色, ...

  8. [转] 游戏编程中的寻路算法研究

    [url]http://blog.csdn.net/ityuany/archive/2010/04/21/5509750.aspx[/url] 近年来,游戏产业的快速发展带动了游戏中人工 智能(Art ...

  9. 光速AStar寻路算法(C++)

    光速AStar寻路算法(C++) 一.最终效果 可以看到,我创建了500个小动物,也有110的FPS.虽然它们并不是每一帧都在计算寻路,但是平均下来不卡顿也不错了.我是i7 6700 + GT 720 ...

最新文章

  1. 序列每天从1开始_时间序列预测一
  2. iOS程序的启动过程介绍
  3. Elementui icon图标不显示
  4. oracle 格式化报表输出,perl的格式化(Format)报表输出实现代码
  5. 使用SecureCRT录制自动脚本
  6. mysql+firewall_mysql - ERROR 1123(HY000):无法初始化函数'mysql_firewall'; 插件初始化功能失败 - 堆栈内存溢出...
  7. 九.激光SLAM框架学习之LeGO-LOAM框架---速腾Robosense-16线雷达室外建图和其他框架对比、录包和保存数据
  8. python-socket模块基本用法收集
  9. Android Animation之TranslateAnimation(平移动画)
  10. powerDesign导出word操作步骤
  11. python批量修改文件夹名称,简洁快捷
  12. 中国大学计算机专业排名教育部,中国校友会网2018中国大学计算机类各本科专业排行榜...
  13. python爬取网页数据步骤_如何轻松爬取网页数据?
  14. 16.4 weak_ptr简介、weak_ptr常用操作与尺寸问题
  15. 对象存储只能按文件名搜索,你out了吧
  16. java五大浏览器,[Java教程]各主流浏览器(PC、移动端)userAgent属性信息
  17. 『 云原生·Docker』Docker存储
  18. UCOSii和Linux的区别和联系
  19. nyoj 1237 最大岛屿(dfs)
  20. python小游戏《孙悟空大战白骨精》 (循环的练习)

热门文章

  1. 汇编语言的寻址地址方式 (长沙戴维营)
  2. C# .net微软OAuth身份验证在EWS中的应用
  3. 关于INTEL I系列处理器睿频
  4. 小程序前后台数据传递
  5. 趣谈Python银杏树(初学者程序)
  6. 22年国家gongwuyuan考试申论题(副省级)
  7. keepass2android 1.0.3,Keepass2Android离线版
  8. 离散余弦变换(含源码)
  9. wondershaper,一个CentOS系统控制网速的工具
  10. 1168: C语言实验题――最值