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 ...
随机推荐
- PHP中使用CURL(二)
https不需要进行ca认证和证书中域名认证 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_SSL_VE ...
- js 获取页面可视区域宽高
获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下. 1.IE中,浏览器显示窗口大小只能以下获取: 代码如下复制代码 代码如下 document.body.offsetWidth d ...
- Lynis 2.2.0 :面向Linux系统的安全审查和扫描工具
Lynis是一款功能非常强大的开源审查工具,面向类似Unix/Linux的操作系统.它可以扫描系统,查找安全信息.一般的系统信息.已安装软件及可用软件信息.配置错误.安全问题.没有设密码的用户帐户.错 ...
- String,StringBuilder,StringBuffer
(转:http://blog.csdn.net/rmn190/article/details/1492013) String 字符串常量StringBuffer 字符串变量(线程安全)String ...
- use 2 stacks to simulate a queue
class Stack{ private: ; ]; public: void push(int n); int pop(); int peek(); int size(); }; void Stac ...
- APP测试--功能测试
1.1 了解需求 这一点,不但是功能测试,是所有测试都需要的第1步.通过需求文档,与产品经理的沟通,与开发的沟通,用户的使用习惯等各方法,了解APP的需求. 1.2 编写测试用例 当然之前可能是测试计 ...
- HDU2544-最短路(最短路模版题目)
Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...
- VS中的快捷键快速格式化代码,使好看,整齐
在VC2005中,快捷键是Ctrl + K, Ctrl + F, 这是一个组合键,即先按Ctrl + K, 这时候编辑器会等待下一个按键动作,此时再按Ctrl + F, 即可以格式化代码了,当然,也可 ...
- hdu_2838_Cow Sorting(树状数组求逆序对)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 题意:给你一串数,让你排序,只能交换相邻的数,每次交换花费交换的两个树的和,问最小交换的价值 题 ...
- LeetCode OJ 141. Linked List Cycle
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...