1. 程式人生 > >【Unity】非MonoBehaviour子類的單例管理

【Unity】非MonoBehaviour子類的單例管理

單例管理類程式碼

/**********************************************************************
 *Copyright(C) 2016 by zhiheng.shao
 *All rights reserved.
 *FileName:     SingletonContainer.cs
 *Author:       zhiheng.shao
 *Version:      1.0
 *UnityVersion:5.3.3f1
 *Date:         2016-04-20
 *Description:   
 *History:  
**********************************************************************/
using UnityEngine; using System.Collections.Generic; using System.Collections; namespace Rickshao.Singleton { public class SingletonContainer : Singleton<SingletonContainer> { public T GetInstance<T>() where T : new() { string singletonName = typeof
(T).ToString(); T singleton = Container<T>.Get(singletonName); if (singleton == null) { singleton = new T(); Container<T>.Set(singletonName, singleton); } return singleton; } private
static class Container<T> { private static Dictionary<string, T> m_Collections = new Dictionary<string, T>(); public static Dictionary<string, T> Collections { get { return m_Collections; } } public static T Get(string singletonName) { if (m_Collections.ContainsKey(singletonName)) { return (T)m_Collections[singletonName]; } return default(T); } public static void Set(string singletonName, T singleton) { m_Collections.Add(singletonName, singleton); } } } }

使用示例

/*********************************************************************************
 *Copyright(C) 2016 by zhiheng.shao email:[email protected]
 *All rights reserved.
 *FileName:     BaseFlow.cs
 *Author:       zhiheng.shao email:[email protected]
 *Version:      1.0
 *UnityVersion:5.3.5f1
 *Date:         2016-07-21
 *Description:   
 *History: 
**********************************************************************************/
using UnityEngine;
using System.Collections;
using Rickshao.StateMachine;
using Rickshao.Singleton;

//TODO: 換成單例
namespace KickBall.Main.GameFlow
{
    public abstract class BaseFlow<T> : IState<GameFlowController> where T : BaseFlow<T>, new()
    {
        public static T Instance 
        {
            get 
            {
                return SingletonContainer.Instance.GetInstance<T>();
            }
        }

        /// <summary> 獲取狀態名 </summary>
        /// <returns></returns>
        public string GetStateName() 
        {
            return GetType().ToString();
        }

        public abstract void Enter();

        public abstract void Exit();
    }
}

相關推薦

UnityMonoBehaviour管理

