香港6合总彩透码主论坛
 找回密码
 注册帐号

扫一扫,访问微社区

枸杞忧天 从零点五开始用Unity做半个2D战棋小游戏(九)

3
回复
1448
查看
打印 上一主题 下一主题
[ 复制链接 ]
4四处流浪
301/500
排名
34887
昨日变化

17

主题

25

帖子

301

积分

Rank: 4

UID
73054
好友
3
蛮牛币
338
威望
0
注册时间
2015-2-4
在线时间
37 小时
最后登录
2019-5-1

专栏作家

马?#29486;?#20876;,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐?#29275;?a href="member.php?mod=register" title="注册帐号">注册帐号

x
好久不见。

这是第26篇与游戏开发有关的文章。


|  写在最前
这次想要做一个简单且传统的战棋小游戏,大概的玩法是:2D世界里创建一张由六边形地块组成的战?#36820;?#22270;,敌我双方在地图?#19979;?#27969;行动,并向对方发动攻击,先消灭掉所有敌人的一方将获得胜利。

预计将分为以下几篇(未完成前可能会调整...):

1、创建战场(已完成)
根据预定尺寸生成战场地图,并随机一些障碍物。

2、添加地图功能 (已完成)
实现战场格子点击反馈,地图导航及范围选定。

3、添加对战双方(已完成)
向战场中添加作战单位,作战单位轮流行动,可进行移动、攻击。

4、加入玩家控制(已完成)
玩家可控制一个战斗单位,手动选择移动目标及攻击单位。

5、添加常用的界面(已完成)
建立界面管理器,加入一些常用的界面。

6、添加常用的战场显示(已完成)
为战斗单位添?#21451;?#26465;,加入伤害文字特效。

7、扩展作战单位(已完成)
丰富战斗元素,加入并实现手动释放不同类型的技能。

8、加入AI系统(上)(已完成)
建立超级简单的AI系统。

9、加入AI系统(中)
调整AI系统的决策方式。

10、加入AI系统(下)
总结AI系统。

11、扩展战场地图
丰富战场地图,加入地形及道具等元素。

12、规范战斗配置
可以通过规范化的数据结构配置战场、职业、技能、道具等。

本次的主题是:调整AI系统的决策方式

项目使用的Unity版本为:Unity2018.3.0f2

代码会上传至我的Github:https://github.com/elsong823/HalfSLG 中,有兴趣的同学请自取。

|  目标  
上一篇所实现的AI系统,并不能带来什么特别的体验。因为每个AI的行为逻辑都是相同的。换句话说,这些被AI控制的战斗单位,没有自己的“个性”。

本篇将会对AI系统进行调整,重构AI决策逻辑,尝试使用数值配置来驱动AI的行为,以期使战斗变得更加有趣。

另外,本篇将会有大量的数据表、图,可能有些枯燥,希望您能耐心看下去,谢谢。

那就让我们开始吧。

| 思考的出发点
我是这么开始的。

首先,我对战场内出现的战斗单位,进行了角色(职业)划分,它们分别是:
1、坦克;
2、输出;
3、治疗。

好吧, 我猜你一定知道,这是最简单的铁三角组?#24076;?#36825;里就不解释这三种角色的战场定位了。
刘关张应该?#33756;?#26159;一种铁三角组合吧 (图源网络)

之所以做这样的设定,是为了可以从简单入手,对AI的行为进行分类。

|  行为分类
现在,结合?#40092;?#19977;种定位,试想一下我们自己在扮演这三种角色做决策时的样子。

我?#24378;?#20197;近似的将AI的行为分为以下几类:
1、制造仇恨(嘲讽);
2、制造伤害(输出);
3、恢复队友(恢复)。

其实,?#40092;?#19977;种行为,都可以理解为是主动采取的行为,也可以认为是一种理性的战斗策略

但是,生活中的决策都是理性的么?

显然不是。

否则就不会有双十一、双十二什么事儿了。
?#23610;?#33410; (图源网络)


|  愤怒机制
冲动是魔鬼,但冲动?#19981;?#35753;角色更有血肉。

所以,我添加了一个愤怒机制,来模拟这种情绪上的冲动。

试想一下你被招惹急了会做什么?气哭了?确实,有时候会这样。但是更多的时候,你会想?#35759;?#26041;胖揍一顿?#20013;?/strong>这?#22336;?#24594;。

因此,愤怒机制在系统中起到的作用就是强化伤害输出的决策。
愤怒与策略行为的关系


那么愤怒如何被积累呢?这里使用的设定是:?#24065;?#20010;单位受到攻击后,会增加愤怒值;同时,单位每回合行动后,会降低一些愤怒值。

|  差异性角色
综上所述,当我们在创造AI时,可以通过调整?#40092;?#19977;者策略的比例,来塑造出有差异性的角色。

比如:一个制造仇恨策略比例?#32454;?#30340;坦克,和一个造成伤害策略比例?#32454;?#30340;坦克,它们在一场战?#20998;?#30340;表现可能是:前者更愿意保护队友,而后者则更?#19981;?#36861;着对方揍。

