大概就是作游戏的时候想作一个给玩家展现信息的东西,好比玩家按了不应按的键提醒一下之类的。这个脚本却是很简单,找个Text组件往上面加字就好了。问题在于这个脚本游戏中的不少其余脚本都须要引用。好比钱不够花了,管钱的脚本得提醒一句;用还没好的技能,管技能的脚本得提醒一句;游戏要是还有点剧情,管剧情的也得说几句。后面再写新的脚本,还要每一个都加上对信息展现脚本的引用,这就很麻烦。c#
刚开始是想使用静态(static)方法的,毕竟说到全局都能调用,第一个想到的就是静态函数、静态类。可是静态函数内部是不容许干非静态的事情的,好比,修改文字内容。直接过不了编译。函数
正解是写一个单例类。若是你跟我以前同样并无深刻学过C#而且根本不知道单例是个什么玩意,只须要知道两点就够了:第一,单例类在场景里只能有一个它的实例。第二,这个单例里面的public方法其余的类就都能在没有引用这个类的状况下用了。this
写法就介绍一个最基本的,大部分时候都是好用的。code
public class Logger : MonoBehaviour { public static Logger logger; // ... private void Awake() { logger = this; } public void Test() { // something to do } //... }
这里继承MonoBehaviour是没所谓的,主要是声明一个静态的实例,而后初始化为本身。对象
这样在其余类里就能够直接调用单例类中的public函数了:继承
public class Whatever { public void DoSomething() { Logger.logger.Test(); } }
这里注意尽可能别在其余类的Awake函数里调用单例,由于若是这时候单例的Awake尚未执行,他就还不是个单例,调用会报错的。游戏
只说了单例最基本的使用,由于高深的东西我不敢乱说。这些在基本的开发里已经够用了,能够实现想要的效果。若是你很不能理解这是个啥,能够大概把它想象成一个包着静态壳的动态类。你看,动态的类能够有不少个实例,静态类没有实例,只有一个实例的类可不是动静结合。开发
其实在游戏场景中,不少东西都适合作成单例类。好比管游戏音乐的脚本大几率在场景里只会有一个实例工做,那么就能够把他作成单例,若是有游戏对象须要改变游戏音乐,就能够直接调用。或者说若是是一个主角的单机游戏,甚至能够把主角作成单例类,这样好比有一群小怪都要来找主角打架,全部小怪均可以直接访问到主角的位置信息。it
单例是C#里挺有意思的一个功能,若是你比较感兴趣或者常常使用这个,能够去深刻学了解一下单例的原理,搞一本《深刻理解C#》什么之类的。io