写在前面
我是一名初学的游戏开发者,写日志有三理由:
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指向的是同一个内存地址。所以如果要复制一个独立的新对象,一定要深复制。
尾:先写这些吧,最近要先写小说,写小说也是开发的一部分。
网友评论