分享

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

 3dC 2014-01-28

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

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


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

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

单例脚本:


[csharp] view plaincopy

  1. private static BattleScene instance;      

  2.     public static BattleScene GetInstance()  

  3.     {  

  4.         if (!instance) {  

  5.             instance = (BattleScene)GameObject.FindObjectOfType(typeof(BattleScene));  

  6.             if (!instance)  

  7.                 Debug.LogError("There needs to be one active MyClass script on a GameObject in your scene.");   

  8.         }  

  9.           

  10.         return instance;  

  11.     }  


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


单例类:


[csharp] view plaincopy

  1. public class Global {  

  2.     public string loadName;  

  3.       

  4.     private static Global instance;  

  5.     public static Global GetInstance()  

  6.     {  

  7.         if (instance == null)  

  8.             instance = new Global();  

  9.           

  10.         return instance;  

  11.     }  

  12. }  



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


[csharp] view plaincopy

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


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


[csharp] view plaincopy

  1. public class Global {  

  2.     public static string loadName;  

  3. }  


然后你可以这样用:


[csharp] view plaincopy

  1. Global.loadName = "GameScene";  


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


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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多