688
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 班级的链接 |
|---|---|
| 这个作业要求在哪里 | 作业要求的链接 |
| 这个作业的目标 | 像素原神游戏的系统设计和数据库设计 |
| 其他参考文献 | ... |



从角色出发关联到武器、圣遗物、物品、npc、怪物、剧情等。
逻辑结构:

表的结构:







总体:
将整个系统分为5个子系统分别为战斗系统、人物系统、背包系统、剧情系统、UI系统,采用中介模式,使用中介者类进行子系统之间的互相调用和信息传递,避免各个子系统间显示的调用,降低各个子系统之间的耦合度。

战斗系统:战斗系统使用软件体系结构的状态模式进行设计。战斗模式分为大世界战斗和回合制战斗两类。 大世界战斗的状态分为角色状态和怪物状态。 角色状态分为攻击状态、被攻击状态和死亡状态。 角色处于攻击状态时,可以使用普通攻击、元素战技、元素爆发、积攒能量方法。 处于被攻击状态时会计算攻击造成的影响,并更新角色的数值。死亡状态会触发死亡方法。 怪物状态分为游荡状态、攻击状态、被攻击状态和死亡状态。 游荡状态下,怪物会在地图上移动并检测是否发现角色。 当发现角色时进入攻击状态,此时怪物会追逐角色并攻击角色。 怪物处于被攻击状态时,也会计算造成的影响,并更新怪物数值。 处于死亡状态时会触发死亡方法并掉落物品。 回合制战斗下玩家可以选择出战角色,怪物和角色的回合控制通过战斗轮换控制器来实现。 战斗轮换控制器会为角色和怪物不断切换攻击状态和被攻击状态。 当角色处于攻击状态时,可以选择发起攻击的角色,可以使用普通攻击、元素战技、元素爆发等方法,或使用药剂,或选择逃跑。 怪物处于攻击状态时会使用普通攻击和释放技能方法。 角色和怪物处于被攻击状态下时,会计算攻击造成的影响,若影响导致死亡,则触发死亡方法。

剧情系统:剧情作为基类,每段剧情会分配一个剧情ID作为唯一属性,同时每段剧情有自己的剧情文本和剧情奖励。 剧情有着自己的跳过剧情方法,玩家在体验剧情时可以调用这个方法来跳过剧情,同时为了剧情要求,剧情也有创建剧情场景的方法。 剧情分为主线剧情和支线剧情,主线剧情完成后可以为玩家解锁新的地图。 剧情由多个任务组成,每个任务会分配唯一的任务ID,并有方法判断任务是否完成,当所有任务完成时,剧情完成。

背包系统:背包与玩家是一对一关系,在背包系统中我们将物品分为三类,第一种是普通的物品,与背包的关系是一对多,而普通物品又分为食物和剧情物品,它们分别继承于物品类,食物类中属性有状态,回复生命值,还有buff效果,剧情物品则与相应剧情任务挂钩,剧情物品类中属性有剧情ID与任务ID;第二种是武器,与背包的关系是一对多,考虑到武器具有多个类别且可能进行扩展,且为了遵守开闭原则,我们设计将具体的武器类(弓,单手剑,长枪,双手剑)主要含有属性buff效果,攻击方式;第三种是圣遗物类,主要包含属性为装备部位和buff效果,在背包类中聚合了这三个物品类,包含使用,删除查找三个方法,可对三种物品类列表进行操作。

人物系统:人物作为基类拥有最基础的姓名属性,和移动方法。人物下有三个子类:角色、怪物、NPC。 每个角色拥有姓名、元素属性、生命值、攻击力、暴击率、暴击伤害、防御力属性,拥有移动、普通攻击、元素战技、元素爆发等与战斗相关的方法, 同时也有触发对话以及拾取物品的大世界交互方法,同时每个角色拥有自己的语音和动画。 为实现大世界战斗和回合制战斗两种战斗方式,怪物基类下分为大世界怪物和BOSS怪物两类怪物。 与角色类似,怪物拥有姓名、元素属性、生命值、攻击力、暴击率、暴击伤害、防御力属性。 大世界怪物可以在野外游荡,发现玩家时攻击玩家,同时可以释放技能。 BOSS怪物在玩家靠近时会触发回合制战斗,拥有多个技能。 每个怪物也有自己的语音和动画。 NPC有对话文本属性,当玩家与其对话时展示对话内容。

UI界面系统:对于UI系统我们采用了状态模式设计,由游戏界面类负责更新UI系统类的状态变量,UI系统类负责创建游戏界面类子类的对象并进行相应操作,在进行子类的添加的时候可以做到开闭原则。

