Unity_不继承Mono保持单例唯一性方法

小鸟游星野
小鸟游星野
发布于 2025-03-08 / 9 阅读
0
0

Unity_不继承Mono保持单例唯一性方法

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

public abstract class NoMonoSingleton<T> where T : class
{
    private static T instance;

    public static T Instance
    {
        get
        {
            if (instance == null)
            {
                //由于从没有存在泛型约束,导致可能T对象中没有公共的构建函数,而私有的构建函数是不能在自己类外访问的 导致写父类时没法去new
                //我们使用反射的构建函数来实现new对象
                //获取到一个私有的 无参数的 无绑定对象的 无修饰参数的构建函数
                // ConstructorInfo ctor = typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
                // if (ctor != null)
                // {
                //     instance = ctor.Invoke(null) as T;
                //     return instance;
                // }
                // else
                // {
                //     Debug.LogError("没有找到对应的构建函数");
                //     return null;
                // }
                
                instance = Activator.CreateInstance(typeof(T),true) as T;
                if (instance == null)
                {
                    Debug.LogError("没法构建对象");
                }
                return instance;
                
            }
            else
            {
                return instance;
            }
        }
    }
}


评论