Unity单例模式
来源:互联网 发布:mac lr怎么导入照片 编辑:程序博客网 时间:2024/04/20 06:04
实现功能:
1.保证类只有一个实例 2.提供只读属性,方便其他脚本调用 3.实现切换场景之后对象不销毁(第四种写法有介绍)
这里为大家介绍Unity中常见的四种单例写法:
1 不继承自MonoBehaviour的脚本
public class BagManager {
//第一步构造方法私有化,保证外部不能实例化private BagManager(){} //第二步定义静态私有成员(注意类型跟类名相同)private static BagManager instance;//第三步封装只读属性,提供对外访问私有成员的接口public static BagManager Instance { get { if(instance == null) { instance = new BagManager(); } return instance; }}
}
注意:这种单例写法没有考虑多线程(菜鸟的略过)。
2 继承自MonoBehaviour的脚本
public class Singleton : MonoBehaviour {
//定义静态成员(静态的可以通过类名访问)//所有的单例都需这一步,提供对外访问的接口public static Singleton Instance{get; private set;}void Awake(){ //this表示当前对象 Instance = this; }
}
注意:这种单例写法需要将脚本手动赋给一个GameObject(缺陷)。
3 继承自MonoBehaviour的脚本
public class Singleton : MonoBehaviour {
//定义静态成员(静态的可以通过类名访问)private static Singleton instance;//封装属性public static Singleton Instance{ get { if(instance == null) { //用代码生成一个GameObject GameObject obj = new GameObject(); obj.name = "Singleton"; //给生成的物体添加脚本(将这个方法的返回值赋给instance) instance = obj.AddComponent<Singleton>(); } return instance; }}
}
注意:继承自MnoBehaviour的类不允许写私有的构造方法。该脚本无须挂到游戏物体上,其他脚本可以直接使用。
4 继承自单例模板类
优点:使用框架写法无非就是省代码。如果有多个单例类,省去了相同代码部分。
//使用泛型,需要加限制(泛型类型必须是继承自MonoBehaviour的脚本)
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance { get { if(instance == null) { GameObject obj = new GameObject(); instance = obj.AddComponent<T>(); obj.name = typeof(T).Name; //切换场景之后不销毁单例对象 DontDestroyOnLoad(obj); } return instance; }}
}
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(AudioSource))]
public class MusicManager : Singleton<MusicManager> {
private AudioClip bgMusic;private AudioSource audio;void Init(){ bgMusic = Resources.Load("Music/bgMusic") as AudioClip; audio = GetComponent<AudioSource>(); if(!audio) { audio = this.gameObject.AddComponent<AudioSource>(); } audio.clip = bgMusic;}public void Play(){ if(bgMusic == null || !audio) { Init(); } audio.Play();}public void Stop(){ if(bgMusic == null || !audio) { Init(); } audio.Stop();}
}
阅读全文
0 0
- 单例模式 unity
- [unity]单例模式
- unity单例模式
- Unity单例模式
- Unity 单例模式
- Unity单例模式
- Unity单例模式
- 【Unity】 Unity单例模式的使用
- Unity中的单例模式
- Unity C#单例模式
- Unity C#单例模式
- Unity 单例模式总结
- Unity的设计模式--单例模式,
- 设计模式---unity中的单例模式
- unity 设计模式之单例模式
- 【Unity技巧】使用单例模式Singleton
- 单例模式在Unity中的应用
- Unity脚本——单例模式
- ns3 学习资料和方法
- 512
- C++ 虚函数表解析
- 函数式编程的内建函数
- TOMCAT 的 404错误 问题总结以及解决办法
- Unity单例模式
- [leetcode]523. Continuous Subarray Sum
- android项目中的遇到的关于system image的问题
- Android 7.0之开发特性
- 欢迎使用CSDN-markdown编辑器
- 哈希表
- opencv cmake 安装使用问题
- Maven构建生命周期
- TS包头语法结构(4个Byte)