# Unity 游戏框架搭建 2017(一)概述
为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频[ 《Unity项目架构设计与开发管理》 ](http://v.qq.com/boke/page/d/0/u/d016340mkcu.html "《Unity项目架构设计与开发管理》")对于我这种初学者来说全是干货。简单的总结了一下,以后慢慢提炼。
关于Unity的架构有如下几种常用的方式。
## 1.EmptyGO:
在 Hierarchy 上创建一个空的GameObject,然后挂上所有与 GameObject 无关的逻辑控制的脚本。使用GameObject.Find() 访问对象数据。
缺点:逻辑代码散落在各处,不适合大型项目。
## 2.Simple GameManager:
所有与 GameObject 无关的逻辑都放在一个单例中。
缺点:单一文件过于庞大。
## 3.Manager Of Managers:
将不同的功能单独管理。如下:
* MainManager: 作为入口管理器。
* EventManager: 消息管理。
* GUIManager: 图形视图管理。
* AudioManager: 音效管理。
* PoolManager: GameObject管理(减少动态开辟内存消耗,减少GC)。
## 实现一个简单的 PoolManager:
```cs
// 存储动可服用的GameObject。
private List<GameObject> dormantObjects = new List<GameObject>();
// 在dormantObjects获取与go类型相同的GameObject,如果没有则new一个。
public GameObject Spawn(GameObject go)
{
GameObject temp = null;
if (dormantObjects.Count > 0)
{
foreach (GameObject dob in dormantObjects)
{
if (dob.name == go.name)
{
// Find an available GameObject
temp = dob;
dormantObjects.Remove(temp);
return temp;
}
}
}
// Now Instantiate a new GameObject.
temp = GameObject.Instantialte(go) as GameObject;
temp.name = go.name;
return temp;
}
// 将用完的GameObject放入dormantObjects中
public void Despawn(GameObject go)
{
go.transform.parent = PoolManager.transform;
go.SetActive(false);
dormantObject.Add(go);
Trim();
}
//FIFO 如果dormantObjects大于最大个数则将之前的GameObject都推出来。
public void Trim()
{
while (dormantObjects.Count > Capacity)
{
GameObject dob = dormantObjects[0];
dormantObjects.RemoveAt(0);
Destroy(dob);
}
}
```
### 缺点:
* 不能管理prefabs。
* 没有进行分类。
更好的实现方式是将一个PoolManager分成:
* 若干个 SpawnPool。
- 每个 SpawnPool 分成 PrefabPool 和 PoolManager。
* PrefabPool 负责 Prefab的加载和卸载。
* PoolManager 与之前的 PoolMananger 功能一样,负责 GameObject 的 Spawn、Despawn 和 Trim。
## 要注意的是:
* 每个 SpawnPool 是 EmeptyGO。
* 每个 PoolManager 管理两个 List (Active,Deactive)。
讲了一堆,最后告诉有一个NB的插件叫 PoolManager- -。
* LevelManager: 关卡管理。
推荐插件: MadLevelManager。
GameManager: 游戏管理。
[C#程序员整理的Unity 3D笔记(十二):Unity3D之单体模式实现GameManager](http://www.tuicool.com/articles/u6NN7v)
* SaveManager: 配置管理。
* 实现 Resume,功能玩到一半数据临时存储。
推荐 SaveManager 插件。可以 Load、Save 均采用二进制(快!!!)
所有 C# 类型都可以做 Serialize。
数据混淆,截屏操作。
MenuManager 菜单管理。
## 4.将 View 和 Model 之间增加一个媒介层。
MVCS:Strange IOC 插件。
MVVM:uFrame 插件。
## 5. ECS(Entity Component Based System)
Unity 是基于 ECS,比较适合 GamePlay 模块使用。
还有比较有名的 [Entitas-CSharp](https://github.com/sschmid/Entitas-CSharp)
此篇的内容就这些。
## 更多内容
* QFramework 地址:[https://github.com/liangxiegame/QFramework](https://github.com/liangxiegame/QFramework)
* QQ 交流群:[623597263](http://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce66)
* **Unity 进阶小班**:
* 主要训练内容:
* 框架搭建训练(第一年)
* 跟着案例学 Shader(第一年)
* 副业的孵化(第二年、第三年)
* 权益、授课形式等具体详情请查看[《小班产品手册》](https://liangxiegame.com/master/intro):https://liangxiegame.com/master/intro
* 关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。
![](http://file.liangxiegame.com/38eccb55-40b2-4845-93d6-f5fb50ff9492.png)
- 正文
- Unity 游戏框架搭建 2017(一)概述
- Unity 游戏框架搭建 2017(二)单例的模板
- Unity 游戏框架搭建 2017(三)MonoBehaviour 单例的模板
- Unity 游戏框架搭建 2017(四)简易有限状态机
- Unity 游戏框架搭建 2017(五)简易消息机制
- Unity 游戏框架搭建 2017 (六) 关于框架的一些好文和一些思考
- Unity 游戏框架搭建 2017 (七) 减少加班利器-QApp类
- Unity 游戏框架搭建 2017 (八) 减少加班利器-QLog
- Unity 游戏框架搭建 2017 (九) 减少加班利器-QConsole
- Unity 游戏框架搭建 2017 (十) QFramework v0.0.2小结
- Unity 游戏框架搭建 2017 (十一) 简易 AssetBundle 打包工具 (一)
- Unity 游戏框架搭建 2017 (十二) 简易 AssetBundle 打包工具 (二)
- Unity 游戏框架搭建 2017 (十三) 无需继承的单例的模板
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSingleton (零) QuickStart
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSingleton (一) Singleton 单例实现
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSingleton (二) MonoSingleton单例实现
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSignleton (三) 通过属性器实现 Singleton
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSingleton (四) 属性器实现 Mono 单例
- Unity 游戏框架搭建 2017 (十四) 优雅的 QSingleton (五) 优雅地进行GameObject命名
- Unity 游戏框架搭建 2017 (十五) 优雅的 QChain (零)
- Unity 游戏框架搭建 2017 (十六) v0.0.3 架构调整
- Unity 游戏框架搭建 2017 (十七) 静态扩展GameObject 实现链式编程
- Unity 游戏框架搭建 2017 (十八) 静态扩展 + 泛型实现 transform 的链式编程
- Unity 游戏框架搭建 2017 (十九) 简易对象池
- Unity 游戏框架搭建 2017 (二十) 安全的对象池
- Unity 游戏框架搭建 2017 (二十一) 使用对象池时的一些细节
- Unity 游戏框架搭建 2017 (二十二) 简易引用计数器
- Unity 游戏框架搭建 2017 (二十三) 重构小工具 Platform
- Unity 游戏框架搭建 2017 (二十四) 小结