写在最前
这次想要一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方依据体力在地图上轮流行动并向对方发动攻击,先消灭掉所有敌人的一方将获得胜利。
预计将分为以下几篇:
1、
创建战场
根据预定尺寸生成战场地图,并随机一些障碍物。
2、
添加战场地图功能
实现战场格子点击反馈,地图导航及范围选定。
3、
添加对战双方
向战场中添加作战单位,作战单位按照一定规则轮流行动,可进行移动、攻击等。
4、
加入玩家控制
添加可以随时显示战况的Hud、为作战单位添加血条等。
5、
添加常用的界面
建立界面管理器,加入一些常用的界面。
6、添加常用的战场显示
为战斗单位添加血条,加入伤害文字显示。
7、扩展作战单位
丰富作战单位的类型,添加职业,并加入若干不同类型的技能。
8、扩展战场地图
丰富战场地图,加入地形及道具等元素。
9、规范战斗配置
可以通过规范化的数据结构配置战场、职业、技能、道具等。
本次的主题是:加入玩家控制。
项目代码会上传至我的Github:https://github.com/elsong823/HalfSLG中,有兴趣的同学请自取。
目标
分配一个角色给玩家手动操作,每回合玩家有
一次行动机会,行动的规则是:可从
移动、攻击、待命中选择一次操作,当玩家选择移动后,还可选择一次攻击或待命的操作;玩家也可以不进行移动直接选择攻击或待命,这也会结束当前行动回合。
实现后的效果如下图:
这次要做的非常少,因为之前已经写好了战斗逻辑,只需要把手动操作加入即可。
准备工作
首先,为战斗单位设置一个是否为手动操作的标记。
其次,为战斗单位设定一个手动操作状态,标记这个战斗单位是否可以移动、攻击。
最后,新增一种新的战斗单位操作状态和动作,分别是等待玩家操作状态及等待手动操作的动作。
当轮到玩家操作时,战斗的单位会显示绿色边框。
手动操作的逻辑
大概思路是:战场维护一个战斗单位的行动队列,每当轮到一个单位行动时,如果这个单位是
自动操作的,那么它会
自己决定目标,移动并攻击,上回我们将数据与渲染进行了分离,因此它只是产生了一次
行动数据(Action)。
如果这个单位是手动操作的,那它会产生一个等待手动输入的行动数据,同时返回等待玩家操作状态。
当战场发现自己收到了一个
等待玩家操作的状态,就明白其实刚才的家伙并没有生成任何有意义的战斗数据,因此它必须通知自己的渲染器(那个用来显示的模块,上回我们介绍过):嘿,帮我问问他到底想干嘛?
渲染器通过UI与玩家进行交互,
获得玩家要移动、攻击或是待命等“有用”的战斗信息后,再回头通知战场“这个家伙已经行动过了”,战场再让下一个单位行动。
简易的行动流程图
由于下一回我们才会加入战场UI,这里我们先用Unity自带的GUI代替。
用GUI显示一个列表,接收玩家的操作
写在最后
2018年瞬间就过去了,回想年初时豪情万丈列下的“2018年必做之十大事”,如今...额...都不敢看清单上有什么...
过去的就让他过去吧...2019年,请自己继续加油吧。
初心易得,始终难求。
下回见。
作者:/zt枸杞忧天
来源:腾讯游戏学院
原地址:http://gad.qq.com/article/detail/288998