UI界面系统中的场景切换功能
状态模式:因为游戏当中同一个时刻只能存在一个场景,且场景之间可以切换,所以使用状态模式设计场景切换
Unity 支持 Mono 和 IL2CPP 两种编译模式。 Mono 编译的游戏它将C#脚本代码编译为IL中间语言打包到游戏客户端,在游戏执行时候编译为汇编代码。这类中间语言容易被反编译为 C#源代码。而IL2CPP编译,虽然提升了游戏安全性,但还是存在被攻击的风险。一些C# 反编译相关的工具比如传统的 ILDASM、PEBroswerDbg、GrayWolf、XenoCode 等,都可以将Unity程序反编译成C#代码。
参考网上解决方案的一种做法是:UPS保护,方案主要做了两个方面的保护:Mono 保护,IL2CPP 保护。Mono 保护的对象是游戏的主逻辑 dll:Assembly-CSharp.dll 和 Assembly-CSharp-firstpass.dll。IL2CPP 保护的对象是 metadata 文件:global-metadata.dat。具体步骤:
1.文件级加密 首先要做的是文件级加密,以达到保护文件的效果。加密前的脚本文件,我们可以看到 Assemply-CSharp.dll 可以被 PE 工具正确的识别。前面演示过,通过这个文件可以直接反编译得到源代码。加密后的脚本文件,PE 工具无法识别出,其他反编译工具也无法反编译。

2.方法加密: 经过文件加密后的游戏安全性的确是提升了,但是攻击者还是可以从内存中得到明文文件,然后进行反编译。因此要对方法进行加密。经过方法加密后,就算攻击者得到了内存中的明文脚本文件,也无法反编译。工具直接报错,完全看不到原始的代码信息。如图中所示,绿色部分都是反编译失败的错误提示。

3.字符串信息加密: 方法加密之后,还存在很多的字符串信息,比如方法名和类名。于是我们要做进一步加密,把字符串信息也处理掉。加密结果可以看到,代码和类名方法名完全不可读。

4.指令保护: 除了方法加密,我们在指令方面也进行了保护。经过加密后的 opcode 对应的不再是 Mono 中标准的 IL 指令。
参考:Unity安全风险
总结:
上述的对程序的多级加密已经集成在了unity的编辑器里,所以我们只需要在Unity里面勾选 Security Setting 页面的 Enable Security Build 复选框就可以实现程序的加密,防止被反编译泄露源码。
本项目为2dRPG单机游戏,权限只分为玩家权限。
需求分析时提出的问题:

Q1场景类:
Q2武器:

在需求分析时的类图做得比较简单,不能有效的反映出类与类之间的关系和类的结构。在本次的设计中,我们完善了类图的设计。


任务安排:

