Unity-门面模式(程序的入口类)

  程序的入口类

  

public class AppFacade : MonoBehaviour
{
    private static AppFacade _instance;
    static Dictionary<string, object> m_Managers = new Dictionary<string, object>();
    public AppFacade()
    {
    }

    public static AppFacade Instance {
        get {
            if (_instance == null)
            {
                _instance = new AppFacade();
            }
            return _instance;
        }
    }


    /// <summary>
    /// 添加管理器
    /// </summary>
    public void AddManager(string typeName, object obj)
    {
        if (!m_Managers.ContainsKey(typeName))
        {
            m_Managers.Add(typeName, obj);
        }
    }

    /// <summary>
    /// 添加Unity对象
    /// </summary>
    public T AddManager<T>(string typeName) where T : Component
    {
        object result = null;
        m_Managers.TryGetValue(typeName, out result);
        if (result != null)
        {
            return (T)result;
        }
        Component c = this.gameObject.AddComponent<T>();
        m_Managers.Add(typeName, c);
        return default(T);
    }

    /// <summary>
    /// 获取系统管理器
    /// </summary>
    public T GetManager<T>(string typeName) where T : class
    {
        if (!m_Managers.ContainsKey(typeName))
        {
            return default(T);
        }
        object manager = null;
        m_Managers.TryGetValue(typeName, out manager);
        return (T)manager;
    }

    /// <summary>
    /// 删除管理器
    /// </summary>
    public void RemoveManager(string typeName)
    {
        if (!m_Managers.ContainsKey(typeName))
        {
            return;
        }
        object manager = null;
        m_Managers.TryGetValue(typeName, out manager);
        Type type = manager.GetType();
        if (type.IsSubclassOf(typeof(MonoBehaviour)))
        {
            GameObject.Destroy((Component)manager);
        }
        m_Managers.Remove(typeName);
    }

}

  

posted @ 2019-07-20 15:13  给自己一点正能量!  阅读(680)  评论(0)    收藏  举报