unity3d学习笔记(六)--单例脚本和单例类

本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。

http://blog.csdn.net/lzhq1982/article/details/12649281


要写到英雄与怪物之间的攻击交互了,在这之前,有必要插播一下单例脚本和单例类,因为我的交互都是在单例脚本上交互的。这样有什么好处呢,降低耦合度,这是任何一个程序员都关注的事情,编程也是一门艺术嘛,试想想,如果你的交互总是建立在两个或多个脚本之间,我用你的脚本实例,你用他的脚本实例,他用不知道谁的脚本实例,反正越多就越乱,到最后你都不想维护了,尤其是公司项目,你拍拍屁股走人了,后面维护的人就要骂娘了,你都不好意思说这代码是你写的,吐槽的有点多,其实我是看了雨松大神的文章有感而发,向雨松大神致敬,我是跟他一路学过来的,这有一篇他写的有关脚本架构的文章,有兴趣的拜读一下,给个地址:Unity3D研究院之游戏架构脚本该如何来写(三十九)

在我的demo中,单例脚本和单例类都用上了,单例脚本用来处理英雄和怪物之间的交互,单例类用来过度游戏场景。下面给出代码:

单例脚本:

private static BattleScene instance;	
	public static BattleScene GetInstance()
	{
		if (!instance) {
			instance = (BattleScene)GameObject.FindObjectOfType(typeof(BattleScene));
			if (!instance)
				Debug.LogError("There needs to be one active MyClass script on a GameObject in your scene."); 
		}
		
		return instance;
	}

单例脚本是要绑定到GameObject上的,生命周期随着这个GameObject的结束而结束,需要继承MonoBehaviour,一般在场景过度后就结束了,我把这个单例脚本绑定到了战斗场景的Main Camera上,用法也很简单,比如我这个BattleScene里有个函数hideNpcPanel(),我在Hero这个脚本中就这么用BattleScene().GetInstance().hideNpcPanel();

单例类:

public class Global {
	public string loadName;
	
	private static Global instance;
	public static Global GetInstance()
	{
		if (instance == null)
			instance = new Global();
		
		return instance;
	}
}


单例类的脚本不用绑定到任何GameObject上,不 需要继承MonoBehaviour,生命周期是整个程序运行周期,用法和单例脚本一样,比如你可以这样用:

Global.GetInstance().loadName = "GameScene";

你还可以定义一种类,甚至都不用实例化它,但里面的变量和函数要是全局的,也就是要带static的,比如同样是上面这个类:

public class Global {
	public static string loadName;
}

然后你可以这样用:

Global.loadName = "GameScene";

怎么用就看你的实际需求了。

单例类和单例脚本就说到这里,下一篇我们就要用单例脚本实现英雄与怪物的交互了。



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值