那么哪种更好呢?

我觉得都很好,这就好比生物多样性,如果地球?#29616;?#26377;人类,那我们的生活该多么的枯燥乏味,甚至无法生存。

所以我们要保护生态环?#24120;?#29233;护我们共同的家园。
世界自?#25442;?#37329;会 (图源网络)

|  AI系统的设计
其实,这个AI系统的设计非常的简单,我们拆开来看。

◇ 战斗行为系统(BattleBehaviourSystem)
每一个参与战斗的单位,都有一个战斗行为系统。

战斗单位通过这个行为系统,来决定下一步的行动,比如朝哪移动、向谁发动攻击、或者恢复谁的生命值等。

但是战斗行为系统本身并没有什么计算能力,它只是组织了一个信息环境,真正处理信息、产生具有参?#23478;?#20041;信息的?#19968;錚?#26159;系统装配的战斗行为计算芯片

◇ 战斗行为计算芯片(BattleBehaviourChip)
如果你看过《机器猫》,也许还记得在有一集里他拿出了一个“能力磁带?#20445;?#21482;要把这个磁带插到身体里,你就会掌?#25214;?#31181;能力,比如秒变棒球手、摔跤手、哲学家等等。
陪伴成长的蓝胖子 (图源网络)

战斗行为计算芯片跟这个很像,如果一个行为系统装配?#22235;持中?#29255;;那么当这个单位需要决策下一步行动时,芯片就会结合系统所提供的信息环?#24120;?#20026;其列出所有可行的行为,并且为它们打分。

当然,一个行为系统可能同时装配多种不同种类的芯片。

◇ 行为对象(BehaviourItem)
行为对象就是芯片计算出的行为信息的载体,它记录了这个行为针对的具体目标,以及行为的类型(伤害、嘲讽、治疗)等。

◇ 行为调节器(Adjustor)
有时候我们需要微调行为对象中的得分。比如,我们得到?#26494;?#23475;芯片为我们计算出每个目标的得分,但是在做决策前,某个行为调节器忽然想提醒我们应该优?#26085;展?#19979;对方的治疗,那么它就会?#23454;?#35843;高对这个治疗的行为对象的得分,同时调低对其他角色的行为对象的得分。

当所有调节器工作完毕后,系统将会根据这些待决定的行为对象,制定决策对象。

◇ 决策对象(DecisionItem)
制定决策是一个计算具体方案的过程,比如移动到哪个格子,是待命还是使用哪个技能;而决策对象记录了这些计算的结果,战斗单位最终根据这个结果,来完成一次行动。

我?#24378;?#20197;通过下图更直观的了解行为系统的工作流程。
行为系统工作流

以上就是战斗行为系统的简单介绍,那接下来我们思考一个问题如何验证系统的有效性;或者,当我们调整了用于驱动行为的数值如何直观的看到反馈

|  对结果进行分析
事实上,我?#24378;?#20197;在每次调整完数值后,安排一些AI加入战场进行实?#39318;?#25112;。

通过观察他们在战?#20998;?#30340;表现;以及,分析每个单位在决策时输出的Log,可以在一定程度上达到检验系统有效性?#21738;?#30340;。
一个战斗单位行动前各行为的得分


但是,这并不是一个好的方法。因为调整数值只是修改了产生决策的范围;而AI在决策上的变化,是很难在一两次的战?#20998;校?#36890;过观察过程捕捉到的。

下面,我们?#32479;?#35797;通过对战?#26041;?#26524;进行数据分析,捕捉数值调整后的反馈信息,来验证系统的有效性。

首先介绍一下测试环?#24120;?#21019;建两只配置完全相同的?#28216;?Team_1和Team_2)。每队分别配备一名坦克,一名治疗及一名输出。

两只?#28216;?#30340;角色配置以及角色关键数值

角色所装配的技能


为了尽量抵消行动次序出生位置可能对结果带来的影响,我们采用每场交换优先行动权,以及全员、全地图随机初始位置的方式,进行500场自动战斗。

自动战斗的逻辑我们之前已经完成了,所以这个过程是很快的。
500场自动战斗计算

500场自动战斗后,双方的获胜情况

可以看出,在同样的?#28216;?#37197;置下,双方的胜率是很接近的。

接下来,我们调整一些AI的参数,尝?#38405;?#25311;一些特殊类型(个性)的战?#26041;?#33394;,看看战斗系统会给我们带来怎样的反馈。

◇ 靠谱的坦克
增加Team_1坦克的嘲讽策略比例,再次对战500场后,与调整前的战?#26041;?#26524;进行对?#21462;?br />
提高了嘲讽芯片的决策系数?#24613;?/font>

Team_1坦克使用技能的对比

输出伤害及承受伤害的对比

双方获胜情况对比

