Unity3d设计模式之单例模式
2015-08-15 17:16
197 查看
单例模式我相信是所有设计模式之中运用最广泛的设计模式之一。
今天我们就来看看在unity中如何使用单例模式,在unity中,我们分两种单例,一种是继承monobehavior的单例,一种是普通单例。
1.MonoBehavior单例
其实在unity中,如果脚本是继承monobehavior,那么使用起单例来更加简单。
只需要在Awake()里面,添加一句instance = this;
2.普通类的单例
那么问题也就来了,细心的读者会发现,如果项目中有很多个单例,那么我们就必须每次都写这些代码,有什么办法可以省去这些不必要的代码呢?有,那就是面向对象最重要的思想:继承。
今天我们就来学习下,自己封装一个单例类,只要项目中用到单例的话,就从这个单例类继承,把它变成单例。
今天我们就来看看在unity中如何使用单例模式,在unity中,我们分两种单例,一种是继承monobehavior的单例,一种是普通单例。
1.MonoBehavior单例
其实在unity中,如果脚本是继承monobehavior,那么使用起单例来更加简单。
只需要在Awake()里面,添加一句instance = this;
using UnityEngine; using System.Collections; public class test2 : MonoBehaviour { public static test2 instance; // Use this for initialization void Awake () { instance = this; } // Update is called once per frame void Update () { } }
2.普通类的单例
using UnityEngine; using System.Collections; public class test2 { private static test2 instance; public static test2 Instance { get { if (null == instance) instance = new test2(); return instance; } set { } } }
那么问题也就来了,细心的读者会发现,如果项目中有很多个单例,那么我们就必须每次都写这些代码,有什么办法可以省去这些不必要的代码呢?有,那就是面向对象最重要的思想:继承。
今天我们就来学习下,自己封装一个单例类,只要项目中用到单例的话,就从这个单例类继承,把它变成单例。
public class Singleton<T> where T : new() { private static T s_singleton = default(T); private static object s_objectLock = new object(); public static T singleton { get { if (Singleton<T>.s_singleton == null) { object obj; Monitor.Enter(obj = Singleton<T>.s_objectLock);//加锁防止多线程创建单例 try { if (Singleton<T>.s_singleton == null) { Singleton<T>.s_singleton = ((default(T) == null) ? Activator.CreateInstance<T>() : default(T));//创建单例的实例 } } finally { Monitor.Exit(obj); } } return Singleton<T>.s_singleton; } } protected Singleton() { }
相关文章推荐
- Unity 3D学习笔记(二)—— 脚本01
- Unity shader: Bank BRDF
- unity3d ngui3.7 新手引导遮罩和高亮实现
- Unity Shader: Cook-Torrance
- Unity3D 5.1.2破解(亲测有效)
- 使用Unity3D的50个技巧:Unity3D最佳实践(下)
- Unity Asset(1)Pocket RPG Weapon Trails 武器拖尾效果
- unity3D实际的原始视频游戏开发系列讲座10它《战斗:外来入侵》在第一季度游戏开发
- Unity Critter地图导出到服务器配置
- Unity用shader显示物体线框
- unity, 显示像素图,以及iOS下像素图变模糊解决办法
- Unity学习
- unity, iOS集成微信
- Unity Shader 学习笔记 (二) 简单颜色Shader
- Unity3D视图与iOS视图结合
- Unity人工智能学习—确定性AI算法之追踪算法二
- (大数据工程师学习路径)第三步 Git Community Book----高级技能
- 关于在3dmax 导入再导出FBX到unity中的尺寸选项问题
- Unity AssetBundle爬坑手记
- Unity Shader 学习笔记 (一) 创建Shader自带代码解读