文章目录

  • 游戏开发思路及模块划分
    • 游戏基础设定
    • 大地图系统
    • 地图系统
    • NPC系统
    • 玩家属性、装备、道具、技能
    • 宝箱系统
    • 战斗系统
    • 剧情系统
    • 存储 \ 读取档系统
    • 控制系统(Controller)
    • 前端展现系统
  • 概要设计
  • 模块详细设计(此部分可以考虑分成多个文档)
  • 模型设计
    • 数据库工具类
    • 当前数据类
    • 战斗数据类
    • 大地图类
    • 地图工厂类
    • 地图类
    • 地图块类
    • NPC类
    • 动线类
    • 宝箱类
    • 流程类
    • 流程环节类
    • 流程步骤类
    • 任务类
    • 玩家类
    • 敌人类
    • 小队类
    • 物品类
    • 动画管理类
    • UI类:场景UI处理
    • 操作响应类:摇杆、按键事件处理
    • 战场类:
    • 战斗玩家类:用于记录玩家在战斗过程中产生的临时数据
    • 敌人类
    • buff类
    • 按文件夹拆分
    • Game类
  • 系统功能设计
    • 系统功能设计思路
    • 要考虑的问题

游戏开发思路及模块划分

游戏基础设定

  • 游戏类型为回合制战棋类RPG游戏。
  • 游戏可以跨平台运行,要针对不同的平台提供不同的操作方式
  • 玩家控制角色在地图中行走、获取宝箱、与NPC对话、触发战斗。

大地图系统

  • 大地图要有大地图编辑器。

地图系统

  • 地图要有地图编辑器。
  • 每个地图块主要包含以下信息:纹理、通行方式、战斗通行方式、战斗buff(可选)、玩家位置信息(可选)、NPC位置信息。
  • 可在地图编辑器中设置地图块皮肤。
  • 可在地图编辑器中设置地图块的通行方式。
  • 可在地图编辑器中设置整个地图的战斗触发几率。
  • 地图系统要提供战斗触发几率修改功能,允许在某些特定剧情下改变地图的战斗触发情况。
  • 地图上

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类

系统功能设计

系统功能设计思路

  1. 场景中的单例脚本要使用单例工具实现,比如控制器、游戏场景控制等。
  2. 不同的系统要有不同的操作方式,要使用依赖注入的方式,结合XML配置,实现一次配置,动态切换换操作组件。
  3. 地图编辑器要使用预处理指令进行隐藏,保证代码打包时此类功能不会被打入包中。
  4. 要结合协程自定义Update,而不是简单的使用Update,增加代码的可读性和可维护性。
  5. MVC一定要做,这样代码可用性才能更高。
  6. 持久层要使用依赖注入配合单例模式和工厂模式实现,让数据持久化功能更稳定。
  7. 要提供远程存档保存功能,并实现多种保存方式,比如steam保存,华为、小米、苹果游戏中心保存等,不能拘泥于只保存在自己的服务器中。
  8. 要建立成就系统配置化,支持Steam成就卡片,GameCenter成就,安卓各手机平台游戏中心成就系统。可以先实现其中一种,但一定要做成接口,并支持成就动态配置。

要考虑的问题

要考虑前端与后端如何割裂?
view操作如何汇总(是否有必要汇总)?
流程部分细节如何设计才能更灵活?
如何避免开在不该改数据的地方改数据,在不该改界面的地方改界面?
是否能使用面向切面的方式来实现前端的切入?

回到文档目录页:【Unity】Unity3D RPG游戏制作实例(一)游戏简介及文档目录整理

更多内容请查看总目录【Unity】Unity学习笔记目录整理

