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

教案如下:
课程知识点:
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()方法【对象创建第一次的时候调用的特性】就可以实现切换场景背景音乐不中断的效果,等有新的背景音乐在替换播放新的背景音乐,代码举例子