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

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

| 写在最前

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

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

1、创建战场(已完成)

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

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

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

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

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

4、加入玩家控制(已完成)

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

5、添加常用的界面(已完成)

建立界面管理器,加入一些常用的界面。

6、添加常用的战场显示(已完成)

为战斗单位添加血条,加入伤害文字特效。

7、扩展作战单位

丰富战斗元素,加入并实现手动释放不同类型的技能。

8、加入AI系统

建立简单的AI系统。

9、扩展战场地图

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

10、规范战斗配置

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

本次的主题是:丰富战斗元素,加入若干不同类型的技能。

| 目标

加入一些常见、简单的技能类型,如:

1、单体远程

对远程一个敌方单位进行攻击。

远程攻击单体目标

2、单体远程带范围效果

对远程一个敌方单位进行攻击,同时对其周围一定距离内所有敌方单位造成相同伤害。

单体远程带范围效果

3、以自身为中心的范围技能

以自身为中心,对周围一定距离内所有敌方单位造成伤害。

以自身为中心的范围技能

4、远程指定范围的技能

远程指定攻击一定范围内的所有敌方单位。

远程指定范围的技能

5、单体恢复

恢复自己或一个友方单位的HP值。

单体恢复

需要提前声明的是,本文主要记录的是在手动释放技能时,操作展示上的一些关键事项;技能计算的逻辑请见代码;AI释放不同类型技能也将放在下回。

| 增加效果显示

我为地块、战斗单位设置了不同的显示状态以便更直观的获取操作反馈。

战斗单位、地块的显示状态

无论是地块还是战斗单位,都是通过简单的状态机来实现不同显示效果的切换。

| 地块的效果显示

由于地块会包含多种状态共存的情况,比如上面的二手手机靓号远程范围攻击:某些地块会被同时设置为技能释放范围和技能效果覆盖范围。

部分地块既在技能释放范围内,又在技能效果范围内

为了解决这种情况,地块的显示状态判断使用了位运算。

使用位运算来控制显示状态

| 战斗单位的效果显示

战斗单位不涉及多种状态同时存在的情况,处理起来就简单多了。

战斗单位的显示状态

| 技能信息

与之前的界面配置一样,我仍然使用ScriptableObject作为技能信息的载体,因为这样实现起来最快捷。

记录技能信息的ScriptableObject

由于目前包含的技能类型较少,数值计算也十分简单,因此只需要少量的属性就足够了,这里就不再赘述了。

| 手选技能的操作规则

其实,这些技能的计算逻辑并不复杂,麻烦一些的是不同类型技能在手动操作时的规则及显示逻辑。

我在这里制定了简单的操作规则:

1、对于单体近战、单体远程、单体恢复技能:

选择技能后显示技能释放范围,标出范围内外的单位;点击可选单位则释放技能。

对单体目标技能的操作

2、对于单体远程带范围效果的技能:

选择技能后显示技能释放范围,标出范围内外的单位;点击可选单位后展示技能效果范围,标出范围内的单位;再次点击该单位后释放技能。

对单体远程带范围效果技能的操作

3、对于以自身为中心的范围技能:

选择技能后显示技能效果范围,标出范围内外的单位;点击任意单位后释放技能。

对以自身为中心的范围技能的操作

4、对于远程指定范围的技能:

选择技能后显示技能释放范围;点击范围内任意地块,显示技能效果范围,标出范围内外的单位;再次点击相同地块释放技能。

对远程指定范围技能的操作

5、操作任意类型技能时,点击鼠标右键为取消。

| 简单的技能分析

为了实现上述操作逻辑,我在点击使用技能后加入了一个简单的技能分析步骤,它会遍历场上所有战斗单位,并根据释放者及技能类型将他们划分为可被选中的、队伍不符的、距离不符的和状态异常的四类,这样后面的操作逻辑实现起来就简单多了。

点击使用技能后的流程

技能分析结果

| 增加技能操作界面

我微调了战斗单位的操作面板,为攻击按钮增加了一个选择技能的二级面板。添加了一个一级面板透明处理的小设置来区分层级;以及在不同屏幕位置点击时的面板弹出位置的优化,以防止面板弹出到屏幕以外无法操作。由于这不是本次介绍的重点,就不在这赘述了。

技能选择面板

| 写在最后

至此,扩展作战单位篇就介绍到这了。这里只是实现了手动释放一些类型简单的技能,AI目前仍然只会使用默认的近战攻击,后面将会尝试建立一套简单的AI系统,来实现由AI释放各类的技能,让战斗变得更有趣一些。

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

愿不忘初心。

下回见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值