基于兴趣开发的策略战棋游戏开发日志(1-3)

作者:mioku
2022-09-27
10 4 0

宏大的计划目标是要制作一款策略玩法类似(欧陆风云/十字军之王),同时通过战棋玩法表现局部战略的游戏!

本次日志要展示的就是网格地图的生成了.

首先描述一下我要实现的地图结构,一个网格地图要由大量单元格组成,单元格则有地形,地貌两个特征。

一个小村庄

如上图↑,一个单元格的颜色可以理解为地貌,而单元格上的小村庄就是一个地形。

为了方便处理,将他们定义为 Unity 中的 Scriptable 类型存储在本地,多说一句,自从有了 Scriptable,很多数据的存储真的方便不少,拖几下就能完成存储,再也不用考虑路径之类的问题了,大家在自己制作时更偏爱那种持久化存储呢?

地貌数据

地貌数据

地形数据

地形数据

如上图,地貌负责存储一个材质,地形则存了一个物体对象,这样,在生成时给单元格加上对应的地形地貌,一个单元格就组成了。

接下来我们也为整个地图网格设置一个存储数据,

网格数据

网格数据

整个地图的网格数据要存储地图的规模(长和宽),以及网格肚子里每个单元格对应的地形和地貌.然而在实际处理过程中,每个单元格的地形地貌拖起来实在是太辛苦了,看来制作一个地图编辑器是很必要的(算是挖以后日志的坑了)。

接下来的内容就是比较简单的代码阶段了,生成 width * height 个单元格,并把对应的地形地貌数据设置给它,一个简单的六边形地图就完成了,稍微编辑一下地图数据,下图就是成品啦!森林和花海里的营地~(似乎和历史策略题材不太搭 ++)

这就是本篇日志的全部内容啦!实现内容是不是太简单了 ><,望多多包涵。

尽管看来十分简单,但稚嫩的我也是看过了许多文章才会自己实现的,这里分享一篇十分出色的网格地图生成的教程:https://catlikecoding.com/unity/tutorials/

这次制作地图编辑器真是费了不少辛苦,尝试使用了 Unity 新的 UIToolkit 来做一个简单的页面结果踩了不少坑,最近也是很忙,努力忙里偷闲总算是大致完成了,以下就是编辑器的面板了。

编辑器概览

编辑器概览

嘛~UI 样式是默认的,十分简陋,大家体谅.其实这么简单的页面制作起来也费了不少劲.第一次使用新的 UI 方案,很多问题都很难解决.尤其是组件的布局,还有一些输入框的显示问题。

编辑器的功能还是很直观的,这里稍微介绍一下。

地形 / 地貌下拉框:玩家选择了地貌/地形后,点击地图中的单元格就能改变单元格样式了。

单元格编辑操作

单元格编辑操作

横向 / 纵向滑条:滑动可以改变整个地图在横向和纵向的单元格数量,然后点击修改尺寸就会应用到地图。

(这里笔者遇到了一个解决不了的问题:滑动条右边会有个显示当前值的文本框, 玩家也可以直接在其中输入值来应用值修改.但是在运行时文本框的值不会显示出来十分奇怪.欢迎有熟悉 UIToolKit 的朋友解答)

新建 / 保存按钮:就是将当前地图数据保存到本地,或者重新生成一个空地图啦。

要提一下的是保存,在编辑器运行时,我们可以通过 AssetDatabase 来在本地处理 Asset 资源,但当要发布游戏时,就会有一下问题。

AssetDatabase 只能在编辑器模式使用!!!

于是,要实现在游戏发布后玩家也可以使用编辑器保存地图数据,还需要一个可行的数据持久化存储方案.笔者直接使用了 JsonUtility 将地图数据存储为了 Json,这方面功能还没有到应用的时候,还有待丰富,就先不分享啦!

这就是本周完成的地图编辑器的大致情况啦!内容十分简陋,望大家见谅。

作为一个后端工作者,即使是制作这么简单的一个 UI 窗体也费了不少事,甚至还存在不少问题。让我一度怀疑:难道,我真的做不好前端内容么?哎,但愿会随着经验的丰富越来越好吧!

首先介绍一下使用的素材包:

是在 Unity Asset Strore 买的一个 RTS 类型素材包,主要内容是一套骑兵模组和步兵模组,另外还有一些建筑和工程器械.骑兵和步兵的模组已经预制了很多的骨骼动画和装备组件,内容很丰富,打折入手还是挺值的。

接下来就要上手了,先介绍一下对于战斗单位的大致策划:

  1. 作战单位:分为骑兵和步兵两类--骑兵机动力强,有冲锋能力,步兵则价格实惠,地形适应能力更强。
  2. 作战方式:会有近战,远程两类(是否加入魔法犹豫中),主要有作战单位的武器决定。
  3. 武器装备:是每个作战单位的最主要特征,大概可分为双手武器(大锤,大剑,弩等),单手武器(剑,长矛等),盾牌。

然后是处理单位数据.为了方便处理各个单位的数值,我用了一个 csv 表格文件来存储数据,csv 文件格式很简单,可以看作逗号分隔的文本文件,处理起来很方便,随后我又编写了一个编辑器扩展方法,快速的将表格内容生成为编辑器内的 asset 资源。

以下是随手编辑的初版单位数据,以及转换后的 Asset 文件:

CSV表格数据

CSV 表格数据

生成的Asset数据

生成的 Asset 数据
(虽然只用两张图就阐述了操作内容,但其实中间出了不少小问题,费了很多时间==)


随后为作战单位的预制体添加好单位信息,作战单位的前期准备就完成了,现在战士们已经登记在册,准备踏入战场啦!

战场之花——枪骑士已经等不及了

接下来有大量的工作等着完成:单位生成,移动,作战,招募.伴随着相应的动画,音效的设置.已经开始头疼啦!下一篇日志应该会着手于单位在地图上的移动.应该会有一个稍微复杂的路径算法,我已经干劲满满准备动手啦。

假期就要来了,大家加油呀!