Unity 2D游戏开发:游戏开发规划(1)

552 阅读11分钟

一、2D类游戏开发流程包含以下主要步骤:

游戏开发思路及模块划分

游戏基础设定

  • 游戏类型为模拟经营类游戏。

  • 游戏可以跨平台运行,要针对不同的平台提供不同的操作方式

  • 玩家控制角色在地图中行走、获取宝箱、与NPC对话、收集材料。

大地图系统

大地图可以由多个地图组成,每个地图都对应一个文件夹,可能包含多个区域(region)文件夹。

每个地图由“区块”(chunks)组成,一个区块是一个16 x 16个方块的矩形,高度为256个方块。同一地图上的不同区块可以有不同的生物群系和资源分布。

地图系统

地图要有地图编辑器。

每个地图块主要包含以下信息:纹理、通行方式、战斗通行方式、战斗buff(可选)、玩家位置信息(可选)、NPC位置信息。

可在地图编辑器中设置地图块皮肤。

可在地图编辑器中设置整个地图的战斗触发几率。

地图系统要提供战斗触发几率修改功能,允许在某些特定剧情下改变地图的战斗触发情况。

每个地图都有对应的seed,通过seed可以确定地图的生成方式和内容,确保每个玩家的地图是唯一的。

每个地图可能包含多个生物群系(biome),每个生物群系对应着不同的地貌、天气和植被。

每个地图中会生成不同种类的资源方块,如石头、沙子、铁矿石等,玩家需要采集这些方块来制作物品。

NPC系统

NPC的配置要做成组件。

可以在组件中设置NPC的皮肤和动画。

可在组件中设置NPC的对话,对话可以分为多组,可以随机按组播放,也可以通过标记数据决定当前使用哪组对话。

NPC的动线如何配置还需要再考虑考虑,比如从哪走到哪,停几秒钟,再到哪,转圈走还是来回走等等

剧情系统

玩家可以通过自由探索、建造、采集资源、合成物品等方式来体验游戏世界。

玩家属性、装备、道具、技能系统

玩家有一些基本属性,如生命值、饱食度、经验值等,这些属性可以通过吃食物、击杀怪物、探索世界等途径进行提升。

玩家可以制作、装备各种工具、武器、盔甲等物品,这些物品可以提升玩家的采集、战斗、防御等能力。

玩家可以通过合成、食用各种药水来获得各种效果,如治疗、加速、力量增强等。

玩家可以获得不同种类的附魔书,将其应用到装备上,提升装备的属性。

玩家属性、装备、道具、技能系统

玩家有一些基本属性,如生命值、饱食度、经验值等,这些属性可以通过吃食物、击杀怪物、探索世界等途径进行提升。

玩家可以制作、装备各种工具、武器、盔甲等物品,这些物品可以提升玩家的采集、战斗、防御等能力。

玩家可以通过合成、食用各种药水来获得各种效果,如治疗、加速、力量增强等。

玩家可以获得不同种类的附魔书,将其应用到装备上,提升装备的属性。

宝箱系统

宝箱系统要考虑宝箱是否需要跟地图数据做关联。

玩家可以通过探索世界等方式获得各种物品。

战斗系统

战斗系统要有敌人的AI。

所有敌人都应该实现敌人接口,敌人接口要求敌人战斗时必要的动作,给普通敌人提供常用的实现类,Boss可以做额外的实现类。

战斗系统中要提供剧情对话功能。

战斗系统核心是生物之间的战斗。生物分为友好和敌对两类,玩家需要通过攻击敌对生物来保护自己和生存环境。玩家有自己的攻击方式,可以使用各种武器和工具进行战斗。

所有敌对生物都有不同的攻击方式、生命值和特殊攻击动作。生物之间的战斗是即时的,没有回合制。

存储 读取档系统

要考虑读档时NPC的位置是以存档时为准还是使用地图默认点位,如果不是默认点位就要考虑NPC的AI适配功能

存读档时需要加载的数据:玩家当前所在地图、玩家和NPC所在点位与朝向、当前小队信息、所有玩家属性及装备、当前物品信息、宝箱信息、流程信息等,待补充。

控制系统(Controller)

控制系统是玩家控制的汇总,所有的玩家输入都在控制系统中进行处理,所有的前后端交互也都在控制系统中实现。

控制系统应该只做前后端的任务调度,而不应该实现具体的业务细节。

控制系统要提供统一的接口,保证平台可迁移性。

前端展现系统

根据不同的运行环境决定是否提供摇杆等操作UI。

提供地图加载功能(包含宝箱、角色、NPC等)。

为控制系统提供相应的界面响应事件。

根据实际情况实现地图局部动态加载功能(可选功能)。

提供对话框展现功能。

提供动画播放的统一入口。

提供大地图界面展现功能。

提供用户菜单UI(继续游戏、Save\&Load、按键设定、显示设定、声音设定、语言选项、开发者名单)。

提供地图任意位置生成战斗画面的功能(显示棋盘格、玩家属性、移动区域、攻击区域、操作UI等)。

概要设计

模块详细设计(此部分可以考虑分成多个文档)

模型设计

数据库工具类

实际操作数据库的类,实际开发中要考虑存档是否提供局部修改的功能

(可以考虑将数据按类型分类,通过验证md5的方式确定哪些需要更新,减少CPU占用)

改变当前数据(全部)

改变当前数据(局部,一个或多个类型)

改变当前数据(单条记录)

存档:将全部当前数据打包保存到相应的档位中

读档:将对应档位的全部数据解压后覆盖到当前数据中

当前数据类

所有当前数据都必须经过本类修改

