您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    单例脚本和单例类
    时间:2015-04-18 10:04 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    要写到英雄与怪物之间的攻击交互了,在这之前,有必要插播一下单例脚本和单例类,因为我的交互都是在单例脚本上交互的。

    这样有什么好处呢,降低耦合度,这是任何一个程序员都关注的事情,编程也是一门艺术嘛,试想想,

    如果你的交互总是建立在两个或多个脚本之间,我用你的脚本实例,你用他的脚本实例,他用不知道谁的脚本实例,

    反正越多就越乱,到最后你都不想维护了,尤其是公司项目,你拍拍屁股走人了,后面维护的人就要骂娘了,

    你都不好意思说这代码是你写的,吐槽的有点多,其实我是看了雨松大神的文章有感而发,向雨松大神致敬,

    我是跟他一路学过来的,这有一篇他写的有关脚本架构的文章,有兴趣的拜读一下,给个地址: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";


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

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


    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
    标签:Unity之家