Team_1角色场均死亡次数对比
可以看出:
坦克使用伤害技能频次降低,使用仇恨技能频次增加,输出绝对?#23548;?#36755;出?#24613;?strong>减小


但这提高了?#28216;?#30340;整体胜率

原因可推测为,坦克更好的保护了输出及治疗,减少了他们受到攻击的机会及死亡次数,增加了他们输出伤害和治疗的时间,进而影响了整体胜率。

◇ ?#25112;?#32773;
为Team_1的近战Dps的伤害芯片增?#30001;?strong>手调节器,使其成为“?#25112;?#32773;?#20445;?#20182;(她)会优先考虑攻击濒死目标。再次对战500场后,与调整前的战?#26041;?#26524;进行对?#21462;?br />
输出伤害的对比

场均击杀数量的对比

双方获胜情况对比

可以看出:
由于属性?#36864;?#20351;用的技能都没有变化,所以?#25112;?#32773;的输出伤害变动很小;但是他的击杀数量明显增加(抢人头)。

尽管?#28216;?#32988;率增加了,但是队?#35759;己?#35752;厌他。

◇ 治疗压制
为Team_1的近战Dps所拥有的伤害芯片增加了职?#31561;?#37325;调节器,并设置为治疗压制模式。从此,他莫名其妙的对敌方的治疗产生?#22235;?#20197;言喻的奇妙情感,并一直重点?#23637;恕?br />
职?#31561;?#37325;调节器的设置

Team_2接受治疗对比

Team_2 治疗承受伤害的来源及击杀来源的对比

双方获胜情况对比

可以看出:
治疗被对方输出特殊?#23637;耍?#30452;接减少了她的治疗总量;而且由于自身不?#26174;?#21463;攻击,治疗把技能更多的用在了自己身上,无暇顾及其他队友,进而降低了整体胜率。

◇ 职?#24403;?#38230;
Team_2的坦克会优先保护己方治疗,只要看到她被揍,?#24067;?#23456;妻狂魔?#25945;濉?br />
Team_2胜场存活?#22987;?#21097;余血量对比

双方获胜情况对比

Team_2接受治疗情况对比

可以看出:
Team_2的治疗得到更多保护,产生的治疗量增加,胜场存活率提升,提高了整体战斗力。
《保镖》海报 (图源网络)

后来在一次线下聚会时,坦克发现这个“治疗妹子?#26412;?#28982;是个汉子...

◇ 职业杀手 vs 职?#24403;?#38230;
Team_1的近战Dps为治疗压制 + ?#25112;?#32773;,Team_2的坦克为治疗职?#24403;?#38230;。

结果…

你猜。


《王牌保镖》海报 (图源网络)

|  写在最后
?#38142;耍?/font>调整AI系统的决策方式就介绍到这了。

如你所见,本篇所展示的例子,都是单因素实验;而且角色类型、技能、数?#21040;?#26500;都非常简单。对比那些态度认真、具有复杂技能、数值等设计的游戏,可能不太具有说服力。

但本篇想要做的仅是对“用数值影响AI决策”的一种尝试,而且这种影响?#24378;?#20197;在后期的数据分析中得到反馈的,从这点上讲,目的已经达到了。

下一篇将会对AI系统的设计做一个简单的总结。

最后,需要指出的是,前面提到的《机器猫》,后来已经改名为《哆啦A梦》了。

愿不忘初心。

下回见。

非常?#34892;?#24744;能读到这里,详细的代码可以移步Github(https://github.com/elsong823/HalfSLG)下载。

C:/Users/CLjj/AppData/Local/YNote/data/[email protected]/f7c6817b5ac547998b35cde424396eb3/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190130000220.jpg




clipboard(17).png (23.24 KB, 下载次数: 55)

clipboard(17).png

clipboard(9).png (36.43 KB, 下载次数: 53)

clipboard(9).png
回复

使用道具 举报

4四处流浪
333/500
排名
10595
昨日变化

0

主题

41

帖子

333

积分

Rank: 4

UID
248720
好友
0
蛮牛币
335
威望
0
注册时间
2017-10-13
在线时间
192 小时
最后登录
2019-8-23
沙发
2019-4-16 15:06:47 只看该作者
up很厉害啊 期待demo完全体的时候
回复 支持 反对

使用道具 举报

排名
9870
昨日变化

0

主题

6

帖子

204

积分

Rank: 3Rank: 3Rank: 3

UID
250392
好友
0
蛮牛币
232
威望
0
注册时间
2017-10-23
在线时间
86 小时
最后登录
2019-6-30
板凳
2019-4-16 17:33:57 只看该作者
支?#31181;?#25345;
回复

使用道具 举报

排名
18792
昨日变化

4

主题

88

帖子

190

积分

Rank: 3Rank: 3Rank: 3

UID
227944
好友
0
蛮牛币
562
威望
0
注册时间
2017-6-21
在线时间
66 小时
最后登录
2019-8-20
地板
2019-4-19 11:55:32 只看该作者
6666666666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

香港6合总彩透码主论坛