【Unity】Unity3D RPG游戏制作实例(二)开发思路及概要设计相关推荐

  1. Unity学习笔记2 简易2D横版RPG游戏制作(二)

    十二.敌人受攻击时的闪烁和Player的生命值的修正 上一篇中,我们利用Controller2D中的IEnumerator TakenDamage接口,使得我们的Player受到攻击时会进行闪烁,我们 ...

  2. 【Unity】U3D TD游戏制作实例(一)创建敌人、加载预制件

    文章目录 前言 本章实现效果 场景和敌人 文件目录结构 场景层次结构(Hierarchy) 处理模型 指定GameScript脚本 运行游戏 前言 TD(炮台防守)类游戏是比较经典的游戏类型,当年在 ...

  3. 简单的RPG游戏制作教程

    □企划部份 ◎第一步:决定资料格式 在进入游戏制作的初期,由于有许多和程式有关的资料需要编整,因此担任企划的人员常会忙得乱七八糟.在这个阶段,企划人员必需要和程式商量游戏中资料的格式.举个例子来说,在 ...

  4. 转载一个手机RPG游戏制作工具,仿造RPGXP写的

    转载一个手机RPG游戏制作工具,仿造RPGXP写的 有朋友问有没有脚本编辑功能,大家注意啦: 有脚本编辑功能,可视化界面编辑脚本,和RMXP一样 经过一年的开发,手机RPG游戏制作工具--MobieG ...

  5. python小项目实例流程-python实现的简单RPG游戏流程实例

    本文实例讲述了python实现的简单RPG游戏流程.分享给大家供大家参考.具体如下: #RPG rpg = True whp = 100 mahp = 100 hhp = 100 MHP = 10 d ...

  6. 使用Wwise在3D RPG游戏中的声音设计思路

    使用Wwise在3D RPG游戏中的声音设计思路 https://blog.audiokinetic.com/zh/how-to-use-wwise-in-3d-rpg-game/ 大家好,随着Wwi ...

  7. Unity学习笔记3 简易2D横版RPG游戏制作(三)

    这一篇本来应该是在上一篇后面直接补进去的.不过因为排版的问题.所以我就另开一篇来整理了,好了,废话不多说,马上整理: 十八.关卡的锁定与解锁 前面我们已经解决了在游戏开始时可以选择关卡的问题,接下来我 ...

  8. RPG游戏《黑暗之光》开发总纲

    近期在学习RPG游戏<黑暗之光>的开发,列个总的逻辑路线和开发大纲,方便复习与检索.(更新完毕) 1.载入界面场景 https://blog.csdn.net/s1314_jhc/arti ...

  9. 《从零开始的RPG游戏制作教程》第二期:让勇者和怪物登场

    目录 1. 前言 2. 第一期:制作基础场景 在[第一期:制作基础场景]中,我们教学了如何下载魔兽地图编辑器,并制作了一个非常基础的小村子场景. 本期我们会简单地在场景中放入魔兽争霸3自带的英雄,使得 ...

  10. RPG游戏制作-04-接入脚本前的准备

    在RPG的开发中,一般情况下都会使用脚本,脚本在游戏开发中也很重要,在RPG游戏中,脚本就像剧本,来控制整个RPG游戏的流程. 本游戏使用lua脚本语言,版本为5.3,没使用额外的库,这点和cocos ...

最新文章

  1. sql查询返回xml数据之应用【转载】
  2. 论文不公开代码,应该被直接拒稿?
  3. english email writing techniques demo
  4. MySql中4种批量更新的方法
  5. Codeforces Round #607 (Div. 2) E. Jeremy Bearimy dfs + 思维
  6. linux_scp 远程复制不需要输入密码
  7. 乐华娱乐前训练生黄智博卖口罩诈骗案宣判:获刑三年三个月
  8. 特征数据清洗 编码 标准化
  9. win7操作系统练习题(带答案,有问题可直接在博客或公众号中问)
  10. 物联网安全硬件修改系列-硬改
  11. 工商数据抓取全部方法
  12. Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
  13. risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
  14. oracle常用sql语句查询语句,Oracle常用sql语句
  15. 主机-配件-接口-整机-3c-2
  16. 树莓派无法解析域名(即无法连网,更新软件失败)
  17. Mac 安装 双系统 体验极差的好几天
  18. 电脑连WiFi怎么查看密码是多少
  19. 自动生成fbi代码网站
  20. 每日日报20191223

热门文章

  1. python分秒换算_如何将度分秒转换为度分
  2. c语言页面置换算法报告,C语言实现页面置换算法
  3. WinMTR-路由追踪软件
  4. 手把手教你开发基于单片机的wifi通信的物联网项目(远程灯控制)
  5. 少儿编程市场调研分析
  6. 傅里叶分析公式推导(最简单的傅里叶级数和傅里叶变换)
  7. 数字城市新型基础设施——打造以“运营与安全并重”为特色的新型数字空间
  8. JAVA链表中的回文链表结构
  9. Qt 5.2.1 applications (32 bit) in CentOS (64 bit with gcc 4.8.2)
  10. 如何将JavaScript中的JSON字符串转换为JSON对象数组?