行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx

上传人:b****6 文档编号:19111962 上传时间:2023-01-03 格式:DOCX 页数:24 大小:506.89KB
下载 相关 举报
行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx_第1页
第1页 / 共24页
行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx_第2页
第2页 / 共24页
行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx_第3页
第3页 / 共24页
行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx_第4页
第4页 / 共24页
行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx

《行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

行为树与状态机在游戏NPC行为设计中的应用Word文件下载.docx

1.2研究意义

通过研究怪物的智能攻击与躲避,更深层的了解到游戏中关于怪物的智能攻击。

随着科技技术的发展,作为计算机科学的一个分支,人工智能渗透到了各个领域,像图像识别技术,智能机器人,语言翻译器等等。

在游戏中,人工智能技术能够使虚拟世界变得更加现实。

本文介绍使用Unity3D引擎开发一款Android平台的横板闯关教育游戏,以此来体现Unity3D开发游戏简便,同时展现教育游戏的魅力以及人工智能技术的强大。

第二章项目概述

2.1开发工具

2.1.1Unity3D简介

此次游戏开发主要是在Unity3D引擎上开发,它不仅仅是一款优秀的3D引擎开发软件,在2D上的表现也十分出众,它的优点有:

多平台发布,适用于C#、JavaScript、Boo等主流的脚本语言,编辑后立即运行,还能在运行过程中时实编辑,查看效果等等。

2.1.2VisualStudio简介

VisualStudio2013是由微软公司推出的开发环境,是目前最流行的Window平台

应用程序开发环境。

选择VisualStudio2013的原因是因为课程的关系对其有一定程度的熟悉,而且,MicrosoftVisualStudio2013开发环境不仅支持C#语言,对于C++、VB多种语言均能够支持,其目标代码适用于微软支持的所有平台,它的优点有:

灵活性、高效性、简易性

在此设计中利用其开发Unity游戏相关的C#脚本。

2.2.开发环境

开发环境主要是Windows10,此系统是能够使用VisualStudio的必要环境,加

上Unity3D也可以运行在此系统上,所以本游戏选择在此系统上进行开发。

第三章游戏程序设计

3.1游戏玩法介绍

本游戏设计的受众群体主要是初高中生,是一款教育类型的横版过关游戏,其核心玩法是通过按键控制主角亲嘴龙进行角色移动,通过闯关的方式拯救被科学家们藏匿起来的恐龙蛋,每次通关可以获得新的角色。

通关背景为实验室内,科学家会放射化学药剂,让角色受阻。

每一关关卡里面都设有解密门,通过解密门的方式来凸显游戏的教育意义,玩家九可以进入解密门进行解密游戏,通过博士日志去调配对付科学家发射的化学药剂,这样玩家就不用在冒险的过程中躲避手持化学武器的科学家,并且在游戏的过程中可以学习,巩固到一些化学知识。

3.2游戏功能介绍

3.2.1游戏功能结构

由于本游戏设计的最初立项是制作一款新颖的教育游戏,游戏特色是为了突出解密门关卡内的化学实验,因此没有揉入过多的其他系统,玩家通过初始角色进入关卡,通过设计障碍,触发解密门进行实验,获得道具增加战力攻击,最终打败BOSS获得新角色。

最主要的功能结构如下图所示:

图3-1游戏功能结构图

3.2.2游戏流程图

图3-2主要是用流程图说明了游戏的一个整体的流程,该图是对游戏整个玩法流程的详细介绍。

图3-

2游戏流程图

3.3游戏主菜单设计

游戏主菜单主要包含了道具选择、关卡选择、角色选择以及音乐设置四个功能。

UIManager作为游戏的界面管理类,负责管理道具面板、选择关卡面板、角色选择面板、设置面板等菜单下的UI的显示,通过UIManager激活关闭面板实现界面的切换,并实现面板之间的切换特效。

图3-3主菜单类图

下面分别从四个功能界面阐述:

