前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >零基础入门 24:Unity设计模式之单键模式

零基础入门 24:Unity设计模式之单键模式

作者头像
韩东吉
发布于 2018-10-19 09:04:15
发布于 2018-10-19 09:04:15
9320
举报

Hello,各位小伙伴,上一篇结束以后,Unity里的UGUI系列分享就已经结束了,不知道大家是否已经灵活掌握运用了呢?

之后的内容会给大家分享一些所谓的干货,都是实战必备。

今天给大家分享一下,Unity里的单键模式。那么什么是单键模式呢?

单键模式(Singleton)要求一个类有且只能有一个实例。在Unity里,这个实例可以依赖也可以不依赖于GamoObject。并且这个实例对外提供一个全局的访问变量,在同一时刻只能被一个线程所访问。

在实际项目中,我们很多时候都需要用到单键,代码的类型标记为Static静态类型,只要能拿到类的地方,全局均可访问使用,从项目开始到结束,除非手动释放置空(依赖于GameObject的单键可以被标记跨场景删除),不然不会被清除,这就是单键。

那么进入今天的正题


前面介绍过,Unity里的单键可以依赖也可以不依赖于GameObject。而且大家需要谨记一件事,继承于MonoBehaviour的类是不能够通过new的形式去创建对象的,这个大家要谨记。避免不要的bug和空值。

好了,先给大家介绍不依赖于GameObject的单键。

一、不依赖于GameObject的单键

我们在Unity里创建一个脚本,名为SingletonTest1

打开脚本,然后定义一个私有的静态对象并且置空,如下图,static代表静态对象类型,=null代表设置为空对象

因为我们先介绍不依赖于GameObject的单键,所以这里我们把类的继承关系去掉。如下图,删除对MonoBehaviour的继承

然后我们在创建一个提供给外部访问的实例静态对象,如下图,我又创建了一个静态类的实例对象,但是是Public的,用于提供给外部访问

如上图,我在Instance的位置加了{ get{} },Instance本身并不是一个函数,而是一个变量,如果是函数都需要带括号()进行声明,这里是一个大括号{}声明的,这个大家可以区分一下,不要混淆。这里是C#对变量的一种特殊操作方式,可以用关键特性get和set进行取值和赋值

我们这里因为要当成提供给外部使用的实例对象,所以这里使用Get进行外部取值。

然后对取值进行完善,并且不依赖于GameObject,直接通过new的方式创建一个类的对象赋值即可,记住上面说的一点,继承MonoBehaviour的对象不能通过new的方式创建

这样就完成对不依赖于GameObject的单键类的创建,然后我们随便公开一个方法输出一句日志,再创建另外一个调用脚本来测试一下对这个单键类的使用。

如下图,我们在调用SingleTonTest1的时候,是点出来一个Instance,即我们单键类提供给外部使用的唯一一个静态实例对象,再通过该实例对象,访问单键类的内部函数和变量。

然后我们将这个LogSingleTon脚本挂载到一个空场景的摄像机上,运行即可查看效果。

如上图所示,运行后我们的调用单键类里的日志可以被正常打出,并且Hierarchy面板里没有其他的对象生成,这就完成了我们对第一种单键对象的创建和使用。

接下来介绍第二种单键对象的创建和使用方法,就是依赖于GameObejct的。

二、依赖于GameObject的单键

第二种方法是依赖于GameObject的单键对象创建方式,我们依然创建一个测试脚本,并且命名为SingleTonTest2。

然后依然打开脚本,创建一个私有的和公开的静态类对象,和之前一样

因为我们第二种演示方式需要依赖于GameObject,所以我们就不删除对MonoBehaviour的继承了,然后来完善对外部获取单例对象的实现。

OK,这样就完成了依赖于GameObject的单键对象的创建,然后我们继续创建一个测试方法提供给外部调用使用。

切回到Unity再次运行项目,就可以看到俩种单键模式的日志输出了,如下图,俩种单键模式的日志都已经输出了,并且第二种依赖于GameObject的单键模式会在Hierarchy面板里创建一个我们命名为SingleTonTest2的对象,上面挂载了我们的SingleTonTest2的脚本组件。

前面提到,依赖于GameObject的单键对象,可以通过标记来实现跨场景之后不销毁,怎么做呢?其实就是加一句话就可以了。

好了,以上就是俩种不同的单键模式的创建和使用,希望大家能对单键模式有一个正确的理解。

后续开始会陆续进行Unity实战的干货分享,不管你是不是零基础入门,只要跟着来,就一定可以学的会。