大地图数据:是否可传送,哪些地图可以传送

地图详细数据:各个地图的宝箱开启情况

玩家数据:所在地图、所在位置、面朝方向

背包数据:有哪些道具,分别有多少个

流程数据:在哪个环节哪个步骤

压缩数据方法

解压数据方法

战斗数据类

战斗中所产生的数据

敌人\[]

玩家\[]

大地图类

大地图类需要跟实际地图耦合,用于展现大地图和实现地图传送功能。

是否可查看大地图

展现区域

地图工厂类

地图数据设定(行列数量,地图块宽高)

棋盘格展现

地图块操作

NPC操作(增加、修改、删除)

玩家默认出生点

地图数据生成

地图类

地图ID

是否在大地图上显示

是否可在大地图上传送

生成类型:全景展现,动态展现

迷雾范围

地图块\[]\[]

NPC\[]

地图块类

地图块类型:可通过、不可通过、单进单出、双向通过、

事件类型(枚举):正常通行(默认)、触发动画(动画种类可选)、触发流程、获得物品、玩家换皮肤等

事件处理Handler(这部分要考虑如何实现可扩展)

NPC类

NPC类型

默认朝向:上下左右

动线\[]:默认没有动线(站在那一动不动),也可以有多条动线,可以根据任务进度决定

对话列表\[]\[]:一个NPC可能有多套对话

对话功能:根据任务进度决定NPC说哪套对话

动线类

决定NPC在地图上的行动路线

路点列表\[]

宝箱类

内部物品\[]\[]

流程类

记录游戏总流程

当前环节:

当前步骤:

流程流转:用来验证流程是否向下一步流转

流程环节类

用来区分流程里程碑,避免跳关情况发生,通常情况下同一个地图在同一环节内只能有一种情况。

流程步骤\[]

流程步骤类

单个环节中的流程节点

上一步骤:理论上应该不会有需要用到上一节点的情况

下一步骤:满足条件后进入下一步骤

进入步骤:当前节点刚进入时调用一次(一般用来处理哪些地图关闭,哪些玩家离队等事情)

离开步骤:当前步骤结束时调用一次

任务类

记录分支任务完成情况(可用于决定NPC对话内容以及)

玩家类

敌人类

小队类

物品类

动画管理类

动画类型:全景动画,NPC动画,玩家动画,混合动画

动画触发

UI类:场景UI处理

操作响应类:摇杆、按键事件处理

战场类:

战场地图:可由当前玩家所在地图动态生成边界,也可以指定特定地图

战场Buff\[]:战场可以有一个或多个buff

战斗玩家类:用于记录玩家在战斗过程中产生的临时数据

敌人类

AI战斗

基础属性

隐藏属性

对部分玩家buff\[]:通过列表指定对于部分玩家的特殊buff,比如被威慑攻击力减弱等

技能

战斗结果方法:此方法需要提供回调函数,或者做成委托也行

buff类

buff类别:禁用法术、法力消耗倍增、法力消耗减半、物理攻击翻倍、

效果增益值:默认为1,假如是攻击力buff,那么如果当前值为2就等于攻击力翻倍。

剩余回合数

对应动画ID

按文件夹拆分

持久层:当前数据类、数据库工具类

模型层:都是数据模型,不允许在模型层操作界面(禁止继承mono)

模型层可以继续分包:大地图、地图、NPC、玩家、小队、技能、装备、背包、流程等

服务层:服务层是前后端沟通的一个服务级汇总,以简化控制层代码,提高代码可用性

技能服务、事件服务、

控制层:这个控制层跟web开发不同,不需要太多的Controller,只要把前端操作汇总即可

一般情况下是一进一出,进而改数据,出而改界面,就这样

控制层具体有哪些类还需要再进一步考虑=TODO=

展现层:纯前端展现的工作,通常情况下展现层的所有类都需要继承mono

具体再思考一下TODO===

Game类

系统功能设计

系统功能设计思路

场景中的单例脚本要使用单例工具实现,比如控制器、游戏场景控制等。

不同的系统要有不同的操作方式,要使用依赖注入的方式,结合XML配置,实现一次配置,动态切换换操作组件。

地图编辑器要使用预处理指令进行隐藏,保证代码打包时此类功能不会被打入包中。

要结合协程自定义Update,而不是简单的使用Update,增加代码的可读性和可维护性。

MVC一定要做,这样代码可用性才能更高。

持久层要使用依赖注入配合单例模式和工厂模式实现,让数据持久化功能更稳定。

要提供远程存档保存功能,并实现多种保存方式,比如steam保存,华为、小米、苹果游戏中心保存等,不能拘泥于只保存在自己的服务器中。

要建立成就系统配置化,支持Steam成就卡片,GameCenter成就,安卓各手机平台游戏中心成就系统。可以先实现其中一种,但一定要做成接口,并支持成就动态配置。

要考虑的问题

要考虑前端与后端如何割裂?

view操作如何汇总(是否有必要汇总)?

流程部分细节如何设计才能更灵活?

如何避免开在不该改数据的地方改数据,在不该改界面的地方改界面?

是否能使用面向切面的方式来实现前端的切入?

二、在开发过程中需要注意以下几点:

1.尽可能使用简单易懂的框架和工具,提高开发效率和减少出错率。

2.增加玩家体验和互动性,让游戏更加富有趣味性和挑战性。

3.定期对游戏进行版本更新和维护,及时解决游戏中出现的问题和反馈。

4.关注游戏市场和玩家需求,不断改进和完善游戏,提升用户满意度和口碑。

三、持续更新中。。。。