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

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

作者头像
韩东吉
发布2018-10-19 17:04:15
8701
发布2018-10-19 17:04:15
举报
文章被收录于专栏:韩东吉的Unity杂货铺

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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档