Unity3D中的单例类
来源:互联网 发布:stc89c52单片机的优点 编辑:程序博客网 时间:2024/06/15 16:35
本文是我在Unity蛮牛上发的一个帖子,现在转到自己的博客上来。
这篇是我在逛国外论坛的时候看到的一篇讨论,内容的质量还不错,正好我在Unity蛮牛做翻译版块的版主,所以我就大概翻译了一下放到论坛里供大家一起学习讨论。
我们在做开发的时候,常常会一些类的变量进行访问和管理,有位程序猿就问:“在Unity3D中,有没有什么方法可以创建一个可以全局访问的单例管理类啊?然后这个类不需要我随时把它挂在场景中!”
然后有位技术大大就解答说:“这要看具体情况了,在Unity3D中一般有两种单例类!”
1、继承自MonoBehaviour,作为组件挂在GameObject身上。
2、不继承MonoBehaviour,作为一个单独的类。
下面是代码:
public class MainComponentManger {private static MainComponentManger instance;public static void CreateInstance () { if (instance == null) { instance = new MainComponentManger (); GameObject go = GameObject.Find ("Main"); if (go == null) { go = new GameObject ("Main"); instance.main = go; // important: make game object persistent: Object.DontDestroyOnLoad (go); } // trigger instantiation of other singletons Component c = MenuManager.SharedInstance; // ... }}GameObject main;public static MainComponentManger SharedInstance { get { if (instance == null) { CreateInstance (); } return instance; }}public static T AddMainComponent <T> () where T : UnityEngine.Component { T t = SharedInstance.main.GetComponent<T> (); if (t != null) { return t; } return SharedInstance.main.AddComponent <T> ();}
这个类主要由两部分组成:一个是用于创建单例的静态方法CreatInstance(),还有一个是用于挂载组件类的GameObject,main物体。
使用范例:
public class AudioManager : MonoBehaviour {private static AudioManager instance = null;public static AudioManager SharedInstance { get { if (instance == null) { instance = MainComponentManger.AddMainComponent<AudioManager> (); } return instance; }}
本来故事就到此为止了,于是本着分享的精神,我把我们之前技术中写过的一个单例类也拿出来分享给大家。
public class Singleton<T> : MonoBehaviourwhere T : Component{ private static T instance; public static T Instance { get { if (instance == null) { instance = FindObjectOfType(typeof(T)) as T; if (instance == null) { GameObject obj = new GameObject(); DontDestroyOnLoad(obj); obj.hideFlags = HideFlags.HideInHierarchy; instance = obj.AddComponent<T>(); } } return instance; } }}
使用起来也很简单,下面是个例子:
Singleton<MonoBehaviour>.Instance.StartCoroutine(routine);
OK!这样就可以啦!有什么错误欢迎指出或者大家有什么好的建议也可以一起分享出来!
0 0
- Unity3D中的单例类
- Unity3D中的刚体运动
- Unity3D中的shader基础知识
- Unity3D中的shader基础知识
- Unity3D中的shader进阶
- Unity3d中的走路动画
- Unity3d中的碰撞
- unity3d中的http通信
- unity3d中的“联系”
- unity3d中的http通信
- unity3d中的http通信
- Unity3d中的公告板
- Unity3D中的委托使用
- Unity3d中的常见问题
- Unity3D 中的地形元素
- Unity3D中的碰撞器
- unity3d中的http通信
- Unity3D中的Socket通信
- Shell编程(运算符)
- 001三大类库01_String
- WPF:如何在工作线程中更新窗体的UI元素(Dispatcher机制)
- 1013. 数素数 (20)
- MyBatis 环境搭建及小试
- Unity3D中的单例类
- C++ extern关键字
- HDU 5407 CRB and Candies(数学 素数表+预处理+快速幂+乘法逆元)——多校练习10
- UIView 的Transform。(旋转,缩放,3D旋转)
- C/C++的类型安全
- Linux下利用backtrace追踪函数调用堆栈以及定位段错误
- Spring bean scopes example
- 安卓-ListView
- __weak与__block区别