欢迎光临散文网 会员登陆 & 注册

unity 2D游戏开发教程2:(常用的3种单例模式深度解析)

2023-06-07 21:22 作者:zhouhongjoe  | 我要投稿


教案如下:

课程知识点:   

1:普通单例模式

一个Scenes里面类似GUIManager(UI管理类),InputManager(按键管理类)只会有一个,创建后会被经常在别的代码里面被使用,所以这类对象经常是会用单例模式来封装后,方便我们随时拿到对象来随时使用。

下面是2种使用方式,我们先来写下普通单例模式代码。

   --用法1:在画面中不创建单例对象GameObject,用到的时候在自动创建单例对象,执行方法

   --用法2:在画面中提前创建单例对象GameObject,用到时候拿到这个单例对象执行方法

 

2:持久化单例模式(项目最先创建的对象永久使用)

   普通的单例模式有缺点

   --缺点1(这个缺点并不重要):从Scene1 跳转到 Scene2的时候,Scene1里面的单例对象会被销毁,Scenes2里面会被创建,浪费性能。

     解决上面问题需要利用Unity的DontDestroyOnLoad(GameObject)方法,让指定对象在页面切换时候不要摧毁,我们来写下这个模式的单例类,然后做个新的场景来演示一下

   --缺点2(主要缺点):我们在开发项目的时候会创建很多Scene,最明显的例子就是GameManager。 每个关卡画面都是要用到这个Manager。但是对于游戏来说,GameManager是所有画面都要统一用一个的,而不是一个Scene一个,不然会出现问题(例如Level1开发时候GameManager里面生命值我用3在测试开发,Level2开发时候GameManager里面生命值我用2在测试开发,当Level1跳转到Level2的时候如果不写代码特殊处理,会导致生命值莫名奇妙减少了)

    我们来写一下这个单例类

    解决这个问题的情况的话,就需要用到我们的,持久化单例模式(项目从头到尾都用保持用这一个单例对象)

 

 

3:持久化单例模式(项目最新创建的对象保留)

    和上面持久化单例模式(项目最先创建的对象永久使用)对比,

相同点:Scene跳转不会删除

不同点:但是当Scene1 跳转到 Scene2的时候,Scene2有相同类的单例对象时候,会用Scene2的这个对象替换到Scene1带过来的对象,和上面的类型正好相反

我们来写一下这个单例类,

    使用场景:项目中的每个画面会有 BackgroundMusic 来播放背景音乐,你每个场景可以设置新的音乐。BackgroundMusic使用这个模式的单例在配合Start()方法【对象创建第一次的时候调用的特性】就可以实现切换场景背景音乐不中断的效果,等有新的背景音乐在替换播放新的背景音乐,代码举例子



unity 2D游戏开发教程2:(常用的3种单例模式深度解析)的评论 (共 条)

分享到微博请遵守国家法律