大家下期见 ヾ( ̄▽ ̄)Bye~Bye~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
23种设计模式
一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式
xiangzhihong
2018/02/01
1.5K0
23种设计模式
Unity零基础到入门 ☀️| 学会这些Unity常用组件,Unity中必备组件技能学习!
⭐️组件Component ????前言 ????简介 ????Unity工程结构 ????几种常用组件介绍 ????Transform组件 ????Mesh Filter(网格过滤器)和Mesh R
呆呆敲代码的小Y
2021/08/20
3.3K0
Unity零基础到入门 ☀️| 学会这些Unity常用组件,Unity中必备组件技能学习!
Unity精华☀️ 面试官眼中的「设计模式」
一个场景不能同时存在多个相同的单例脚本,因为单例脚本的功能就是通过 方法:类.instance.xxx来 访问该脚本,
星河造梦坊官方
2024/08/15
1340
Unity精华☀️ 面试官眼中的「设计模式」
Java进阶篇设计模式之一 ----- 单例模式
作者:虚无境 链接: https://blog.csdn.net/qazwsxpcm/article/details/80950612 前言 在刚学编程没多久就听说过设计模式的大名,不过由于当时还是个
格姗知识圈
2019/07/19
4980
Java设计模式简介(一):创建型模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
全栈程序员站长
2021/04/09
3490
Java设计模式简介(一):创建型模式
设计模式之单例模式
单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。
用户1205080
2018/10/18
4780
零基础入门 6: 菜单介绍
每个月总要忙那么一段时间,因为之前的存稿保持在日更,导致后续忙起来没有时间来得及写新的内容,就一直没有更新。今天趁着午休来更新一篇。主要说下Unity里复杂的菜单栏。电脑环境Windows,Unity版本5.3.6f1。
韩东吉
2018/10/19
8300
零基础入门 6: 菜单介绍
Unity精华☀️ 「设计模式」的终极详解!
定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定实例化哪一个类,而不必实现知道要实例化的是哪一个类。
星河造梦坊官方
2024/08/15
3160
Unity精华☀️ 「设计模式」的终极详解!
Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)
从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析。
红目香薰
2022/11/29
7980
Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)
零基础入门 23: UGUI ScrollView
今天要分享的内容,是近期内关于UGUI的最后一篇,UGUI里的滚动视图ScrollView,后期的内容会根据项目实用的功能组件进行分享。
韩东吉
2018/10/19
3.3K0
零基础入门 23: UGUI  ScrollView
【Unity面试篇】Unity 面试题总结甄选 |Unity基础篇 | ❤️持续更新❤️
答:Awake —> OnEnable —> Start —> FixedUpdate —>Update —> LateUpdate—> OnGUl —> OnDisable —> OnDestroy
呆呆敲代码的小Y
2023/07/24
3.4K0
【Unity面试篇】Unity 面试题总结甄选 |Unity基础篇 | ❤️持续更新❤️
零基础入门 9: Unity脚本的生命周期
因为接下来的几篇分享,可能会开始编写脚本,所以索性用这篇来介绍下Unity脚本的常用生命周期函数。
韩东吉
2018/10/19
1.2K0
零基础入门 9: Unity脚本的生命周期
java设计模式(1)
1、开闭原则 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。
爱敲代码的猫
2019/10/16
4180
零基础入门 11: 通过脚本设置UGUI Image
因为默认的脚本是没有引入UnityEngine库的。所以当我们新创建了一个脚本后,在脚本上方加入UnityEngine的引用。
韩东吉
2018/10/19
5.8K0
零基础入门 11: 通过脚本设置UGUI  Image
同事看了我的代码惊呼:居然是这么在Unity中用单例的
首先要了解,单例模式是一种常用的软件设计模式,定义是单例对象的类只能允许一个实例存在,在许多时候整个系统只需要拥有一个全局对象,有利于协调系统整体的行为。
恬静的小魔龙
2022/08/07
8850
同事看了我的代码惊呼:居然是这么在Unity中用单例的
零基础入门 27:加载Loading的制作和使用
今天要给大家说的是一个游戏中很常见的东西,想必大家也都不会陌生,那就是加载的Loading,俗称游戏里的小菊花。
韩东吉
2018/10/19
1.3K0
零基础入门 27:加载Loading的制作和使用
Java开发中的23种设计模式详解(转)
                                  ——可复用面向对象软件的基础
肖哥哥
2019/02/22
4220
Java开发中的23种设计模式详解(转)
Unity AssetBundle
#AssetBundle作用原理 把资源导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载回来用。 AssetBundle是采取某一种压缩方式压缩成的资源文件。节省存储空间,控制游戏包的大小,实现游戏的热更新。
全栈程序员站长
2022/09/12
1.3K0
Unity AssetBundle
java — 设计模式
  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录
Mister24
2018/05/14
1K0
零基础入门 36:代码控制预设
上一篇分享给大家带来了如何通过菜单栏呼出一个自定义的窗口,不知道大家消化的如何了呢?
韩东吉
2018/10/18
6710
零基础入门 36:代码控制预设
相关推荐
23种设计模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档