参考书籍《Unity3D人工智能编程精粹》《Unity3D人工智能编程》
游戏AI的架构模型
  • 运动层:AI的具体行为,比如移动
  • 决策层:决定AI下一时间步该做什么
  • 战略层:从集体层面对个体AI进行控制
除此之外,还要结合动画系统,物理引擎,感知系统等,共同组成人工智能
个体AI
  1. Seek 是最常见的AI行为,最简单的实现是给AI添加一个修正力使之向目标移动
  2. Flee 和Seek相反,通常我们都要设置一个Distance范围判断结束行为。用Vector3.sqrMagnitude向量平方长度,计算会更快
  3. Arrival 到达目标减速至停止,可设置一个StopDistance,距离大于停止距离时给一个Force移向目标
  4. Pursuit 追逐会预测Target的未来位置,比如预测t时间内Target不会转向,AI将计算未来位置朝之移动。另外还可以用点乘计算夹角,判断双方是不是面对面
  5. Evade 逃避。与Pursuit反向
  6. Wander 随机徘徊。设置一个圆周半径,每帧给Target附加随机位移,比AI只按照预设好的路线移动更加真实
  7. FollowPath 路径跟随。设置radius路点半经,让AI在路径间切换更加真实
  8. CollisionAvoidance 避开障碍。向前射线检测障碍物的包围圈,产生一个排斥力。
集体AI
组行为
  1. 分离:避免局部拥挤
  2. 队列:朝向附近同伴的平均朝向
  3. 聚集:向附近同伴的平均位置移动
Radar 检测附近的AI角色(数学/Trigger)
Separation 分离。 搜索领域内的其他邻居,计算两者间的向量并单位化,得到排斥力方向,排斥力大小与距离成反比
Alignment 队列。将AI的朝向纠正为和邻居一致,平均朝向减去当前朝向就是操控朝向
Cohesion 聚集。
集体AI往往需要一个集体状态机, 负责判断团队整体状态和动作
各个角色则需要完成动作的多层状态机设置,比如这层行动路线,下层具体行为,下层角度速度细节
AI Director导演系统控制整局游戏流程
更多实例暂略……
A*寻路
A* (A-Star)算法是一种静态路网中 求解最短路最有效的直接搜索方法,也是许多其他问题的常用启发式算法。注意——是最有效的直接搜索算法,之后涌现了很多预处理算法(如ALT,CH,HL等等),在线查询效率是A*算法的数千甚至上万倍。
欧几里得/欧拉距离: 多维空间两点间的距离,即直线距离
曼哈顿距离:估计到目标格子之间的水平和垂直方格的数量和,即不走斜路
地图,目标估计,代价,节点
导航图:将地图用图表示
1、基于单元的导航图
将地图划分为多边形单元组成的规则网格。易于动态更新,但时间空间消耗都大
2、创建可见点导航图
先手工放置一些路径点,然后若路径点之间可视,就能以边连接。可以设置一些特殊点,适合简单的寻路
3、创建导航网格NavMesh
将可行走区域划分为凸多边形。可以是多种多边形的组合,让网格划分更加合理
采用“视线确定”方法,向前跳到视线最远途经点,对路径进行后处理,得到更平滑的路径
效率高,空间小
以基于单元的导航图为例,执行A*算法
g(n):起始节点到当前节点n的代价
h(n):当前节点n到目标节点的估计代价
f(n)=g(n)+h(n)  从初始状态经由状态n到目标状态的代价估计
open表:待考察的结点的优先级队列,代价从低到高(可以不排序,只找最小值)
closed表:已考查的结点列表
第一步:取起始结点,将其8个邻接点加入Open,并将各邻接点的父节点设置为起始节点,起始点加入Close
第二步:计算open表中结点的代价f=g+h,计算规则是:
g:取父节点g值,根据n点和父节点的连接方式计算。如果是直角连接g++,对角连接g+=1.414
h:采用欧几里得距离/ 曼哈顿距离[不考虑障碍物]
根据f大小来确定open表中下一个要被检查的节点
第三步:取f最小结点,检查8个邻接点,障碍物点无视。
计算各邻接点通过当前结点得到的新g值,计算规则同上
新结点加入open表
已经在open表的,若新g值比原值大,不需更新。若小于原值,则更新g,f,父节点,而不用更新h
已经在closed表的,按上图文字处理
第四步:对于具有相等的最小代价值f的结点,可任选一个计算。
……
循环直到终点
其他
1.对于已经计算的(存在于open或closed表中)节点,无需再次计算,因为选择那些节点只会绕远
2.障碍物节点加入closed表,对于被open或closed表包围的节点,也加入closed表中
和Dijkstra算法的区别:
Dijkstra是BFS,不会去预估到终点的距离,因此在有多个权值相等的路径时会搜索很多不必要的结点。而且没有考虑障碍物
A*是按照启发函数,向着目标搜。很适合寻路
Dijkstra会求出所有点的最短路径, 得到理论上的最优解,而A*则只会找需要计算的点。结果是A*更快,但是不一定是最优解
Unity寻路
  1. AI使用NavMeshAgent组件
  2. 如果要配合物理引擎使用,则AI需要有kinematic的刚体,表示刚体由nav控制
  3. 和Animator配合使用的话,最好不要用root motion
  4. 将地面勾选Navigation Static,再打开Navigation视图,点击bake即可看到蓝色可达区域
