游戏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研发工作.目前 ...
随机推荐
- 怎样简单编写一个html网页
# 转载请留言联系 一个HTML的基本结构如下: <!DOCTYPE html> <html lang="en"> <head> <met ...
- vue学习记录:vue引入,validator验证,数据信息,vuex数据共享
最近在学习vue,关于学习过程中所遇到的问题进行记录,包含vue引入,validator验证,数据信息,vuex数据共享,传值问题记录 1.vue 引入vue vue的大致形式如下: <temp ...
- Qt笔记——Event
#ifndef MYBUTTON_H #define MYBUTTON_H #include <QPushButton> class MyButton : public QPushButt ...
- [BZOJ1564][NOI2009]二叉查找树 树形dp 区间dp
1564: [NOI2009]二叉查找树 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 879 Solved: 612[Submit][Status] ...
- 关于android studio3.0版本后引入资源问题error: failed linking file resources
最近更新阿里短视频的SDK,导入demo项目时,发现两个问题: 1.频繁报错AAPT2 error: file not found.以为直接Sync重新编译就可以,但是仍旧频繁提醒引入资源错误. 查找 ...
- 如何破解Webstorm 2016.2
嗯,随着Webstorm2016.2的推出,网上的很多破解方法已经不能用了,不过功夫不负有心人,我终于查到了新的方法, 选择“license server” 输入:http://114.215.133 ...
- 使用Xshell上传下载文件
很多时候我们需要在Windows跟Linux之间,或者Linux跟Linux之间传文件,这里我们讲的是使用Xshell实现文件上传下载. 一.使用rz,sz实现Windows,linux上传下载 1. ...
- 洛谷——P3152 正整数序列
P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...
- MySQL 一张表中两个字段值互换
update table a, table b set a.filed1= b.field2, a.field2= b.field1where a.id = b.id
- oracle enable / disable all constraint
beginfor i in (select constraint_name, table_name from user_constraints where table_name='') LOOPexe ...