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算法 (聚集,分散,列队 )的更多相关文章

  1. GameUnity 2.0 文档(三) 纸片人八方向

    DirectSprite类 有别于 上篇文档出现的 AnimationSprite类 (从头播放到尾) 这个类根据 path的图,如果是 8*8 64个图 八方向,可以设置长宽和 角度 角度 代表 8 ...

  2. GameUnity 2.0 文档(二) 纸片人系统

    本想快速的 把 之前写的类库,一股脑的 给大家 ,但又觉得,如 msdn那样的 文档,并不能给 初学者 所能接受. 因为 大部分人 对 api 还是比较陌生,也不愿意 去研究和组合. 那么 今天我选用 ...

  3. GameUnity 2.0 文档(四) 网格+四叉树 最优碰撞检测

    在写之前,必须对 前一篇文档补充一下. Camera2DAngle类是 摄像机旋转 2d人物360度,PlayerMove是人物移动. 这两个类 都可以 360 °  场景旋转人物也跟着旋转. 但不能 ...

  4. GameUnity 2.0 文档(一) 事件机制

    新版本和旧版本一样,有socket事件和内部事件.区别在于,你只要一个监听就可以 消息协议规则: 用类名标记协议的好处是什么? 是利用反射机制来处理每个消息. 程序启动的时候,会读取所有类名,并字典保 ...

  5. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  6. Beautiful Soup 4.2.0 文档

    Beautiful Soup 4.2.0 文档 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方 ...

  7. 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` ...

  8. css2.0文档查阅及字体样式

    css2.0文档查阅下载     网址:http://soft.hao123.com/soft/appid/9517.html <html xmlns="http://www.w3.o ...

  9. Django2.0文档

    第四章 模板 1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% e ...

随机推荐

  1. NOIP2010-普及组复赛-第一题-数字统计

    题目描述 Description 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 ...

  2. Openjudge-计算概论(A)-求平均年龄

    描述: 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位. 输入第一行有一个整数n(1<= n <= 100),表示学生的人数.其后n行每行有1个 ...

  3. 比较全的 C# 操作 Word的代码

    using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word; ...

  4. Python笔记1-20151021

    一.字符串和字符编码 字符 ASCII Unicode UTF-8 A 01000001 00000000 01000001 01000001 中 x 01001110 00101101 111001 ...

  5. mysql5.6 online ddl—索引

    尝试对mysiam表(1500万)删除索引失败 #uk表字段类型比较简单,都是int/tinyint/timestamp类型. CREATE TABLE `uk` (  `id` int(11) NO ...

  6. Neutron网络性能测试与分析(一) CVR

    测试环境:网络节点运行在Intel(R) Xeon(R) CPU E5-2630 v3服务器上,网卡使用intel的万兆卡82599ES 测试仪使用本人基于dpdk编写的程序,基本上可以打满万兆卡,小 ...

  7. sqlserver 按日、周、月统计方法

    摘自于网络网络:http://blog.csdn.net/wanmdb/article/details/8080636 create table T(日期时间 datetime, 数量 int) in ...

  8. android通过代码判断手机是否root

    只要/system/bin/su./system/xbin/su这两个文件中有一个存在,就表明已经具有ROOT权限,如果两个都不存在,则不具有ROOT权限. // 判断是否具有ROOT权限 publi ...

  9. <context:annotation-config> 和 <context:component-scan>的区别

    转自:GOOD spring <context:annotation-config> 跟 <context:component-scan>诠释及区别 <context:a ...

  10. Java中String转换Double类型 Java小数点后留两位

    Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.to ...