面向对象06 单例

单例基类

使用单例模式,可以随时在脚本中调用管理器中的属性和方法。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Common
{
    /// <summary>
    /// 单例基类
    /// </summary>
    public class MonoSingleton<T> : MonoBehaviour where T:MonoSingleton<T>
    {
        private static T instance;

        public static T Instance {
            get
            {
                if(instance == null)
                {
                    instance = FindObjectOfType<T>();
                    if(instance == null)
                    {
                        new GameObject("Singleton of " + typeof(T)).AddComponent<T>();
                    }
                    else
                    {
                        instance.Init();
                    }
                }
                return instance;
            }
        }

        public void Awake()
        {
            if(instance == null)
            {
                instance = this as T;
                Init();
            }
        }

        public virtual void Init()
        {

        }
    }
}

单例子类

namespace Common
{
    /// <summary>
    /// XX管理器
    /// </summary>
    public class XXManger : MonoSingleton<XXManger>
    {
        public string Log { get; set; }
        public void Fun1()
        {
            print(Log);
        }
        public override void Init()
        {
            base.Init();
            Log = "fun1";
        }
    }
}

脚本调用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Common;

namespace Test
{
    /// <summary>
    /// 
    /// </summary>
    public class Test : MonoBehaviour
    {
        private void Awake()
        {
            XXManger.Instance.Fun1();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容