GameUnity 2.0 文档(五) 人工智能之---------------Flocking算法 (聚集,分散,列队 )
AI是游戏的灵魂,是人物的智商,是让玩家觉得游戏是否幼稚的重要判断功能,下面我将介绍国外流行,国内不行的,ai算法。
主要介绍 Flocking 和 Reciprocal Velocity Obstacles。
序言:历史
大家都知道 寻路算法,这些年,自从 XX大神 网上 发布了 A*算法 之后,国内 大白小白 ,只要是个人 都开始 使用他,
一时间,A* 寻路 是 做游戏 的 标准,也是面试 最常问的 话题。
A* 寻路 也是有发展历史的,最早是 Dijkstra算法,
后来 发明了启发式 搜索,BFS,他效率最快
但启发式搜索也有 智障的时候
然后 1968年,大神 把 常用算法和启发式算法 结合起来,发明 了A*算法。
好像是 时间的停止,又好像是 国人的 愚昧无知,A*算法被国人定义为 最终的 寻路方案,但历史的脚步不会停止。
之后的 几十年,国外对A*算法做了深入的加强
迭代深化、动态衡量、带宽搜索、动态A*与终身计划A*
今天我将推开历史的进程,寻找A*的未来
A* 算法之后,是动态A*寻路。大家都会对动态A*寻路提出各种想法,
有些人说,我可以让 运动物体 碰撞时候 再次 A*。但如果多个运动物体,碰撞太多,是否效率会影响
还有人说,遇到 动态 碰撞物体,我让A* 只做 一定 距离的 寻路,那我又问,如果短距离范围 会让运动物体不能合理指向 最终位置,那就是事与愿违。
所以此时 XX大神提出了 Flocking。
运动物体好比就是一辆辆 行驶在 马路上的汽车,他们都有GPS导航仪 进行路径设定。
但突然 有车辆 发生车祸,那么车祸会造成 汽车 失去控制,偏离轨道,这个时候,运动的指挥权 不再是 方向盘。
而是 其他车辆 碰撞后 产生的 轨迹。等碰撞结束后,汽车会继续 打开GPS 导航仪,开始寻路。
这个过程 我们发现,在多车 撞击的时候,汽车并没有在 这个时候 寻路,他会头昏,是的,他只做 物理运动,一阵晕眩后,他恢复神智,重新寻路。
这样的 过程,A*次数 开销会很小。
提出Flocking思想后,聪明可爱的 程序员(这里只单指 外国人),发现,他们可以用来做 群体寻路。
XX大神 提出Reciprocal Velocity Obstacles算法,有一个运动物体来进行A*寻路,其他物体跟着他,称为 领导者模式。
因为他们之间不会重叠,用来做即时战略游戏非常棒。(帝国时代,星际争霸 )等一系列的 策略类型游戏相继推出受到了广大玩家的青睐。
正文:开启
unity 的A*starPathfindingProject插件,就集成了Reciprocal Velocity Obstacles,我们简称RVO.
可能是版权问题,3.51后,作者自己重新编写了RVO的代码,大家不需要改动。
这是作者在文档上提出的
- Note
- The local avoidance system was previously disabled because of licensing issues. This is no longer the case as the whole system has been rewritten in a new way. The exposed APIs for the previous system and the new one are almost identical.
- 国人有些人喜欢 以讹传讹搬弄是非,我就不想说他们了,永远是小白的命!
简单的使用下RVO的功能。
新建一个GameObject,选择菜单
这个是说,我同意 使用 RVO这个功能了。。
按照上图 选择 RVONavmesh。说明,他可以 穿透 范围数据内的 物体,为啥要穿透物体。
因为有时候,在相互撞车的时候,会发生死路的可能,我们不能让他卡死在那吧,所以,有必要让他造假一下,当然这种情况很少,也是情非得已。
接下来,我们做一个运动物体,让他加载 插件 第一个RVOController。
这个意思是所,我可以 不要 碰撞盒子,我不需要重力影响,我也可以碰撞了。当然移动按照这个类的方法来执行。
RVOController的参数和使用方法,以及优化,我下一节来说。大家可以先看看我做的demo来感受下。
分享一个 国外 制作的 案例,我研究的方向 和他是 一样的,大家可以看这个demo。
具体代码,我整合到 框架中。
GameUnity 2.0 文档(五) 人工智能之---------------Flocking算法 (聚集,分散,列队 )的更多相关文章
- GameUnity 2.0 文档(三) 纸片人八方向
DirectSprite类 有别于 上篇文档出现的 AnimationSprite类 (从头播放到尾) 这个类根据 path的图,如果是 8*8 64个图 八方向,可以设置长宽和 角度 角度 代表 8 ...
- GameUnity 2.0 文档(二) 纸片人系统
本想快速的 把 之前写的类库,一股脑的 给大家 ,但又觉得,如 msdn那样的 文档,并不能给 初学者 所能接受. 因为 大部分人 对 api 还是比较陌生,也不愿意 去研究和组合. 那么 今天我选用 ...
- GameUnity 2.0 文档(四) 网格+四叉树 最优碰撞检测
在写之前,必须对 前一篇文档补充一下. Camera2DAngle类是 摄像机旋转 2d人物360度,PlayerMove是人物移动. 这两个类 都可以 360 ° 场景旋转人物也跟着旋转. 但不能 ...
- GameUnity 2.0 文档(一) 事件机制
新版本和旧版本一样,有socket事件和内部事件.区别在于,你只要一个监听就可以 消息协议规则: 用类名标记协议的好处是什么? 是利用反射机制来处理每个消息. 程序启动的时候,会读取所有类名,并字典保 ...
- 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素
朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...
- Beautiful Soup 4.2.0 文档
Beautiful Soup 4.2.0 文档 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方 ...
- vue mand-mobile按2.0文档默认安装的是1.6.8版本
vue mand-mobile按2.0文档默认安装的是1.6.8版本 npm list mand-mobilebigbullmobile@1.0.0 E:\webcode\bigbullmobile` ...
- css2.0文档查阅及字体样式
css2.0文档查阅下载 网址:http://soft.hao123.com/soft/appid/9517.html <html xmlns="http://www.w3.o ...
- Django2.0文档
第四章 模板 1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% e ...
随机推荐
- MVC3+EF4.1学习系列(一)-------创建EF4.1 code first的第一个实例
基于EF4.1 code first 简单的CRUD 园子中已经有很多了 ~~ 真不想再写这个了 可是为了做一个完整的小demo 从开始 到后面的一些简单重构 还是决定认真把这个写出来 争取写些别人 ...
- REST认识
大家对REST的认识? 谈到REST大家的第一印象就是通过http协议的GET,POST,DELETE,PUT方法实现对url资源的CRUD(创建.读取.更新和删除)操作.比如http://www.a ...
- SharePoint2013 Excel导出好的代码
C#Excel操作类ExcelHelper.cs 来源:http://www.hellocsharp.com/article/67.aspx C#源码世界 发布于: 2014-09-12 使用本类之前 ...
- DataTable Javascript Link not working on 2nd page
$(document).ready(function () { var otable = $('#tbl-resources').dataTable( { bJQueryUI: false, bFil ...
- Tcp Socket非阻塞recv
最近看了许多关于网络编程的资料,自己小记一下,以方便以后查找. 什么是阻塞socket,什么是非阻塞socket.对于这个问题,我们要先弄清什么是阻塞/非阻塞.阻塞与非阻塞是对一个文件描述符指定的文件 ...
- qtp中vb脚本,经典收藏
1.在脚本运行过程中屏蔽鼠标键盘输入 SystemUtil.BlockInput ‘开始处 这里是你的脚本 SystemUtil.UnblockInput ’结尾处 ----------------- ...
- Linq第二讲
这一讲,来说说集合.因为linq主要用于对数据源进行查询,集合是最常见的数据源. 集合 形式: 数组,列表List<T> Arraylist等. 特点: 可通过索引或键访问.可进行fore ...
- android网络开发之测试机连接到服务器上面
1:本人使用Tomcat作为服务器软件,首先打开Tomcat.(可以在浏览器中输入http://www.127.0.0.1:8080/查看) 2:服务器后台使用Servelt开发,这里不再讲解. 3: ...
- 7.在第4题中Hello.class所在路径下, 输入命令:java Hello.class,会出现什么结果,为什么?
java Hello已经是加载类了
- php:二进制处理
直接上代码 <?php #字符串 #php中字符串就是二进制,不用特别转化 #方法1:直接把字符串当成二进制 $c = "ccc"; var_dump($c, bin2hex ...