目录
概述
项目的总体架构
单例基类
继承MonoBehaviour的单例基类
概述
一个具备一定规模的项目,一般都需要由不同人员合作完成,每个人的想法风格不相同,如果一开始没有定下基本的框架,会让实现时混乱不堪,而且无法保证代码的安全性。另外,在项目制作过程中难免会遇到需求变更的问题,如果因为一个模型或者按钮的改变而要大篇幅修改代码,也是一个非常不值得的事。因此,在项目的开始最初就要定好基调和结构。
本篇及本专栏(管理阶层Managers)参考了B站教程、Unity教程以及Unity基础框架从0到1 开篇,Unity游戏基本框架,Unity项目架构与开发管理等教程,定义了一个较简单基本的框架,仅作为基本举例参考。
项目的总体架构
在一个项目中需要管理的有声音、UI、资源加载、输入输出等,每一个都需要有管理模块,集中管理一些通用的工具。
举个例子:资源管理(ResLoadManager)中定义了从硬盘中加载各种资源的方法、路径等,这是在项目中常常会用到的,因此在ResLoadManager中集中定义和管理,当资源路径发生改变时,只要在ResLoadManager中修改即可。
在本例中设置的管理类一共有如下8个:
每一个Manager类都是单例,继承一个单例基类,以确保场上每种Manager只有唯一的一个。
单例基类有两种,其中一个是继承MonoBehaviour的单例基类,因为有一些工具中需要使用到MonoBehaviour定义的API。以下是单例基类的定义:
单例基类
using System;
//不继承Mono的单例
public class Single<T> where T: class
{
private static T _instance;
private static T instance;
public static T Instance
{
get
{
if (_instance == null)
{//判断如果场上没有实例,就动态创建一个实例
Type type= typeof(T);
_instance=Activator.CreateInstance(type,true) as T;
}
return _instance;
}
}
protected Single()
{
}
}
继承MonoBehaviour的单例基类
继承这个基类的Manager,需要在场景中实例化,可以自己在场景中建立一个空节点SingleMono挂载(或者代码中新建一个)
public class SingleMono<T> : MonoBehaviour where T : SingleMono<T>
{
private static T instance;
private static GameObject go;
public static T Instance
{
get
{
if(instance==null)
{
if(!go)
{//如果场内没有SingleMono节点,就建立一个
go = GameObject.Find("SingleMono");
if (!go)
go = new GameObject("SingleMono");
}
DontDestroyOnLoad(go);
instance=go.GetComponent<T>();//如果go上没有挂脚本
if(!instance)
{
instance = go.AddComponent<T>();
}
}
return instance;
}
}
}
所有的Manager类都继承这两个类之一,具体的实现方式详见本专栏的其他篇——管理阶层Managers