其他分享
首页 > 其他分享> > 战棋游戏开发-序

战棋游戏开发-序

作者:互联网

前言

该系列文章为本人开发战棋游戏的回顾总结。

游戏玩法设计

游戏玩法上会主要参考火焰纹章系列1,待游戏开发到一定进度时会进行自定义的玩法扩展。

火焰纹章之烈火之剑

主要系统

  1. 网格地图
  2. 回合制战斗
  3. 战棋角色培养

开发工具

下面是游戏开发使用的引擎和框架。

游戏开发进度

  1. 网格地图基础功能 - 完成
  2. 回合制战斗流程 - 完成
  3. 战斗系统扩展(技能 & Buff系统) - 进行中

游戏源码

项目源码GitHub

游戏内容录屏


系统整体结构

系统整体结构包括: 战棋战斗系统, 战斗编辑器系统, 其他辅助功能模块

战棋战斗系统包括: 战场地图模块, 战斗单位模块, 战斗流程模块
战斗编辑器系统包括: 地图数据编辑器, 战斗数据编辑器

战场地图模块

战场地图设置为四边形网格地图, 使用字典保存地图网格单元数据。

战场生成步骤:

  1. 反序列化战场地图数据 - 借助newtonsoft.json
  2. 战场地图渲染 - 借助Unity组件tilemap

战斗单位模块

战斗单位BattleUnit继承于网格单位GridUnit。把和地图交互的基础功能放在基类中, 后续实现例如地图建筑之类的功能时也可以继承GirdUnit, 可以方便的实现扩展。

构造: 不同的战斗单位通过id读取配置表对应的数据进行构造。
与其他模块交互: 尽量使用事件以降低和其他模块的耦合。

战斗单位自动行动AI初步设计

  1. 攻击目标搜索
  2. 最优移动位置选择
  3. 移动并攻击

后续可能会使用行为树来优化自动行动AI

战斗流程模块

使用有限状态机管理战斗的各个流程, 有限状态机的实现来自于游戏框架GameFramework

战斗状态初步划分为: 回合切换状态, 战斗单位行动状态, 战斗单位结束行动状态

寻路模块

暂时使用普通的广度优先搜索, 待有性能需求之后改成A*寻路。

寻路时, 将网格单元数据包装成导航节点数据, 导航节点数据实例使用引用池进行管理以降低频繁分配内存的性能消耗。引用池的实现来自于游戏框架GameFramework

战斗数据编辑器模块

  1. 借助Unity的tilemap组件进行地图绘制, 战斗单元格放置。
  2. 读取并解析放置的内容为地图数据实例和战斗数据实例。
  3. 使用newtonsoft.json提供的功能把数据序列化为json格式并保存。

UI模块

使用UGUI进行UI界面的开发, 使用GameFramework的UI模块进行辅助管理。

UI开发流程大致为:

  1. 编辑UI界面
  2. 保存为预制体
  3. 配置表填写预制体路径
  4. 编写UI界面逻辑

参考


  1. 火焰纹章wiki ↩︎

标签:战棋,游戏,地图,开发,UI,模块,战斗
来源: https://blog.csdn.net/weixin_43455008/article/details/120599518