1)角色选择

因为游戏通关会获得新的角色,玩家拥有多个角色后,可以自主选择所需角色,因此在主菜单界面加了角色选择的功能。

UICharacterRoulette组件脚本,负责管理角色选择轮盘。

包含轮盘自动转动,拖拽检测,拖拽状态下的旋转角度控制。

玩家可以滑动右下角的轮盘进行角色选择。

UICharacterBtn角色选择按钮脚本,包含角色sprite与角色介绍文字属性。

负责处理点击选择或取消的功能。

2)关卡选择

LevelManager关卡选择脚本。

包含关卡选择,关卡跳转功能。

3)道具选择

道具选择界面主要是为了展示主角在关卡解密门实验中获得的道具,在获得多个道具的情况下,玩家可以在主菜单的选择道具界面自主选择所需道具。

该界面主要包含道具的展示以及文字使用说明,在PropShow包含道具选择功能,切换道具图片与简介内容。

UIPropBtn负责管理道具选择按钮显示状态:

是否获取,是否选择。

4)设置面板

MusicController负责调节背景音乐与音效声音大小。

包含设置,播放,切换,停止bgm及播放音效等功能。

3.4游戏关卡设计

GameManager脚本中主要负责关卡及地图障碍的设计,在Awake函数中,对摄像机、主角、主角血条、Slider血条、关卡BGM的属性进行初始化。

作为横版闯关游戏,“D-Dragon”设计了PC端与移动端双平台的实现,而在PC端移动、跳跃、攻击按钮不能够很好地实现同时操作,因此设置了以按键代替按钮的方式进行游戏,在CloseHelp中识别windows平台显示help界面及包含help界面关闭功能,在界面中有按钮操作说明。

在GameManager中还涵盖了更新显示角色血条、伤害显示、关闭BOSS关卡提示

游戏的暂停、返回、重开以及战斗失败,战斗胜利的UI显示及功能的实现。

3.5游戏地图设计

1)玻璃棒障碍设计

GlassRod监听角色子弹碰撞事件,触发RigidbodyType2D.Dynamic破碎显示,使得玩家能够发射炮弹击碎玻璃棒从而进入高台。

2)碰触蜘蛛扣血

主角行径过程中会有部分障碍,其中,如果通过跳跃误触蜘蛛网,会对主角造成一定高伤害,设置蜘蛛预制体tag为spider角色碰撞,受到伤害。

3)蜘蛛网设计

主角需要通过攀爬蜘蛛网的方式进入高台,设置蜘蛛预制体tag为spiderweb角色碰撞它,关闭重力:

rigibody2d.gravityscale=0,减缓角色速度,达到攀爬的效果。

4)弹簧设计

Spring识别碰撞对象为player时,角色执行弹簧跳跃方法,进入高台。

5)毒气喷发

除了误触的伤害,游戏中还设置了毒气的周期性喷发,被毒气喷到后会对玩家造成一定伤害,Gas负责循环周期性喷射毒气:

激活关门毒气伤害碰撞体以及放毒气动画。

6)电梯设计

Lift包含监听识别角色tag,并在角色进入电梯的状态下,触发携带角色上升的功能,从而实现电梯的效果。

3.6解密门内设计

玩家通过触发显微镜进入解密门,解密门内的功能设计主要包含了道具的拖拽移动、定位以及实验结果的次数判断与成败判断。

Door负责管理门内场景实验功能,CheckBtnClick包含判定实验成败、判断实验次数、剩余次数。

OpenHelp自动显示实验帮助UI,让玩家阅读制作道具规则;

CloseHelp关闭帮助UI显示。

OnTriggerEnter2D负责控制进入,退出门内实验。

DoorItem控制实验道具的拖拽移动,位置重定,定位判断与设置功能。

DoorPos实体类,定义道具位置,包含门位置及道具标签属性。

3.7主角设计

主角Player通过状态机管理角色状态切换与表现

