Unity游戏框架搭建(一)概述

为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频“Unity项目架构设计与开发管理”,对于我这种初学者来说全是干货。简单的总结了一下,以后慢慢提炼。

关于统一的架构有如下几种常用的方式。

1.EmptyGO:

在层次结构上创建一个空的游戏物体,然后挂上所有与游戏对象无关的逻辑控制的脚本。使用GameObject.Find()访问对象数据。

缺点:逻辑代码散落在各处,不适合大型项目。

2.简单的GameManager:

所有与GameObject无关的逻辑都放在一个单例中。缺点:单一文件过于庞大。

3.经理人经理:

将不同的功能单独管理如下:

MainManager:作为入口管理器。

EventManager:消息管理。

GUIManager:图形视图管理。

AudioManager:音效管理。

PoolManager:GameObject管理(减少动态开辟内存消耗,减少GC)。

实现一个简单的PoolManager

//存储动可服用的游戏物体私人列表< 游戏物体> dormantObjects = 新列表< 游戏物体>(); //在dormantObjects获取与去类型相同的游戏物体,如果没有则新的一个。公共游戏物体菌种(游戏物体进入){ 游戏物体温度= 零; 如果(dormantObjects 。计数> 0 ){ 的foreach (游戏物体DOB 中dormantObjects ){ 如果(dob 。名字== 去。name ){ //找到一个可用的GameObject temp = dob ; dormantObjects 。删除(temp ); 返回温度; } } } //现在实例化一个新的GameObject。temp = GameObject 。Instantialte (go )作为GameObject ; 温度。name = go 。名称; 返回温度;}//将用完的游戏对象放入dormantObjects中的公共无效Despawn (游戏物体进入){ 去。变换。parent = PoolManager 。变换; 去吧。SetActive (false ); dormantObject 。添加(去); 修剪(); }// FIFO如果dormantObjects大于最大个数则将之前的游戏对象都推出来的公共空隙修剪(){ 当(dormantObjects 。计数> 容量){ 游戏物体DOB = dormantObjects [ 0 ]; dormantObjects 。RemoveAt (0 ); 毁灭(dob ); } }

缺点: 不能管理prefabs。 没有进行分类。更好的实现方式是将一个PoolManager分成:若干个SpawnPool。每个SpawnPool分成PrefabPool和PoolManager。PrefabPool负责预装的加载和卸载。PoolManager与之前的PoolMananger功能一样,负责游戏对象的菌种,Despawn和修剪。

要注意的是: 每个SpawnPool是EmeptyGO。 每个PoolManager管理两个列表(Active,Deactive)。

讲了一堆,最后告诉有一个NB的插件叫Pool Manager- - 。

LevelManager:关卡管理。推荐插件:MadLevelManager。GameManager:游戏管理 。C#程序员整理的Unity 3D笔记(十二):Unity3D之单体模式实现GameManager

SaveManager:配置管理。

实现Resume,功能玩到一半数据临时存储。推荐SaveManager插件。可以加载,保存均采用二进制(快!!!)所有C#类型都可以做序列化。数据混淆,截屏操作。MenuManager菜单管理。

4.将视图和模型之间增加一个媒介层。

MVCS:StrangeIOC插件。

MVVM:uFrame插件。

你可能感兴趣的:(Unity游戏框架搭建(一)概述)