当前位置: 首页 > news >正文

桂林网站建设培训班今天足球赛事推荐

桂林网站建设培训班,今天足球赛事推荐,怎么做有声小说网站播音员,v2017网站开发目录 一、常规单例 二、Unity单例 1. MonoBehaviour单例 2.Simple单例 一、常规单例 常规的单例模式是指在普通类中实现单例模式的方式,而不依赖于任何框架或引擎。这种单例模式在许多编程语言中都非常常见,其主要特点是: 单例类有一个私…

目录

一、常规单例

二、Unity单例

1. MonoBehaviour单例

2.Simple单例


一、常规单例

        常规的单例模式是指在普通类中实现单例模式的方式,而不依赖于任何框架或引擎。这种单例模式在许多编程语言中都非常常见,其主要特点是:

  1. 单例类有一个私有的静态变量来保存唯一实例
  2. 提供一个公有的静态方法(通常是 Instance 方法)来获取唯一实例
  3. 将构造函数定义为私有,防止外部创建新的实例
public class Singleton
{// 用来保存唯一的实例private static Singleton instance = null;// 确保线程安全的锁对象private static readonly object lockObj = new object();// 私有构造函数,防止实例化private Singleton(){}// 获取唯一实例的公有静态方法public static Singleton Instance{get{// 双重检查锁定(double-checked locking)if (instance == null){lock (lockObj){if (instance == null){instance = new Singleton();}}}return instance;}}// 单例类中的方法示例public void DoSomething(){Console.WriteLine("Singleton instance is doing something.");}
}

二、Unity单例

1. MonoBehaviour单例

        适合在需要动态创建单例对象的场合,并能处理场景切换等复杂情况。

优点:

  1. 懒加载Instance属性只有在第一次访问时才会创建实例,这有助于减少不必要的开销。
  2. DontDestroyOnLoad:使用DontDestroyOnLoad保证实例在在场景切换时不被销毁。
  3. 防止重复创建单例:在销毁时设置mIsDestroying标记,防止对已销毁单例进行重复创建。

缺点:

  1. GameObject创建管理:它通过new GameObject().AddComponent<MonoBehaviourSingleton>()的方式创建实例,这在某些情况下过于灵活,可能导致难以管理和调试。
  2. 静态变量的潜在问题:如果游戏中对于对象销毁和创建的逻辑非常复杂,可能会因为静态变量状态互相干扰造成潜在的问题。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MonoBehaviourSingleton : MonoBehaviour
{static bool mIsDestroying;               //判断销毁的静态变量static MonoBehaviourSingleton mInstance;public static MonoBehaviourSingleton Instance{get{if (mInstance == null){if (mIsDestroying){Debug.LogWarning("[MonoBehaviourSingleton] Instance '" + typeof(MonoBehaviourSingleton) +"' already destroyed. Returning null.");return null;     //如果已销毁则跳出,防止嵌套调用}mInstance = new GameObject("[MonoBehaviourSingleton]").AddComponent<MonoBehaviourSingleton>();DontDestroyOnLoad(mInstance.gameObject);  //创建实例并设置为DontDestroyOnLoad}return mInstance;}}public void Test(){Debug.Log("Test");}void OnDestroy(){mIsDestroying = true;  //销毁时将标记变量设置为true,防止对已销毁单例进行重复创建}
}

2.Simple单例

        更直观简单,但需要确保对象在场景中存在且被正确管理,不适合频繁切换场景的情况。

优点:

  1. 更容易管理:不用手动创建GameObject,更多依赖于Unity编辑器来管理单例对象的创建。
  2. 避免重复实例:通过比较instancethis,可以确保在同一场景中只存在一个实例。

缺点:

  1. 缺乏灵活性:不能像前一种方法那样灵活创建实例,必须确保在场景中包含该组件对应的对象。
  2. 潜在的实例丢失问题:如果SimpleSingleton对象不在初始场景中,可能会引发问题,如果有依赖该单例的其他代码在实例初始化之前执行,会出现空引用错误。
using UnityEngine;public class SimpleSingleton : MonoBehaviour
{private static SimpleSingleton instance;public static SimpleSingleton Instance{get{if (instance == null){Debug.LogError("Singleton instance has not been set. Make sure the singleton is properly instantiated.");}return instance;}}protected virtual void Awake(){if (instance == null){instance = this;DontDestroyOnLoad(gameObject);}else if (instance != this){Destroy(gameObject);}}public void Test(){Debug.Log("Test");}
}

http://www.dtcms.com/a/440901.html

相关文章:

  • 北京期刊网站建设公司网页制作费用会计分录
  • 网站上传文件 ftp做网站都用到哪些软件
  • 网站建设互联网营销营销推广广东百度seo
  • 出格网站建设公司重庆app下载注册
  • 个人做网站备案多少钱东安网站建设
  • 纯html网站网站开发如何设置背景图片
  • 网站设计主题选择网站建设58
  • 住房住房和城乡建设部网站app制作教程电脑流程
  • 河北保定网站建设鞍山58同城二手房出售
  • 网站与网页国家城乡住房建设部网站
  • 大型综合新闻门户网站织梦模板wordpress媒体文件
  • 如何做网站关键词霸屏可以访问的国外网站
  • 10黄页网站建设车之家汽车官网
  • 网站内容有哪些我市强化属地网站建设
  • 如何做网页网站如何自定义wordpress登录
  • wordpress做小说网站网站开发工程师和前端
  • 尺寸在线做图网站wdcp wordpress伪静态
  • 网站色彩搭配如何做企业网页
  • 麻涌镇做网站宁波做网站十大公司哪家好
  • 网站建设属于哪种公司怎么做公益网站
  • 网站建设辶首先金手指十四那个网站域名估价好
  • 谢岗镇做网站衡水做wap网站
  • 网站的建设可以起到什么作用是什么原因服装网站建设准备
  • 网站开发公司怎么建服务器昆明网站建设搜q479185700
  • 网站建设里程碑网络营销的案例有哪些
  • 好看 大气的网站百度旗下产品
  • 网站themes目录wordpress装饰设计主题
  • 网站注册费用基于ssh框架的网站开发流程
  • 福州百度网站排名优化7zwd一起做网店官网
  • 全国水利建设市场信用信息平台网站做网站那个平台好