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

大二VR专业unity代码学习日常3——单例模式之伪单例

2023-04-18 23:14 作者:汤煜清  | 我要投稿


笔记1
笔记2

单例模式

单例模式能节省系统资源也能简化代码,顾名思义,单例,就是一个实例。

什么时候需要用单例?当需要大量创建类的时候就可以用单例模式来代替不断实例化的类。

伪单例

伪单例

代码7、16-19行就是伪单例的例子:用static静态化一个脚本的实例,让这个实例能被全局访问,再在Awake里初始化这个静态实例,让其被调用时确保已完成初始化。

为什么静态化后就能全局访问?全局访问是静态化的特点,正常方法需要先创造实例后才能访问,而静态化后不需要实例就能访问,同样能全局访问的还有vector结构体中的Distance方法,因为这个方法也是静态方法。普通方法就像模具,要访问这个方法先要用模具印出模型才能拿到这个方法,但静态化后方法就变成了工具包,直接背在身上随时都能拿出来用。

this是什么?this是指当前脚本所挂载的gameobject实例,比如脚本常挂在camera、canvas这些gameobject上,将这个实例赋给类的静态化实例,这个静态化实例里就有了脚本里的内容,再加上静态化本身的全局访问的功能,就能让其他脚本也能调用当前脚本的变量或者方法。把一个类静态化,就像把货物从家里放到了港口集装箱里,人流量很大,现在谁都能拿得到了,而我们把当前gameobject实例放在了这个集装箱里,就让其他脚本都能通过这个集装箱来访问gameobject里的脚本。

instance为什么不在start函数里初始化?因为其他脚本一般都在start函数里调用instance,如果写在start里可能存在调用时还未初始化从而出现错误的情况,为了保证instance被调用时已经初始化完成,instance就需要写在awake函数里,因为awake函数会在start函数之前调用。就是有人(其他脚本调用)上门来拜访,instance需要先做好准备,如果不做好准备就会报错。




大二VR专业unity代码学习日常3——单例模式之伪单例的评论 (共 条)

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