1. 程式人生 > >Unity中的單例模式基類

Unity中的單例模式基類

在unity中有兩種單例型別,一種是普通單例,即普通c#類,另一種是繼承了MonoBehaviour的單例。

普通單例:

public abstract class CSharpSingletion<T> where T : new() {  

    private static T instance;  
    public static T Instance  
    {  
        get  
        {  
            if (instance == null)  
            {  
                instance = new
T(); } return instance; } } }

繼承了MonoBehaviour的單例:

using UnityEngine;  
using System.Collections;  

public abstract class MonoSingletion<T> : MonoBehaviour where T : MonoBehaviour {  

    private static string rootName = "MonoSingletionRoot"
; private static GameObject monoSingletionRoot; private static T instance; public static T Instance { get { if (monoSingletionRoot == null) { monoSingletionRoot = GameObject.Find(rootName); if
(monoSingletionRoot == null) Debug.Log("please create a gameobject named " + rootName); } if (instance == null) { instance = monoSingletionRoot.GetComponent<T>(); if (instance == null) instance = monoSingletionRoot.AddComponent<T>(); } return instance; } } }

第二種需要在場景中建立一個名為MonoSingletionRoot的空物體,才能使用。

相關推薦

Unity模式

在unity中有兩種單例型別,一種是普通單例,即普通c#類,另一種是繼承了MonoBehaviour的單例。 普通單例: public abstract class CSharpSingletion<T> where T : new() {

Unity模式-

using System; using UnityEngine; /// <summary> /// 單例基類 /// </summary> public abstract class SingleBehaviour<T> : MonoBehaviour whe

c#模式

在unity3d中:using System.Collections; using System.Collections.Generic; using UnityEngine; public abstract class MonoSingleton<T> : M

在DLL使用模式輸出成員函式

DLL檔案中存放的是各類程式的函式,在需要用的時候載入DLL,取得相應的函式地址,然後呼叫DLL裡的函式,在編寫DLL的時候,除了編寫全域性函式,類的使用也是很有必要的,而如何匯出成員函式,我個人做了幾個總結。 1、匯出類 class _stdcall _declspe

模式通用

csharp esp brush sys instance type spa space create namespace System { /// <summary> /// 為指定的實例創建有線程安全的單例模式。實例必須有一個公開的,無參數

Python設計模式模式的實現及在Tornado的應用

實例 類變量 attribute rap all wrap 線程 ++ 出現 單例模式的實現方式 將類實例綁定到類變量上 class Singleton(object): _instance = None def new(cls, *args): if not isinst

python模式的執行緒安全問題

看了好多文章都是java實現的,特此寫一篇python的。 這個問題的兩種解決方案: 1.最簡單粗暴的就是在系統中先生成一個單例,就不存線上程安全問題了 2.用雙重同步鎖去實現,一把鎖加外面,一把鎖加里面: class Singleton(object): __instance

java模式

單例模式屬於設計模式中的一種,使用單例模式的類允許只存在一個物件例項。在java開發中,有好多種不同單例模式的寫法,而且運用的場景也各不相同,因此在java面試中屬於高頻考點,面試官會讓面試者手寫單例模式程式碼,所以提醒大家特別注意下。 這裡我就記錄下常見的幾種單例模式寫法:

Android模式的應用

單例模式在我們日常開發中或多或少都會遇見,使用場景也是多種多樣。今天根據專案中需求,正好用到了單例模式。在此記錄一下。 一、跟隨app存活 有什麼方式,可以讓一個變數跟隨app存活呢?是一個單例模式維護的靜態工具類。靜態工具類程式碼一般都使用單例模式來實現,可以防止建立多

模式的繼承和多型

一、單例模式   單例模式是一種常用的軟體設計模式,在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中應用該模式的類,一個類只能有一個例項,即一個類只有一個物件例項。 Java中單例模式定義:一個類有且僅有一個例項,並且自行例項化向整個

Python模式的實現方式

在 Python 中,我們可以用多種方法來實現單例模式: 使用模組 使用 new 使用裝飾器(decorator) 使用元類(metaclass) 使用模組 一、其實,Python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成 .pyc 檔案,當第二

設計模式(一):單例模式 JVM載入機制 JDK原始碼學習筆記——Enum列舉使用及原理 Java併發(七):雙重檢驗鎖定DCL Java併發(二):Java記憶體模型 Java併發(二):Java記憶體模型 Java併發(七):雙重檢驗鎖定DCL JDK原始碼學習筆記——Enum列舉使用及原理

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許一個例項存在。 單例模式一般體現在類宣告中,單例的類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。 適用場合: 需要頻繁的進行建立和銷燬的物件; 建立物

PHP模式實現

  class SingleInstance{                private function _construct(){                    }               private static $instance;              private fun

Unity是可以引用GameObject型別

為了證明這個 做一個很小的demo unity中建立四個物體,然後建兩個指令碼 haitao :單例類 rr:繼承Monobehiver,並且掛在場景中 執行場景,點選滑鼠後,場景中四個物體就沒刪除 證明Unity中

關於Unity呼叫和委託的使用方式

在Unity中,通過單例呼叫的方法中如果包含已初始化的GameObject,則呼叫後為null而報錯,這時應該使用委託的方式,舉例: public delegate void PanelDelegate(string column); public

java模式 原子 執行緒安全

public class Singleton {private static AtomicReference<Singleton> singleton = new AtomicReference<>();private Singleton() {}p

android模式的優缺點

    本篇文章主要介紹android開發中常用的單例模式和其中的幾種寫法,分析介紹在安卓開發中單例模式的優缺點。一、常見的幾種單例模式    首先來回顧一下幾種常見的單例模式,分析一下個自的優缺點    1.懶漢式    //懶漢式單例類.在第一次呼叫的時候例項化自己   

Unity C#模式

大家好,我是小唐,好久沒有發東西了,Unity裡面的指令碼因為都是繼承了MonoBehaciour類,所以建立單例模式的時候有些區別。下面就給大家分享一下Unity繼承了MonoBehaviour類的單例模式的寫法:using UnityEngine; using Syst

模式載入的實際案例分析(java)

類載入的步驟包括載入、準備、驗證、解析、初始化、使用等過程,本文主要分析例項程式碼,一步步分析得出輸出結果。要分析的例項程式碼如下: public class Singleton { private static Singleton instance = new Sing

Java模式的七種寫法

第一種(懶漢,執行緒不安全): Java程式碼 public class Singleton {      private static Singleton instance;      private Singleton (){}      public s