《消亡的海》游戏开发日志 01

2019-11-29  本文已影响0人  杰克有茶

写在前面

我是一名初学的游戏开发者,写日志有三理由:

1、分享过程,希望能帮到其他开发者

2、暴露问题,让大佬指出我的问题所在

3、希望受到监督

游戏简要构思

《消亡的海》(暂命名)是一款RPG游戏,我心目中对游戏的各项元素排名:剧情 > 战斗(核心玩法) > 商业 > 技术架构,因此我会以一个自己原创短篇小说作为剧情支撑。游戏整体玩法大致是传统日式RPG,但战斗模式不想做成回合制。所以我会先做出一个无战斗的游戏,再在后期加入战斗(因此战斗发生的模式会像轩辕剑、八方旅人那样的遭遇式)。

技术架构

开发平台选择Unity,核心语言就是C#了。

由于游戏本身不大,所以用单场景+多单例模式,组件构造大致如下:

主要的单例有:

①ControlManager.cs,玩家的操作行为写在这里;

②UIManager.cs,控制切换场景(由于我是单场景,这里切换场景指的是切换Panel)UI组件变换、生成预置体等;

③GameCore.cs,不继承Mono,游戏所有数据都在这个单例中;

④PrefabCollection.cs,以及其他的Collection单例,收集Unity的绑定组件,方便找到调用的地方。

为了后期便于管理,我把类分为两大类:

1、Unity类,我称为UI类,即继承Mono的类,例如PrefabCollection.cs、AnimationManager、HUDWindowCollection.cs(场景组件),统一由UIManager.cs进行管理;

2、原生类,我称为数据类,即不继续Mono的类,例如Dialog.cs、City.cs,统一由GameCore.cs(GameCore也是原生类)进行管理。

实现UI类和数据类分离(MVC模式吧),统一由ControlManager.cs来控制GameCore和UIManager。

实例化

我打算不考虑玩家内存大小,因为游戏本身不大,所以在每次实例化类时,都会先Copy一份实例,这样做起来比较方便玩家进行不同存档。例如:

对话类(class Dialog) 将所有实例化的对象加入List,从而在GameCore直接调用 深复制对象

关于深复制(之前踩过的坑)

如下图,我原本以为nums1.a应该是5,但实际上它变成了8,因为nums2和nums1指向的是同一个内存地址。所以如果要复制一个独立的新对象,一定要深复制。

尾:先写这些吧,最近要先写小说,写小说也是开发的一部分。

上一篇下一篇

猜你喜欢

热点阅读