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

扫一扫,访问微社区

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

18
回复
2003
查看
打印 上一主题 下一主题
[ 复制链接 ]
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
本帖最后由 elsong 于 2019-3-17 11:05 编辑

好久不见。

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

|  写在最前
这次想要一个简单且传统的战棋小游戏,大概的玩法是: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


需要提?#20843;得?#30340;是,建立简单的AI系统预计将拆分为三篇更新。

第一篇(本篇)通过加入一些简单的AI逻辑,保证战斗单位可以自动选择(伤害)技能、自动作战,进而顺利的完成一场战斗。

第二篇会进一步丰富AI的决策系统,让它的表现更具期待性,使战斗变得更加有趣。

此外,我邀请了我的好友Aillieo,拜?#20852;?#25353;照自己的方式也设计一个AI系统。

因此,?#19968;?#22312;第三篇介绍他所设计的AI系统,并对这三篇做一个整体的总结。



|  非常简单的AI系统
个人以为,有意思的AI系统可以简单的定义为:

让人觉得符?#19979;?#36753;,?#20174;?#22312;一定程度上超出了预期。

如何实现一个非常简单的AI系统呢?#35838;?#20102;让问题变得再简单些,我将AI的行为拆解成固定的三个步骤:
1、确定攻击目标;
2、向攻击目标移动;
3、使用技能。

|  确定攻击目标
将”合理“?#21738;?#26631;设定为攻击目标,是件并不太容易的事情。

这里我且不谈那些优秀的游戏是怎么做的,因为我也不知道。只说说我目?#20843;?#20351;用的方法:仇恨系统

AI使用仇恨列表确定攻击目标

每?#24065;?#20010;战斗单位在战场中被敌人攻击时,他就会偷偷的在自己的小本本里记下攻击者的名字,以?#20843;?#20204;的罪?#23567;?br />
当轮到他行动时,他就会掏出自己攥了很久的小本本,按照之?#20843;?#20204;揍自己的程度进行降序排列,然后按照这个名单,判?#29486;?#24049;反击的可能性

这里,没有反击的可能性,指的是:如果目标已经被人包围,自己?#20174;?#26159;一个近战角色无法靠近,那他就会嘟囔着“哼?#21738;?#19968;条?#35775;保?#28982;后继续看下一个人。

直到确定这个?#19968;?#21487;以被自己攻击到,他就会合上小本本,把他的名字刻?#29486;?#24049;的心头,然后准备开始下一个步骤:向他移动。

|  向目标单位移动
向目标移动就很简单了,通过A-Star算法找到移动路径后,行动即可。

确定目标后沿路径移动

但是这里有一个小问题:应该选择哪个格子作为移动的终点呢?

特别是当攻击者是某些远程攻击单位,比如游戏中常见的魔法师或者弓箭手,每次都走到目标旁边去攻击,感觉上就有点像?#20843;?#22806;卖”

其实解决方法也很简单,在导航时仍然选择目标所在位置做为导航终点,但在距离终点一定距离时,停止导航并返回导航路径即可。这个停止距离,可以是远程攻击单位的射程,或者手动设定?#21738;?#20010;值。

射程为2的小红,导航停止在距离小?#35835;?#20010;单位的格子上

这与“真正的爱情,能跨越一切障碍”是一个道理。

当然,如果这个人儿并不在天边,而在触手可及的地方,那他根本就不用移动,直接进入下面的?#26041;?#21543;。

|  ?#38405;?#26631;使用技能
光说,不练,假把式。

好容易走到了他(她)的身边,总得有所表示吧?

试想一个场景:你很?#19981;?#19968;个女孩儿,在表白的关键时刻,你有一百种表达方法,但你却只能选择一种,究竟哪种才是最有效?#21738;兀?br />
如果是真实的生活,答案很简单:看运气

但是游戏则不同,你可以用S/L大法(存、读档大法)来不?#29616;?#35797;,直到找出效果最好?#21738;?#19968;种!

决策将要使用的技能也可以是一样的。