| 学号 | 工作内容 | 贡献度 |
|---|---|---|
| 022000515 林翔 | 数据库表结构设计 | 12% |
| 222000303 陈博源 | 功能模块层次图 | 11% |
| 222000203 陈英杰 | 答辩评审表、数据库设计说明书 | 11% |
| 221900204 陈鸿越 | 答辩ppt | 10 % |
| 222000326 严文斌 | 系统设计说明书、类图、博客编写 | 14% |
| 222000324 郑淏 | 类图、用况图 | 15% |
| 222000421 莫梓民 | 数据库E-R图 | 12% |
| 222000323 岳晓涵 | 类图、活动图、体系结构设计 | 15% |
我们为之后的开发初步设定了4个里程碑
(4.18-5.7,共4周)
里程碑1:像素原神1.0版本
产出:
| 时间 | 计划 |
|---|---|
| 第0.5周 | 完成对于剧情相关资料收集,初步设计故事线,学习unity基本使用,制作人物动画并导入项目 |
| 第1周 | 设计主线剧情,对任务以及NPC对话内容进行编写,继续学习unity同时初步完成对于地图场景的搭建以及NPC的摆放,设计初始界面 |
| 第2周 | 完善剧情设定,设计支线任务剧情,优化场景设计,补充细节,实现初始界面 |
里程碑2:像素原神1.1版本
产出:
| 时间 | 计划 |
|---|---|
| 第3周 | 完成主角的操作和NPC的交互,初步实现第一部分主线剧情,初步完成存档界面,完成第二部分主线设计,继续学习相关开发技能为下一阶段打基础 |
(5.9-6.11,共6周)
里程碑3:像素原神2.0版本(测试版本)
| 时间 | 计划 |
|---|---|
| 第4周 | 完成主线剧情设计,增加新人物并设计相应技能,完成背包界面的设计 |
| 第5周 | 设计支线剧情,增加新人物并设计相应技能,完成背包界面的设计,增加相应物品和武器,实现第二部分主线剧情,增加大世界怪物 |
| 第6周 | 实现主线剧情,完成支线剧情设计,完成人物界面,实现大世界战斗和简单回合制副本 |
| 第7周 | 实现支线剧情,同时对之前实现功能进行全面测试,放出试玩版本,收集玩家意见 |
里程碑4:像素原神3.0版本(正式版本)
| 时间 | 计划 |
|---|---|
| 第8周 | 整理玩家建议与意见,增加相应系统和玩法,修改瑕疵 |
| 第9周 | 测试并修复相应bug,发布正式版本 |
团队8人,预计分配4人前端、4人后端、2人美工、1人策划(可能一人身居多职),各角色具体分工如下:
地图搭建和游戏场景搭建,和图标、按键、菜单等等的界面布局。控制角色逻辑行为的代码编写,实现角色与游戏NPC、怪物、物品等等的交互,实现回合制战斗状态控制等。游戏角色形象、物品外观、UI组件外观等的设计,同时负责角色、怪物动作动画的制作等。| 队员 | 团队角色 |
|---|---|
| 严文斌 | 后端、美工 |
| 岳晓涵 | 后端、策划 |
| 郑淏 | 后端、美工 |
| 林翔 | 前端 |
| 陈博源 | 前端 |
| 陈英杰 | 后端 |
| 陈鸿越 | 前端 |
| 莫梓民 | 前端 |
我们为之后的开发初步设定了4个里程碑
(4.18-5.7,共4周)
里程碑1:像素原神1.0版本
产出:
| 时间 | 计划 | 角色分工 |
|---|---|---|
| 第0.5周 | 完成对于剧情相关资料收集,初步设计故事线,学习unity基本使用,制作人物动画并导入项目 | 后端:完成Creator Kit:RPG框架的搭建,熟悉框架的结构和使用方法。前端:学习Creator Kit:RPG框架中搭建地图的方法。美工:制作部分角色、NPC的概念图及动作设计及地图元素的绘制。 |
| 第1周 | 设计主线剧情,对任务以及NPC对话内容进行编写,继续学习unity同时初步完成对于地图场景的搭建以及NPC.的摆放,设计初始界面 | 后端:完成部分NPC的基本对话功能。前端:完成初始地图搭建,放置部分NPC。 |
| 第2周 | 完善剧情设定,设计支线任务剧情,优化场景设计,补充细节,实现初始界面 | 后端:学习游戏场景切换方法。前端:完善初始场景,继续搭建地图。策划:完成主线剧情大纲。美工:绘制更多角色形象及动作动画。 |
里程碑2:像素原神1.1版本
产出:
| 时间 | 计划 | 角色分工 |
|---|---|---|
| 第3周 | 完成主角的移动和NPC的交互,初步实现第一部分主线剧情,初步完成存档界面,完成第二部分主线设计,继续学习相关开发技能为下一阶段打基础 | 后端:实现角色角色动作切换和NPC交互,实现存档功能。前端:搭建地图,完成游戏界面图标分布。策划:完成主线第一章剧本。 |
(5.9-6.11,共6周)
里程碑3:像素原神2.0版本(测试版本)
| 时间 | 计划 | 角色分工 |
|---|---|---|
| 第4周 | 完成主线剧情设计,增加新人物并设计相应技能,完成背包界面的设计 | 后端:实现角色释放技能的功能,完成第一章主线剧情的全部交互。前端:实现游戏主界面、背包界面等。搭建新地图美工:设计大世界怪物外形和动作动画。 |
| 第5周 | 设计支线剧情,增加新人物并设计相应技能,完成背包界面的设计,增加相应物品和武器,实现第二部分主线剧情,增加大世界怪物,基本实现大世界战斗 | 后端:实现大世界怪物动作逻辑,实现基本的大世界战斗。前端:继续搭建地图场景。美工:继续绘制角色外形、动作动画、地图元素策划:完成部分支线任务剧本。 |
| 第6周 | 实现主线剧情,完成支线剧情设计,完成人物界面,实现简单回合制副本 | 后端:实现简单回合制战斗副本。前端:实现人物管理界面。美工:继续搭建剧情需要的地图。策划:完成第二章主线剧情和支线剧情。 |
| 第7周 | 实现支线剧情,同时对之前实现功能进行全面测试,放出试玩版本,收集玩家意见 | 后端:实现简单回合制战斗副本。美工:继续搭建剧情需要的地图。 |
里程碑4:像素原神3.0版本(正式版本)
| 时间 | 计划 | 角色分工 |
|---|---|---|
| 第8周 | 整理玩家建议与意见,增加相应系统和玩法,修改瑕疵 | 后端、前端:根据玩家建议和意见对游戏进行优化。 |
| 第9周 | 测试并修复相应bug,发布正式版本 |
1.是体系结构设计还是业务流程图?请参考课程介绍和其他组的体系结构设计修改。
2.功能模块层次图中各个构件包含的功能是否合理?
3.考虑到角色在不同状态下的行为不同,运用状态模式,不错!但是请将状态模式表达准确。