1)移动:

MoveLeft()MoveRight()方法通过改变 

transform.rotation与 

transform.Translate(driction)实现角色的左右移动

2)攻击:

BulletFactory管理生成攻击子弹

attack遍历子弹预制

bullet控制管理子弹的运动与触发伤害逻辑

3)跳跃:

Jumpup通过给刚体添加力实现rigi.velocity+=Vector2.up*jumpForce。

并播跳跃动画。

下落Falldown.播放下落动画。

除了主角的移动与跳跃,游戏中有关障碍物主角的状态切换也很重要,EnterSpiderWeb、ExitSpiderWeb进入退出蜘蛛网功能。

改变角色移动速度;

GetHurt执行受伤闪烁动画以及伤害值的显示;

Attack包含主角的技能攻击(普攻和化学试剂攻击之间的判断转换)。

3.8BOSS设计

Boss脚本控制boss状态与行为逻辑,BossRoom中,监控角色进入boss房间区域。

激活Boss进入战斗状态。

并调用“进入Boss房间”的UI提示。

通用方法GetHurt,hp为减伤害值。

当hp为0时,调用dead方法,播放Boss死亡动画,并且调用游戏GameManager胜利方法,此时通关成功,游戏结束。

StopMove停止移动。

BossWepon控制boss投掷品药剂的运动与触发逻辑。

判断触碰角色,触发角色受伤效果。

并执行自身效果方法。

BOSS状态如下:

1)idle:

进入设定idle持续事件。

时间到切换乘移动状态。

2)move:

AiMove根据角色方向与场景执行MoveLeftMoveRight进行向左或向右移动。

并播放移动动画。

3)jump:

Jump播放跳跃动画,并设置idletime为零。

执行JumpUp,boss刚体组件添加向上的力 

 

rigi.velocity+=Vector2.up*jumpForce,实现BOSS的跳跃动作,用于躲避主角的攻击。

4)fall:

Fall播放下落动画并延迟执行IsJumpOver;

IsJumpOver播放idle动画并取消执行IsJumpOver。

5)attack:

Attack播放攻击动画并停止移动。

执行shoot方法。

AttackOver设定动画属性attck为fales。

并设定状态为idle。

第四章行为树与状态机的应用

4.1行为树

行为树(BehaviorTree),顾名思义,由根、分支、叶节点组成,具有不同特性的节点,由这些节点,便可以构成一颗树。

就以“D-Dragon”游戏中NPC的智能AI,我们可以大致描绘出以下行为树:

图4-1NPC行为树图

行为树(BehaviorTree)最早是由Dromey于2001年提出的对应在相关的系统应用程序的概念。

它以图形的形式展现了AI系统的结构,充分的描述了任务之间的转移。

行为树具有强大的建模能力,它可以将复杂的任务用简单的任务来构造创建,并且不用考虑其具体的执行过程。

通过查阅资料,我了解到,构成行为树的基础节点主要有以下四个:

1)顺序节点(Sequence):

按顺序执行子节点,只要顺序执行子节点返回false,则返回false,否则返回true,属于组合节点,该逻辑类似于程序逻辑中的“与”。

2)选择节点(Selector):

顺序执行子节点,只要碰到一个子节点返回true,则返回true,否则返回false,同顺序节点属于组合节点,该逻辑类似于程序逻辑中的“或”。

3)条件节点(Condition):

用游戏NPC状态中的常规攻击来举例,必须符合视野内发现目标以及目标是玩家的条件,才可以执行普通攻击,属于叶子节点。

4)执行节点(Action):

同条件节点,属于叶子节点,执行动作,一般返回值为true。

通过行为树的方式,我们能够很好地按照列出的节点不停的遍历,实现游戏的智能AI。

当然,我们必须明确前提条件,因为前提条件决定了改节点是否被行为树的遍历选择。

