普通类的写法
public class LanguageManager : MonoBehaviour
{
private static LanguageManager _instance;
public static LanguageManager Instance() {
if (_instance == null) {
_instance = FindObjectOfType<LanguageManager>();
if (_instance == null) {
GameObject go = new GameObject(typeof(LanguageManager).Name);
_instance= go.AddComponent<LanguageManager>();
}
}
return _instance;
}
}
扩展成一个单例的工具类
using UnityEngine;
/// <summary>
/// MonoBehaviour单例
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class SingletonMonoBehaviour<T> : MonoBehaviour where T : SingletonMonoBehaviour<T>
{
private static T m_Instance;
public static T Instance
{
get
{
if (m_Instance == null)
{
//查找场景是否增加了该类
m_Instance = FindObjectOfType<T>();
if (m_Instance == null)
{
GameObject singletonObject = new GameObject { name = typeof(T).Name };
m_Instance = singletonObject.AddComponent<T>();
DontDestroyOnLoad(singletonObject);
}
}
return m_Instance;
}
}
public static T getInstance()
{
return m_Instance;
}
protected virtual void OnDestroy()
{
m_Instance = null;
}
}
使用该类的就是
public class LogToFile : SingletonMonoBehaviour<LogToFile>
{
}