从零点五开始用Unity做半个2D战棋小游戏(四)

写在最前

这次想要一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方依据体力在地图上轮流行动并向对方发动攻击,先消灭掉所有敌人的一方将获得胜利。

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

1、创建战场(已完成)

根据预定尺寸生成战场地图,并随机一些障碍物。

2、添加地图功能 (已完成)

实现战场格子点击反馈,地图导航及范围选定。

3、添加对战双方(已完成)

向战场中添加作战单位,作战单位轮流行动,可进行移动、攻击。

4、加入玩家控制

玩家可控制一个战斗单位,手动选择移动目标及攻击单位。

5、添加战场UI

添加可以随时显示战况的Hud、为作战单位添加血条等。

6、扩展作战单位

丰富作战单位的类型,添加职业,并加入若干不同类型的技能。

7、扩展战场地图

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

8、规范战斗配置

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

本次的主题是:加入玩家控制。

| 目标

分配一个角色给玩家手动操作,每回合玩家有一次行动机会,行动的规则是:可从移动、攻击、待命中选择一次操作,当玩家选择移动后,还可选择一次攻击或待命的操作;玩家也可以不进行移动直接选择攻击或待命,这也会结束当前行动回合。

实现后的效果如下图:

这次要做的非常少,因为之前已经写好了战斗逻辑,只需要把手动操作加入即可。

| 准备工作

首先,为战斗单位设置一个是否为手动操作的标记。

其次,为战斗单位设定一个手动操作状态,标记这个战斗单位是否可以移动、攻击。

最后,新增一种新的战斗单位操作状态和动作,分别是等待玩家操作状态及等待手动操作的动作。

当轮到玩家操作时,战斗的单位会显示绿色边框。

| 手动操作的逻辑

大概思路是:战场维护一个战斗单位的行动队列,每当轮到一个单位行动时,如果这个单位是自动操作的,那么它会自己决定目标,移动并攻击,上回我们将二手手游账号买号平台数据与渲染进行了分离,因此它只是产生了一次行动数据(Action)。

如果这个单位是手动操作的,那它会产生一个等待手动输入的行动数据,同时返回等待玩家操作状态。

当战场发现自己收到了一个等待玩家操作的状态,就明白其实刚才的家伙并没有生成任何有意义的战斗数据,因此它必须通知自己的渲染器(那个用来显示的模块,上回我们介绍过):嘿,帮我问问他到底想干嘛?

渲染器通过UI与玩家进行交互,获得玩家要移动、攻击或是待命等“有用”的战斗信息后,再回头通知战场“这个家伙已经行动过了”,战场再让下一个单位行动。

简易的行动流程图

由于下一回我们才会加入战场UI,这里我们先用Unity自带的GUI代替。

用GUI显示一个列表,接收玩家的操作

| 写在最后

2018年瞬间就过去了,回想年初时豪情万丈列下的“2018年必做之十大事”,如今...额...都不敢看清单上有什么...

过去的就让他过去吧...2019年,请自己继续加油吧。

初心易得,始终难求。

下回见。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值