在我们游戏中,叶子结点是NPC的基础行为,记录NPC当前的状态,如NPC正在执行攻击或原地休息待机,而中间节点一旦被选择,则会使对应的基本行为被激活,如巡逻、召唤同伴及逃跑,而当行为节点如果执行失败的话,会导致中间节点去选择另外的行为节点。

由此可以看出,行为树具有严格的执行逻辑,因此行为树的绘制十分依赖于前提条件的逻辑正确性。

如果从编程实现的角度来看,可以为行为树总结一下优点:

灵活性:

行为树由许多节点构成,但这并不影响各个节点的修改与编辑,不需要改变复杂的连线,可以随意的添加删除节点,不必考虑状态切换的操作,具有强的的灵活性。

重用性:

行为树的节点编写好后可以反复的进行利用,由于分离了状态数据,可以随意改变逻辑,不影响节点的使用,因此,可以通过修改不同的逻辑内容来实现不同的AI而不需要改变节点的结构。

延展性:

行为树呈线性的方式延展,可以任意添加中间节点新增一种状态而不影响其他节点的遍历,易于延展。

清晰性:

对于简单的AI逻辑,我们能够很好的整理出状态之间的切换,而当我们面对复杂的智能AI实现的时候,我们并不能够快速的清晰地判断状态之间的关系,而行为树很好地为我们解决了这一问题,它不需要我们判断状态的切换,使我们的逻辑思维更加清晰。

4.2状态机

有限状态机(FiniteStateMachine),简称为状态机,是由多个状态构成的且状态之间相互转换的数学模型,状态机可以说基本存在于计算机的各个软件之中,而什么是状态机呢?

虽然这个名词看上去非常抽象,但在我们游戏编程中,许多地方都运用到了状态机,那么,我们怎么判断是否使用了状态机呢?

可以简单地理解为:

判断处理的对象是否需要处理2个事件以上的功能,例如:

判断游戏中的怪物NPC行为,他可以做到巡逻、攻击、召唤、躲避,因此,他就可以利用状态机进行程序编写,精确地描述对象的行为。

状态图(StateDiagram)用于描述状态机,状态图由状态与迁移构成,即为一个状态过渡到另一个状态的控制流,还是以游戏中怪物NPC为例,绘制了如图4-2的怪物NPC状态迁移图。

图4-2NPC状态迁移图

使用有限状态机编写智能AI可以说是人工智能编程的基本操作,即使在电子游戏产业迅猛发展的情况下智能体结构的不断普及,有限状态机仍然能够保持,这无疑归功于有限状态机的以下优点:

1)简快性:

状态间的关系能够直观的看到,易于调试。

2)编程快:

理清状态迁移图后,能够根据状态迁移图对智能AI进行快速的程序编写。

3)性能高:

与人类思维相似从而便于梳理,灵活且容易修改。

4.3怪物NPC的智能战斗

通过对行为树与状态机的相关知识的学习,我了解到了智能AI的实现并不像我想象之中那么遥不可及的。

因此,针对“D-Dragon”游戏开发,我将在科学家(NPC)上设计怪物的智能AI,通过对怪物之间的状态切换以及知识的研究,我将实现NPC的智能巡逻、休息、攻击、召唤同类、逃跑以及狂暴表现,由于地图及NPC属性的限制,NPC能表现的形态有所限制,因此我决定采用状态机来实现NPC的智能战斗:

召唤方法:

召唤呼唤距离内的科学家进入战斗状态,并将他们的战斗距离调大,直到进入攻击范围,讲战斗状态复原;

攻击方法:

遍历生成攻击药剂;

受伤方法:

监控判断碰撞触发角色子弹Tag攻击,执行受伤扣除伤害值血量,播放受伤动画;

死亡方法:

当血量低于零时,调用死亡方法。

播放死亡动画,并destory销毁自身;

转向方法:

移动过程走到场景平台尽头,或碰到障碍物执行转向;

当前状态

条件

状态转换

巡逻

发现目标(第一次)

普攻

