本系列文章由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";
怎么用就看你的实际需求了。
单例类和单例脚本就说到这里,下一篇我们就要用单例脚本实现英雄与怪物的交互了。