Unity单例

1、非Mono单例:

 1 using System;
 2 using System.Reflection;
 3 using System.Collections.Generic;
 4 
 5 public static class Singleton<T> where T : class
 6 {
 7     static volatile T _instance;
 8     static object _lock = new object();
 9     
10     static Singleton()
11     {
12     }
13 
14     public static T Get()
15     {
16         if (_instance == null)
17         {
18             lock (_lock)
19             {
20                 if (_instance == null)
21                 {
22                     ConstructorInfo constructor = null;
23                     try
24                     {
25                         constructor = typeof(T).GetConstructor(BindingFlags.Instance |
26                                                                BindingFlags.NonPublic, null, new Type[0], null);
27                     }
28                     catch (Exception e)
29                     {
30                         throw e;
31                     }
32 
33                     if (constructor == null || constructor.IsAssembly)
34                     {
35                         throw new Exception(string.Format("A private or protected constructor is missing for '{0}'.", typeof(T).Name));
36                     }
37 
38                     _instance = (T)constructor.Invoke(null);
39                 }
40             }
41         }
42         return _instance;
43     }
44 }

  调用方法:Singleton<XXX>.Get(),XXX表示非继承MonoBehavior的类的类名。

2、Mono单例:

 1 using System;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 
 5 public static class MonoSingleton<T> where T : MonoBehaviour 
 6 { 
 7     private static T _instance; 
 8     
 9     public static T Get() 
10     { 
11         if (_instance == null) 
12         { 
13             _instance = UnityEngine.Object.FindObjectOfType<T>(); 
14         } 
15 
16         return _instance; 
17     } 
18 }

  调用方法:MonoSingleton<XXX>.Get(),XXX表示继承MonoBehavior的类的类名。

 

转载于:https://www.cnblogs.com/oy-caw/p/4682317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值