Unity3d中的單例模式
阿新 • • 發佈:2018-12-09
C#中單例的實現:
public class SceneMgr
{
private static SceneMgr _Instance;
/// <summary>
/// 只讀
/// </summary>
public static SceneMgr Instance
{
get
{
if(_Instance==null)
{
_Instance = new SceneMgr();
}
return _Instance;
}
}
public void TestLog()
{
Debug.Log("執行單例");
}
}
Unity中繼承MonoBehaviour下的單例
Unity中繼承MonoBehaviour指令碼有兩個特性: 1. MonoBehaviour不能使用建構函式進行例項化,只能掛載在GameObject上 2. 當切換場景時,當前場景中的GameObject都會被銷燬,這種情況下,單例物件也會被銷燬。 如果不希望切換場景時,單例被銷燬需要使用DontDestroyOnLoad(GameObject obj)函式。程式碼如下
public class BoxCtrl : MonoBehaviour
{
private static BoxCtrl _Instance;
public static BoxCtrl Instance
{
get
{
if(_Instance==null)
{
//建立一個新的物體
GameObject obj = new GameObject("BoxCtrl");
//將單例掛載在物體上
_Instance = obj.AddComponent<BoxCtrl>();
//使得載入場景時候,物體不會被摧毀
DontDestroyOnLoad(obj);
}
return _Instance;
}
}
public void Test()
{
Debug.Log("執行BoxCtrl單例");
}
}
還有一種簡單的單例方法,這種單例方法很簡單,但是在當前場景中只能存在一個該指令碼。
public class BoxCtrl : MonoBehaviour
{
public static BoxCtrl Instance;
void Awake()
{
Instance = this;
}
}