游戏AI的综合设计
原地址:http://www.cnblogs.com/cocoaleaves/archive/2009/03/23/1419346.html
学校的MSTC要出杂志,第一期做游戏专题,我写了一下AI,发在“技术入门”栏目。对AI做这样整体设计的内容网上不多见,还请各位高手多多指正~
游戏AI的综合设计
AI (Artificial Intelligence)作为游戏的重要组成部分,对游戏的可玩性起到越来越大的作用。玩家早已不满足傻瓜似的敌人和NPC,渴望见到能像人一样思考的虚拟人物。本文首先介绍游戏常见的人工智能技术,然后综合利用各种技术设计一个较为通用的AI引擎。
有限状态机(FSM):有限状态机是游戏中最常用的人工智能技术,其他技术基本都需要有限状态机的支持。有限状态机把单位的行为抽象成若干种状态,在一定的条件下状态之间可以相互转换。例如,敌人开始处于巡逻状态,当玩家靠近时,转换成追击状态,当玩家远离后,又恢复巡逻。单位的AI可以用一张状态图表示。
模糊逻辑(Fuzzy Logic):模糊逻辑是布尔逻辑的扩展。布尔逻辑中“是”和“否”是绝对的,而模糊逻辑中会有“有点是”、“不怎么是”、“非常是”的区别。例如上例,玩家靠近巡逻状态的敌人,这种靠近就是一种模糊的概念。使用了模糊逻辑后,有时敌人认为距离3米就算靠近了,有时认为距离2米才算靠近。
模糊状态机(FuSM):结合模糊逻辑和有限状态机,就产生了模糊状态机。模糊状态机中,单位不是绝对的处于某种状态,而是同时处于几种状态,只是每种状态的比重不同。
智能地形(Smart Terrain):智能地形是给地形赋予特殊的信息,从而用于AI寻路、伏击等战术。CS中的路径点(Way Point)就是一种智能地形。相似的还有智能物品等。
A*寻路算法(A Star Path Finding):A*算法被证明是最高效的寻路算法,在寻路中被广泛应用。A*算法是对迪杰斯特拉算法的改进,详细资料网上有很多。
脚本系统(Script System):脚本系统应该是游戏引擎的组成部分,但也可以算作AI的一种技术。例如DOTA使用的是WarCraft的引擎,地图编辑者使用地图编辑器为DOTA中的各个英雄编写不同的JASS脚本,英雄们才有了一定的AI。目前最流行的脚本语言是Lua脚本,WOW就是使用Lua做脚本语言。
遗传算法(Genetic Algorithm)与神经网络(Neural Network):这二者属于较为高级的AI技术,都具有机器学习,进化的性质。但是,实际游戏中应用的并不多,因为游戏中的单位通常不能接收足够的学习,学习的结果也不好控制,容易出现意想不到的情况。
游戏中的AI引擎就是要综合利用上述技术,并且要与渲染、物理模拟等引擎部件配合。首先我们了解一下人类大脑的结构:
人脑 |
作用 |
脑干 |
呼吸、血液循环等生命中枢 |
小脑 |
平衡 |
运动区 |
动作 |
感觉、视觉、听觉、嗅觉区 |
各种感受 |
额叶 |
高层大脑功能 |
颞叶 |
记忆 |
模拟人脑结构,设计我们的AI引擎结构:
AI |
作用 |
技术 |
物理模拟 |
碰撞检测、碰撞反应 |
物理引擎完成 |
导航 |
寻路 |
A*算法、路径点 |
动画渲染 |
渲染 |
有限状态机、渲染引擎完成 |
感知器 |
感知 |
脚本系统、智能地形、智能物品 |
决策器 |
决策 |
脚本系统、有限状态机、模糊逻辑 |
记忆器 |
学习 |
神经网络、遗传算法、脚本系统 |
各部分可以用消息系统连接起来,并且对外公开接口API,下面是整体结构图:
下面解释该系统的工作原理:
l 物理部分由物理引擎完成,包括碰撞检测、碰撞反应,保存着物体坐标等物理信息。某些碰撞信息要通知感知系统,也就是该单位的触觉。
l 感知系统在不同单位中差别很大。例如最简单的敌人可以没有任何感觉。稍复杂的敌人可以拥有视觉,即可以发现其前方的玩家,这时玩家可以绕的敌人身后偷袭。更复杂的敌人可以拥有听觉,即玩家在身后偷袭时如果打碎了物品也会被敌人发现。魔兽争霸中的单位可以感知附近的敌人,发现敌人进入了一定区域就会自动去攻击。感知系统可以直接决定单位行为,类似与条件反射,例如“受到伤害”的感觉会让单位逃避伤害,哪怕这个单位没有高级决策能力。
l 决策系统是单位的高级AI,单位可以综合感知系统提供的各种信息和其他单位对其下达的命令做出判断。命令可以是玩家的输入,也可以是团队指挥者(也是一个AI单位)下达的。例如DOTA中一个AI英雄通过综合衡量自身的生命、攻击力、对方生命后,决定和对方PK。决策系统可以使用有限状态机、神经网络等技术。同时也可以让单位拥有学习功能,但平衡的学习功能实现起来比较困难。
l 决策系统直接知道单位的行为,是攻击、移动,还是跳跃。单位行为可以由有限状态机管理。另外,较为复杂的游戏地图里,决策系统有时需要导航系统把“前往某处”分解成“先到哪,后到哪”,再控制单位的行为。
至此,整个AI引擎已经比较完善了,在各种类型的游戏中也比较通用。可以把AI的整体框架放到游戏物体基类(GameObject类)中,各派生类继承并重写关键方法,从而表现出不同的智能。
游戏AI的综合设计的更多相关文章
- 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由wataloo发表在专栏wataloo的试验田 1 设计概要 1.1 设计原则和目的 英雄AI的目的主要有: 1.新手过渡局,让玩家刚 ...
- 趣说游戏AI开发:对状态机的褒扬和批判
0x00 前言 因为临近年关工作繁忙,已经有一段时间没有更新博客了.到了元旦终于有时间来写点东西,既是积累也是分享.如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题--游戏AI.设计游戏AI的 ...
- 使用行为树(Behavior Tree)实现游戏AI
——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...
- 如何建立一个完整的游戏AI
http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...
- 游戏AI之初步介绍(0)
目录 游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI <求生之路>系列 角色扮演/沙盒游戏中的NPC 游戏AI 需要学些什么? ...
- 游戏AI之决策结构—有限状态机/行为树(2)
目录 有限状态机 行为树 控制节点 条件节点 行为节点 装饰节点 总结 额外/细节/优化 游戏AI的决策部分是比较重要的部分,游戏程序的老前辈们留下了两种经过考验的用于AI决策的结构: 有限状态机 行 ...
- 做游戏长知识------基于行为树与状态机的游戏AI(一)
孙广东 2014.6.30 AI. 我们的第一印象可能是机器人,如今主要说在游戏中的应用. 现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完毕的.比方在RPG游戏中 ...
- Unity教程之-基于行为树与状态机的游戏AI
AI.我们的第一印象可能是机器人,现在主要说在游戏中的应用.关于AI的相关文章我们在前面也提到过,详细请戳这现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完成的.比 ...
- 王亮:游戏AI探索之旅——从alphago到moba游戏
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:王亮,腾讯AI高级研究员.2013年加入腾讯,从事大数据预测以及游戏AI研发工作.目前 ...
随机推荐
- .tar与.gz有什么联系与区别?
我们在windows下经常进行压缩解压等操作.在linux上也经常会用到,但是比较常见的是.tar.gz 很多人见到就条件反射,压缩用czvf,解压用xzvf.但是,你真的了解这个后缀名吗? 其实: ...
- hdu 5171(矩阵快速幂,递推)
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- 关于MYSQL表记录字段换行符回车符处理
http://hualong.iteye.com/blog/1933023 今天遇到一个非常奇葩的问题,数据库表中明明有值却查询不不出来,而然一次从单元格中复制到sql中,发现右侧单引号换行了,我初步 ...
- C#异步编程模式IAsyncResult
IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 B ...
- 潜伏者(noip09年t1)解题报告 C++
题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...
- c++基础学习之string
//学习使用string类 2013-10-18 lingc #include <iostream> #include <string>//include this head ...
- jmeter bean shell断言加密的响应信息
断言加密的响应信息 1.在http请求-->添加-->断言-->bean shell 断言 import com.changfu.EncryptAndDecryptInterface ...
- HTTP状态代码集
所有 HTTP 状态代码及其定义. 代码 指示 2xx 成功 200 正常:请求已完成. 201 正常:紧接 POST 命令. 202 正常:已接受用于处 ...
- POJ 2348 Euclid's Game(博弈论)
[题目链接] http://poj.org/problem?id=2348 [题目大意] 给出两个数,两个参赛者轮流用一个数减去另一个数的倍数,当一个数为0的时候游戏获胜, 求先手是否必胜 [题解] ...
- 【递推】【卡特兰数】CODEVS 3134 Circle
新GET了一种卡特兰数的应用…… 在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次.在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法. 不会证 ...