Unity3d设计模式之单例模式
单例模式我相信是所有设计模式之中运用最广泛的设计模式之一。
今天我们就来看看在unity中如何使用单例模式,在unity中,我们分两种单例,一种是继承monobehavior的单例,一种是普通单例。
1.MonoBehavior单例
其实在unity中,如果脚本是继承monobehavior,那么使用起单例来更加简单。
只需要在Awake()里面,添加一句instance = this;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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.普通类的单例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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 { } } } |
那么问题也就来了,细心的读者会发现,如果项目中有很多个单例,那么我们就必须每次都写这些代码,有什么办法可以省去这些不必要的代码呢?有,那就是面向对象最重要的思想:继承。
今天我们就来学习下,自己封装一个单例类,只要项目中用到单例的话,就从这个单例类继承,把它变成单例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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() { } |
:http://www.cnblogs.com/CaomaoUnity3d/p/4732787.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!