打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

本系列文章由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";  


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


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


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java设计模式-之Singleton单例模式 - 设计模式
单例模式
java几种方式实现单例设计模式
JAVA面试经典合集2:怎样写出一个线程安全的单例模式
怎样实现线程安全的延迟初始化单例模式 ??
Java单例模式深入详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服