美文网首页
在Unity3D中使用单例模式

在Unity3D中使用单例模式

作者: HEEWIK啊昕 | 来源:发表于2019-04-11 21:00 被阅读0次

# 起因

通过构造函数的方式实现单例模式在Unity3D中存在问题,因每当挂载的组件被调用时,构造函数会被反复调用。

# 方法

第一步:创建工具类 Singleton

using UnityEngine;

/// <summary>

/// Inherit from this base class to create a singleton.

/// e.g. public class MyClassName : Singleton<MyClassName> {}

/// </summary>

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour

{

    // Check to see if we're about to be destroyed.

    private static bool m_ShuttingDown = false;

    private static object m_Lock = new object();

    private static T m_Instance;

    /// <summary>

    /// Access singleton instance through this propriety.

    /// </summary>

    public static T Instance

    {

        get

        {

            if (m_ShuttingDown)

            {

                Debug.LogWarning("[Singleton] Instance '" + typeof(T) +

                    "' already destroyed. Returning null.");

                return null;

            }

            lock (m_Lock)

            {

                if (m_Instance == null)

                {

                    // Search for existing instance.

                    m_Instance = (T)FindObjectOfType(typeof(T));

                    // Create new instance if one doesn't already exist.

                    if (m_Instance == null)

                    {

                        // Need to create a new GameObject to attach the singleton to.

                        var singletonObject = new GameObject();

                        m_Instance = singletonObject.AddComponent<T>();

                        singletonObject.name = typeof(T).ToString() + " (Singleton)";

                        // Make instance persistent.

                        DontDestroyOnLoad(singletonObject);

                    }

                }

                return m_Instance;

            }

        }

    }

    private void OnApplicationQuit()

    {

        m_ShuttingDown = true;

    }

    private void OnDestroy()

    {

        m_ShuttingDown = true;

    }

}

第二步:调整单例类

public class MagicWallManager : Singleton<MagicWallManager>

{

    //

    //  Single

    //

    protected MagicWallManager() { }

    void Awake(){

    … 初始化内容

    }

    。。。

}

使用方式

MagicWallManager.Instance

# REF

http://wiki.unity3d.com/index.php/Singleton

相关文章

  • Java单例模式(Singleton)

    1. 什么是单例模式 Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在...

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android 架构5 设计模式之单例模式

    前言 Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,...

  • @sychronized和dispatch_once,以及对单例

    在iOS开发中,经常使用到单例。单例是Cocoa中被广泛使用的设计模式之一。单例使得某个类在整个applicati...

  • Java几种单例模式的实现

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • Java -- 单例设计模式

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • java的单例模式——其实很简单

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • 单例模式学习

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类...

  • 设计模式--单例模式

    单例模式概述 单例模式实现方式 为什么要使用单例模式 单例模式实现方式 饿汉式 类加载后就会将对象加载到内存中,保...

网友评论

      本文标题:在Unity3D中使用单例模式

      本文链接:https://www.haomeiwen.com/subject/nwtfwqtx.html