这里我且不谈那些优秀的游戏是怎么做的,因为我也不知道。只说说我目?#20843;?#20351;用的方法:简单的计算所有可用技能的释放回报

计算技能得分并确定所使用的技能

计算技能释放得分的公式异常复杂,由于这并不是一篇学术性论文,因此这里不做详细的解释?#36864;得鰨?#21482;把公式列出即可:

技能释放得分 = 技能造成的总伤害 ÷ 技能消耗?#21738;?#37327;值

也就众所周知的:


天啊,好麻?#22330;?br />
但是,在得到了按?#24080;?#25918;得分降序排列的可用技能列表后,带着何种的心情、用着怎样的姿势、使用哪个技能的问题,就变得十分容易了。

可能我们只需要注意下远程范围技能的释放点选择问题即可。

释放影响半径为2的远程范围技能

对于远程范围技能,我们当然可以使用一些方法,找到覆盖最多目标的释放点。

但为了省事儿,我这里是这么处理的:当目标超过技能释放距离时,尝试找到释放技能时,可以覆盖到目标单位的点,然后从这里随便选一个即可。当然,如果目标本身就在技能释放半径内,就选它为释放?#34892;?#20102;。
红色区域为覆盖半径为2的技能在释放时,可以伤害到蓝色格子的释放点

|  能量值
当然,为了帮助AI计算出哪个技能的释放得分更高,我为每个战斗单位都增加了一个能量值的属性(你也可以认为它是魔法值);为每个技能增加了释放的能量消耗;同时还为游戏增加了每次行动时恢复10个单位能量的设定。但是由于这些逻辑?#24049;?#31616;单,这里就不赘述了。

最后,我们来回顾下整个行动流程吧:
1、打谁;
2、去哪打;
3、怎么打。
完整的AI行动流程


|  写在最后
?#38142;耍?/font>建立超级简单的AI系统篇就介绍到这了。如你所见,这里只是实现了非常简单的AI行动逻辑,并没有体现出各种类型AI的不同,我们下期将尝试着解决这个问题。

但是目前还没想好怎么做,而且最近又很忙,因此下回可能会拖得久一些吧。




愿不忘初心。

下回见。

?#34892;?#24744;能读到这里,详细的代码可以移步Github(https://github.com/elsong823/HalfSLG)下载。
文章会在我的公众号 ?#32423;?#23398;学Unity 中不定期更新,欢迎关注,谢谢。






参与人数 1鲜花 +1 收起 理由
kennyzhu2013 + 1 赞一个!

查看全部评分总评分 : 鲜花 +1

回复

使用道具 举报

排名
1387
昨日变化

0

主题

742

帖子

2385

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
135463
好友
0
蛮牛币
87
威望
0
注册时间
2016-1-23
在线时间
751 小时
最后登录
2019-8-24
沙发
2019-3-17 16:38:12 只看该作者
从零点五开始用Unity做半个2D战棋小游戏
回复 支持 反对

使用道具 举报

排名
2353
昨日变化

8

主题

798

帖子

2181

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
40014
好友
16
蛮牛币
3182
威望
0
注册时间
2014-8-15
在线时间
601 小时
最后登录
2019-8-25
QQ
板凳
2019-3-18 00:04:10 只看该作者
从零点五开始用Unity做半个2D战棋小游戏
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1160/1500
排名
2066
昨日变化

0

主题

262

帖子

1160

积分

Rank: 6Rank: 6Rank: 6

UID
26073
好友
1
蛮牛币
4413
威望
0
注册时间
2014-5-21
在线时间
230 小时
最后登录
2019-8-23
地板
2019-3-18 08:40:37 只看该作者
楼主用心了,?#37327;?#20102;,赞一个
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1113/1500
排名
10818
昨日变化

3

主题

838

帖子

1113

积分

Rank: 6Rank: 6Rank: 6

UID
310426
好友
0
蛮牛币
1499
威望
0
注册时间
2019-1-2
在线时间
176 小时
最后登录
2019-8-23
5#
2019-3-18 08:42:04 只看该作者
这个可以的
回复

使用道具 举报

排名
18792
昨日变化

