1. 程式人生 > >Unity3d中的單例模式

Unity3d中的單例模式

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;
    }
}