发现目标(非第一次)

狂暴攻击

目标脱离范围

400<

血量<

500

召唤

400

逃跑

血量=0

死亡

附近NPC前往支援

脱离玩家视野

表4-1状态变更表

ScienceAI是科学家Ai脚本利用状态机框架实现状态切换与表现:

巡逻状态:

持续update:

判断角色是否进入攻击范围,若是进入战斗状态。

血量不满的情况下持续回血。

休息状态:

继承巡逻状态,与徘徊状态交互切换

1)进入状态事件:

随机一个状态时间值,修改角色动画为idle;

2)持续update:

判断时间值是否小于零,若是切换到徘徊状态。

徘徊状态:

继承巡逻状态,与休息状态交互切换

随机一个状态时间值,修改角色动画为run;

判断时间值是否小于零,若是切换到休息状态。

战斗状态:

角进入攻击范围,冷却事件内进行攻击。

普通战斗状态:

继承战斗状态

进入状态事件:

设置之角色攻击值为普通战斗状态攻击区间。

狂暴战斗状态:

设置之角色攻击值为狂暴战斗状态攻击区间。

帮忙状态:

中间过渡状态

判断周边是否有其他伙伴,若有执行召唤方法,进入巡逻状态。

逃跑状态:

进入状态事件,移动速度*2,持续update:

往角色相反方向逃离。

退出状态事件:

移动速度乘0.5.,逃跑过bool值为true。

第五章游戏测试与运行

5.1测试意义与目标

测试是任何游戏制作过程中必须进行的一项工作。

通过测试,可以发现游戏编程中的许多设计上不理想的地方,包括数值的设置,技能的体验情况,还有许多BUG的发现,都要通过后期的测试来修改、优化,同时,我们通过后期的测试,可以避免一些重大的问题,这些问题可能会影响玩家的用户体验,严重的可能会导致用户流失。

因此,对于游戏开发的后期,测试是很必要的一个阶段,我们需要通过对游戏的多方面测试,才能够使其更加完善,才能够达到游戏上线的标准,提高用户体验。

针对“D-Dragon”游戏项目开发,我将从以下方面对游戏进行测试:

1)测试游戏是否能够实现移动端与PC端的正常运行

2)测试游戏中的每个功能是否正常运行

3)游戏游戏数值的设置是否合理

4)NPC的状态切换是否正确合理

5)内存消耗是否合理

5.2.测试过程

5.2.1测试环境

测试平台:

Android平台、Windows平台

设备环境:

win10系统以及魅蓝Note3、小米8、OPPOR11、荣耀V20等

5.2.2测试主要内容以及结果

1)测试游戏是否能够实现移动端与PC端的正常运行,需要导出PC包以及安卓包在电脑端与手机端分别测试,主要看游戏是否能够正常运行。

测试结果:

导出的包均能在多个测试机上正常打开,运行。

2)测试游戏中的每个功能是否正常运行,主要通过检查主菜单物品、技能等管理类的读取是否正确,验证数据读取是否成功。

跑完整个游戏,发现制作道具成功后并没有增大主角的攻击值,通过后期的修改,解决了这一问题,并且增加了NPC的伤害值显示,可以更直观的看出制作道具前后伤害值的变化。

3)游戏游戏数值的设置是否合理,游戏前期设置的各项数值是在没有实践基础的情况下抽象设计的,需要后期的测试对数值进行调整。

通过体验导出的安卓包,发现前期主角设置的血量过低、狂暴状态的数值设定过高的情况,并对问题一一进行了调整。

4)NPC的状态切换是否正确合理,主要通过控制主角观察NPC的状态切换。

通过体验导出的安卓包,发现NPC攻击范围设置过短导致状态脱离、巡逻速度与攻击的移动速度没有做区分导致状态切换不明显的情况,并对问题一一进行了调整。

5)内存消耗是否合理,通过对FPS帧数检测以及CPU占用率,判断

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1