博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity 单例写法
阅读量:7011 次
发布时间:2019-06-28

本文共 1864 字,大约阅读时间需要 6 分钟。

https://www.cnblogs.com/SHOR/p/5192046.html

借鉴自:http://www.cnblogs.com/CodeCabin/p/unity_global_manager.html

实现复杂一些的全局控制,如切换游戏关卡等操作,更常用的方式是使用单例类。

单例类的实现又分为两种:

  • 继承自MonoBehaviour的单例类
  • 纯C#的单例类

前者的优点是:

  • 可以在Inspector中显示,便于赋值和查看变量等;
  • 可以利用MonoBehaviour的接口;
  • 可以使用Coroutine。
  • 等等。

缺点也很多,主流的观点是能不继承MonoBehaviour就不要继承。

纯C#的单例类

实现起来简洁,易于理解。

普通的写法,不考虑多线程

public class MyClass{    private static readonly MyClass _instance = new MyClass();    public static Class Instance {         get {             return _instance;         }     }         private MyClass() {}}

线程安全的写法

检查两次。C#中使用lock关键字。

public class MyClass{    private static volatile MyClass _instance;    private static object _lock = new object();     public static MyClass Instance    {        get        {            if (_instance == null)            {                lock(_lock)                {                    if (_instance == null)                         _instance = new MyClass();                }            }            return _instance;        }    }     private MyClass() {}}

基于MonoBehaviour的单例类

普通的写法

利用了Unity的运行机制,从Awake处获取Unity创建的对象作为单例。

注意在Unity中不要使用new来创建MonoBehaviour实例。

public class MyClass : MonoBehaviour{    static MyClass _instance;    void Awake () {        _instance = this;    }    public static MyClass Instance {        get {            // 不需要再检查变量是否为null            return _instance;        }    }}

持久化的写法

使用DontDestroyOnLoad方法

public class MyClass : MonoBehaviour {     static MyClass _instance;     public static MyClass Instance    {      if (_instance == null)  // 如果没有找到      {                                                GameObject go = new GameObject("_MyClass"); // 创建一个新的GameObject         DontDestroyOnLoad(go);  // 防止被销毁         _instance = go.AddComponent
(); // 将实例挂载到GameObject上   }   return _instance; }}

 

转载于:https://www.cnblogs.com/alps/p/9224392.html

你可能感兴趣的文章
阿里巴巴集团CTO王坚:云计算让理想平等
查看>>
《中国人工智能学会通讯》——11.30 深度迁移学习
查看>>
Dell EMC扩充数据保护产品线 Data Domain增强云分层功能
查看>>
美柚社区精选:贴心宝妈的八大育儿经验
查看>>
走进医疗明星企业之北京天坛普华医院
查看>>
一点资讯电影贴片广告以假乱真
查看>>
曙光出炉“数据中国加速计划”
查看>>
中国制造2025新机遇 机器视觉行业爆发
查看>>
中国工商银行阿根廷分行用数据运营展现本地特色
查看>>
使用闪存存储的优势与注意事项
查看>>
网络钓鱼防不胜防:大型科技公司竟被骗逾1亿美元
查看>>
网络间谍活动月光迷宫已演变成Turla
查看>>
欧洲运营商展开5GTango项目 应对特定行业市场
查看>>
Windows 10创作者更新将改进蓝牙功能
查看>>
睿联嘉业边缘融合大屏幕多媒体会议系统方案
查看>>
凯立德货车专用导航 应“运”而生
查看>>
聊天机器人真正的潜力,潜藏在个人金融领域
查看>>
英特尔或推可超频Kaby Lake酷睿i3处理器: 重拾赛扬300A荣光?
查看>>
要想在未来立足 微软等软件公司就必须折本研发硬件
查看>>
QTP使用中的陷阱
查看>>