單例管理類程式碼 /********************************************************************** *Copyright(C) 20

UnityUGUI ScrollView 分頁 次拖拽滑動一頁

一,新建ScrollView ,目錄結構如圖: 二,在content下編輯需要顯示的關卡內容,這裡設定為一頁顯示一個button集合,14個button為一整頁,一次只顯示一頁內容: 下面上程式碼: using UnityEngine; using System

javascriptjavascript設計模式之模式

函數 設置 tin 私有 資源 公有 key fun 初始化 單例模式: 定義:單例模式之所以這麽叫,是因為它限制一個類只能有一個實例化對象。 實現方法:判斷實例是否存在,如果存在則直接返回,如果不存在就創建了再返回。(確保一個類只有一個實例對象) 特點: 命名空間提供者,

Java執行緒安全的模式----靜態內部類

單例模式作為一種常見的設計模式,在程式中非常常見,主要是為了保證一個類只有一個唯一的物件。 從簡單的“餓漢式”、“懶漢式”→利用 synchronized 和 複雜的“雙重校驗DCL模式”,是一個考慮執行緒安全的過程(其實靜態的餓漢式單例模式也是執行緒安全的,

Linux執行緒安全的模式

單例模式:一種設計模式,一個物件只能初始化一次。分為餓漢模式和懶漢模式。 單例中懶漢和餓漢的本質區別在於以下幾點: 1、餓漢式是執行緒安全的,在類建立的同時就已經建立好一個靜態的物件供系統使用,以後不在改變。懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行

Zookeeper01ubuntu下安裝zookeeper以及叢集

參考連結:http://zookeeper.apache.org/                 https://www.cnblogs.com/lyhc/p/6560993.html系統:烏班圖16.04虛擬機器(zk一般要求奇數臺節點):192.168.0.15    

hdu 5532最長遞增序列 時間復雜度 nlogn

int urn 思路 while 最小值 復雜 include hdu nlogn http://acm.split.hdu.edu.cn/showproblem.php?pid=5532 題意:由n個數組成的序列,如果去掉一個數後仍保持非遞增或者非遞減,則輸出YES,否

CSS純CSS另思路代替display、visibility解決選單延遲消失

  在設計子選單時候,需要實現當滑鼠移動到選單時候,子選單顯示,否則子選單都處於隱藏狀態。實現這個功能使用js的話很簡單實現,但是我想用純CSS,使用純CSS的話,就會遇到滑鼠移開選單後,子選單就馬上消失了(display:noe或者visibility:hidden),就滑

UnityUGUI Image元件檢視面板編輯器擴充套件(ImageEditor

問題描述     說到Unity的檢視面板編輯器擴充套件,相信大家都不會陌生。但是當你嘗試用同樣的方式去擴充套件UGUI的元件時,會發現根本沒有效果。 解決方案     這個問題的解決方案有兩個關鍵點: 用繼承的方式避開同系統編輯器擴充套件的衝突所擴充套件的編輯器類要繼承

unityps動畫轉為幀圖片

最近遇到一個情況,就是在安卓上無法正確播放videoPlayer的視訊。正好我們的視訊使用ps做的幀動畫,所以直接把視訊裡面的每一幀輸出為png再做成幀動畫就行了。方法也很簡單。版本為cc2015開啟psd-視窗-工作區-動感。可以看到我們的動畫。檔案-匯出-渲染視訊-pho

Unityunity3d FingerGestures 點 多點觸控 手勢

FingerGestures最大的好處就是結合unity3d進行多點觸控,手勢識別,編寫一次程式碼 ,通過配置來進行多平臺釋出 FingerGestures提供了3種不同的方法來檢測由使用者執行的拖動手勢。 方法1:使用預設的手勢事件 每個手指的手勢事件:為每個單獨的手

Unity基礎知識結構總結

art blog 知識結構 希望 article avi mod 更新 人機交互 前言 本篇以知識結構圖的形式對Unity引擎的經常使用基礎知識內容進行了總結和梳理。 假設你學了一點關於Unity引擎的知識,又認為太雜亂,那麽希望本篇會給你一些幫助。 相應引擎版本號:U

Unity關於Camera.cullingMask常用操作

mas 渲染 所有 常用操作 culling 關於 攝像機 攝像 color camera.cullingMask = ~(1 << x); // 渲染除去層x的所有層 camera.cullingMask &= ~(1 <

JAVA關於java中 .class.getResource("/").getPath()獲取路徑有空格的問題

() 獲取路徑 return url fig net java.net nbsp 相關信息 寫了一個web工程,在本地測試正確,但是部署到服務器上就出現錯誤。原因是讀取不到配置文件。 後來從打印出來的文件路徑中發現是用Java的class.getResource("/").

NPR真實感渲染實驗室

出了 csdn content length 更新 car type pretty art 寫在前面 前幾天在知乎看到一個問題——關於非實感圖形學或者風格化渲染有哪些好的書或者paper,我剛好接觸過一些就去裏面回答了一下。答完以後突然想在

BZOJ2216[Poi2011]Lightning Conductor 決策調性

隊列 節點 zoj blog output tdi 最小 class clas 【BZOJ2216】[Poi2011]Lightning Conductor Description 已知一個長度為n的序列a1,a2,...,an。對於每個1<=i<=n,

Python面向對象--的特殊成員方法

運行 turn 中一 new 返回值 析構 school pytho comm 類的特殊成員方法 1. __doc__  表示類的描述信息 class Func(object): ‘‘‘__doc__方法是用來打印類的描述信息‘‘‘ def te

鏈接偽(:hover)CSS背景圖片有閃動BUG

ref 重新 常用 底部 例如 ecc html 鏈接 cache 來源:http://www.css88.com/archives/744 -----------------------------------------------------------------

pythontime 和datetime型轉換,字符串型變量轉成日期型變量

-h with ptime 世紀 represent 字符串轉換 代碼 mes ear s1=‘20120125‘; 6 s2=‘20120216‘; 7 a=time.strptime(s1,‘%Y%m%d‘); 8 b=time.st

Unity開啟MSAA後模型出現網格黑線的問題

問題: 出現 角色 鎖定 問題 效率 什麽 shader pow 問題:角色的模型,在開啟MSAA後,某些視角下會出現模型網格黑線的問題。 經過很多嘗試後,最終的問題鎖定在Shader中Pow函數的計算上。 Pow函數的效率低下,每一遍的運算都會丟失精度,這會導致一些邊界值