Unity 中单例是什么以及用法

Unity 中单例是什么以及用法

这是个老生常谈的问题,静态和单例到底有没有区别!感觉上他们好像都一样!

但是,静态编译期就会编译进去,游戏开始了,就会一直在内存里,你游戏不结束他也不结束,如果你内存吃紧,而他又很大的时候,那他就很麻烦。

而单例不一样,你不用他他就不出现,你需要了他就来了,等你不想要他了你把他扔了销毁就行了。

很灵活是不是,但他也会有问题,如果我们没有把它初始化,就用它了那你的游戏就报错了,我们可能没法很好的去把控他初始化的时机,不过这个问题在现在这个时代看已经不是什么大问题了,至少我用unity都是awake的时候就加载了反正也没多大~我们需要使用单例的情况往往是,我们有一个管理器,它内部需要维护自己的状态,我们在游戏初始化的时候就创建他,然后我们通过它来创建游戏对象或者说是其他的东西,并持续管理来完成增删查改的功能。
但也有问题比如说我们有个对象池他是单例,很多类都和他有交互,如果有一天这个你池子出问题了,那么你Debug的时候就会很痛苦,尤其是当这个池子还有其他与他关联的脚本不是你写的时候,你就要把所有的脚本都读懂,才能知道bug出在哪里,是不是很恐怖?但如果不使用,那我们就会很轻松了,我们只需要理解这个类就ok了。更多的情况下我会认为单例适合当我内部需要维护一系列对象状态,并且你需要在合适的情况下再去用它而不是盲目的去疯狂单例,是个管理器就单例。我们可以根据当前恩需求,与未来的可维护性适当的去选择是否使用他。静态对我来说更像一个方法的提供者,比如说数学库,帮我做个加法然后返回结果,它内部并没有什么状态在维护,仅仅只是帮我做点事,就是个工具人。

用法 :直接通过类名.Instance就可以 例如:Demo.Instance.a;

创建单例

public class Demo : MonoBehaviour {

	public static Demo Instance;
	void Awake()
    {
		Instance = this;

	}
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值