Navigation Area 可以设置object为不同Area,会用不同颜色表示
可以在NavMeshAgent中修改其可以行走的Area
Off Mesh Link 添加跳跃点(手动路径)
默认的NaveMesh Agent组件上面是勾选了Auto Traverse Off Mesh Link(自动通过OffMeshLink)选项的。这样的意思是人物只要到了OffMeshLink的开始点,就会自动的移动到OffMeshLink的结束点。 
Navmesh Obstacle
enable时不可通行,false时可通行。此情况下物体不会暂停
寻路还有很多用法,这里就暂不详述了
AI感知事件
AI往往要感知视觉、听觉等信息来决策下一步的行为,其中又包括位置信息,对象属性信息,自身信息等
1、 轮询(主动查询信息)
轮询类似编程中的switch-case,是AI周期性地查询所需要的信息,轮询非常常见,容易维护,但有效信息率低,花费性能较多
轮询中心(没有必要每个AI都进行一遍查询,而是集中处理需要查询的信息)
2、 事件驱动(被动得知信息)
事件是一种高效的消息传递机制,由事件分发者主动通知每个感兴趣的AI,这样就使AI准时获得有效信息
可以做一个中心检测系统(事件管理器),记录每个AI感兴趣的事件,并通知他们,还方便了调试
3、 Trigger触发器
触发器其实和事件比较接近,相比之下,触发器是事件的本源,比如监听声音的声音触发器,检测观察物的视觉触发器,等待时间的时间触发器等等
Trigger 常用一个半径计算检测的范围,
Sensor 感知器则定义了枚举类型和变量,保存了事件管理器
视觉感知:圆锥形探测
听觉感知:衰减范围。而感知器也有对应的感知阈值
触觉感知:碰撞器
记忆感知:记忆List+Time留存时间
……
FSM有限状态机
finite-state machine 是表示有限个 状态 以及在这些状态之间的 转移和动作等行为的数学模型。
最简单的用enum+switch即可实现
在Unity中,我们可以用Animator或其他FSM框架实现可视化状态机
但是对于一些复杂的AI,用FSM图十分繁琐,效率低且容易出错,对一般的AI来说,FSM就足够了
BehaviorTree行为树
行为树是由行为节点组成的树状结构
对于FSM,每个节点表示一个状态,而对于BT,每个节点表示一个行为。
行为树层次清晰,易于模块化,封装性好,可重用,是一种效果理想的AI编辑器
在BT中,节点是有层次(Hierarchical)的,子节点由其父节点来控制。
每个节点的执行都有一个结果(成功Success,失败Failure或运行Running),该节点的执行结果都由其父节点来管理,从而决定接下来做什么,父节点的类型决定了不同的控制类型。
常见结点:Sequence, Selector,Parallel,Decorators
AI实例
AI包括设计和实现两部分
AI设计
首先要根据需求,设计关卡中合适的AI,是个体还是集体,有什么特点,可行性,并制作相应的资源
AI的基本逻辑:感知-行动-反应-学习
AI的基本能力
AI的基本属性
设计逻辑流程图/状态图
设计AI使用技能,就好比调用一个结点
2D横版AI
个体行动:待更新
集体战术:夹击,车轮,埋伏
3D平面AI
常见的技能行为有:追寻,连击,远程攻击,固定线路攻击,绕路,反向攻击,跳起等等
关于Unity-AI的更多技术,我将另外写篇博文