1

主题

133

帖子

266

积分

Rank: 3Rank: 3Rank: 3

UID
2079
好友
1
蛮牛币
417
威望
0
注册时间
2013-8-15
在线时间
100 小时
最后登录
2019-8-21
QQ
6#
2019-3-18 09:04:49 只看该作者
楼主用心了,学习受益匪浅
回复 支持 反对

使用道具 举报

排名
2248
昨日变化

0

主题

1285

帖子

2319

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
189581
好友
0
蛮牛币
3635
威望
0
注册时间
2016-12-5
在线时间
408 小时
最后登录
2019-8-23
7#
2019-3-18 09:24:52 只看该作者
可以的 给力啊
回复

使用道具 举报

排名
1960
昨日变化

3

主题

108

帖子

2139

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219633
好友
0
蛮牛币
1871
威望
0
注册时间
2017-4-27
在线时间
1338 小时
最后登录
2019-8-22
8#
2019-3-18 09:50:28 只看该作者
楼主用心了,?#37327;?#20102;,赞一个
回复 支持 反对

使用道具 举报

5熟悉之中
786/1000
排名
8916
昨日变化

0

主题

432

帖子

786

积分

Rank: 5Rank: 5

UID
36289
好友
0
蛮牛币
50
威望
0
注册时间
2014-7-25
在线时间
222 小时
最后登录
2019-8-25
9#
2019-3-18 10:32:17 只看该作者
从零点五开始用Unity做半个2D战棋小游戏
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1138/1500
排名
16956
昨日变化

1

主题

729

帖子

1138

积分

Rank: 6Rank: 6Rank: 6

UID
199204
好友
1
蛮牛币
1098
威望
0
注册时间
2017-1-5
在线时间
368 小时
最后登录
2019-8-22
10#
2019-3-18 13:33:51 只看该作者
谢谢分享
回复

使用道具 举报

排名
4092
昨日变化

0

主题

1406

帖子

2132

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1933
威望
0
注册时间
2017-11-16
在线时间
364 小时
最后登录
2019-8-24
11#
2019-3-18 13:34:40 只看该作者
666666666666666666666666
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1056/1500
排名
5514
昨日变化

0

主题

660

帖子

1056

积分

Rank: 6Rank: 6Rank: 6

UID
300432
好友
1
蛮牛币
1282
威望
0
注册时间
2018-10-18
在线时间
134 小时
最后登录
2019-8-21
12#
2019-3-18 18:30:57 只看该作者
666666666666666666
回复 支持 反对

使用道具 举报

5熟悉之中
803/1000
排名
4110
昨日变化

1

主题

271

帖子

803

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
987
威望
0
注册时间
2017-9-21
在线时间
172 小时
最后登录
2019-8-23
13#
2019-3-20 08:53:05 只看该作者
我想问一下, 有体积的单位在六角网格中的寻路要怎样做? 比如有个龙, 很大, 占了7个格子(普通单位半径1 龙半径2)
因为有阻挡的情况下要做检测计算量很大的样子
回复 支持 反对

使用道具 举报

5熟悉之中
803/1000
排名
4110
昨日变化

1

主题

271

帖子

803

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
987
威望
0
注册时间
2017-9-21
在线时间
172 小时
最后登录
2019-8-23
14#
2019-3-25 09:17:23 只看该作者
你们这些回复只会喊66666吗, 没有人认真看帖的吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

Rank: 1

UID
317576
好友
0
蛮牛币
0
威望
0
注册时间
2019-3-25
在线时间
0 小时
最后登录
2019-3-25
15#
2019-3-25 18:39:43 只看该作者
楼主用心了,?#37327;?#20102;,赞一个
回复 支持 反对

使用道具 举报

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

本版积分规则

香港6合总彩透码主论坛
时时i彩人工计划软件 北京pk10挂机贴吧 小赢计划 美国本土nba投注量查询 工作计划软件 sm边缘控制的方法 皇冠彩票网一现金投注 27477六肖精准网站 全天腾讯分分彩免费人工计划 彩霸王3肖6马