泛型单例

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

public abstract class BaseApp<T>:MonoBehaviour where T:class,new(){
	
	protected static T _instance;

	public static T getInstance(){
		return _instance;
	}

	private void Awake(){
		if(_instance==null){
			_instance=this as T;
			DontDestroyOnLoad(gameObject);
		}else{
			Destroy(gameObject);
		}
	}
	
	private void OnDestroy(){
		if(_instance!=null){
			if(_instance.Equals(this)){
				_instance=null;
			}
		}
	}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class App:BaseApp<App>{

	public void sayHello(){
		Debug.Log("Hello");
	}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test:MonoBehaviour {

	private void Start(){
		App.getInstance().sayHello();//output: Hello
	}
}

原文地址:https://www.cnblogs.com/kingBook/p/10930017.html