转载于:https://www.cnblogs.com/sols/p/8456727.html

【总结】游戏AI人工智能相关推荐

  1. 游戏ai人工智能_为什么游戏AI无法帮助AI在现实世界中发挥作用,但可以

    游戏ai人工智能 多人游戏被视为一个硕果累累的竞技场,在其中可以模拟许多现实世界中的AI应用程序场景(例如自动驾驶汽车,无人驾驶无人机和协作商务),这些场景可能过于昂贵,投机性或冒险性,无法在现实世界 ...

  2. 人工智能_游戏AI –行为树简介

    人工智能 游戏AI是一个非常广泛的主题,尽管有很多材料,但我找不到能以较慢,更易理解的速度缓慢引入这些概念的东西. 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统. 什么是AI ...

  3. 触手可及的人工智能,大师级游戏AI正在进化

    目前是人工智能技术发展最为蓬勃的时代,各行各业无数人都想给自己添上"AI加持"的标签.但说起当下人工智能真正肉眼可见的应用,很多时候又会进入到某些非常专业领域的圈子里. 不过,我们 ...

  4. (不定期更新)《人工智能AI资讯》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+人工智能+AlphaGo+神经网络+深度学习+机器学习+自动驾驶+图像识别+立钻哥哥+==)

    <人工智能AI资讯> 人工智能(Artificial Intelligence) 人工智能简称AI,是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. ...

  5. 神码ai人工智能写作机器人_游戏AI:机器人反击!

    神码ai人工智能写作机器人 以下是摘自Earle Castledine撰写的新书HTML5 Games:Ninja的新手 . 这本书的访问权限包含在SitePoint Premium会员资格中,或者您 ...

  6. 深度强化学习的人工智能在游戏中的运用:游戏AI入门及AI优化指南

    前言: 现如今,所有电子游戏都离不开AI的运用,对于游戏策划而言AI是什么,AI又是如何运作,可以说是面试时的加分项,本文在这里不探讨理论的AI(采用深度强化学习的智能AI,如腾讯AI Lab.网易伏 ...

  7. 《AI人工智能的未来》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+机器学习+人机交互+计算机视觉+生物特征识别+立钻哥哥+==)

    <AI人工智能的未来> <AI人工智能的未来> 版本 作者 参与者 完成日期 备注 YanlzAI_Future_V01_1.0 严立钻 2020.01.09 ##<AI ...

  8. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  9. 【转】【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    原文连接:http://www.cnblogs.com/dyllove98/archive/2012/04/07/2461865.html#commentform 我们常常听闻AI(Artificia ...

最新文章

  1. 自然语言处理在医学领域的应用
  2. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
  3. mysql linux 迁移mac_Mac和Linux之间传输数据,并导出mysql数据到本地
  4. iBase4J 分布式开发平台
  5. R语言-基于集波士顿住房
  6. oracle餐馆系统分析,现代饭店管理-试卷A
  7. 通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径
  8. 第三种最小生成树算法 Borůvka算法
  9. P2178 后缀数组 + 并查集
  10. 怎么学习CAD?初学CAD如何入门
  11. Element_Table的单元格合并
  12. torch学习 (二十四):卷积神经网络之GoogleNet
  13. 前端提效 - js 批量导出 excel 为zip压缩包
  14. Shannon Switching Game?
  15. tigase服务器推送消息,Tigase HTTP API 上一个 第8章。配置Tigase服务器以加载组件
  16. Chisel入门------Chisel的基本语法4
  17. jsp taglib指令_JSP Taglib指令
  18. Routeros封Vagaa教程(转)
  19. [JavaScript实例解析]简易TODO List
  20. 吐槽一下ubuntu麒麟

热门文章

  1. 华为海思AI芯片HI3516DV300上SSD代码的移植和优化
  2. 安卓仿美团开发实训课程
  3. 深度学习阅读导航 | 15 YOLOv4:最佳速度与精确度的目标检测器
  4. 南网elink文件保存位置_南网elink手机版下载-南方电网elink安装包app_5577安卓网
  5. matlab图像剖线,一种在等值线图上任意截取剖面的Matlab语言算法
  6. ftp被暴力破解小小经历!
  7. D-InSAR处理流程
  8. android解密联想,Android 版茄子快传漏洞
  9. C++ Primer Plus习题及答案-第十四章
  10. 可转债策略之---(摊饼玩法,溢价玩法,强赎玩法,下修玩法,双低玩法)