zoukankan      html  css  js  c++  java
  • Unity中的单例方法

      前沿:在我的工作期间和学习期间,看过和学过很多单例方法,可谓是奇形怪状,不过都能实现其功能。今天我将学到的和自己思考出来的单例方法进行一个汇总和分析。

    单例一:最简单的单例方法 A --- 继承于MonoBehaviour

      1.首先创建一个名叫:XXXManager.cs 的脚本,这个脚本就是我们的单例了。这个最简单的单例方法实现如下:

        

      2.如何调用呢?我们创建一个叫 Main.cs 的脚本来调用它,在其Start()方法里面,调用XXXManager的TestMethod()方法,代码如下:

        

      3.然后我们需要在Unity的Hierarchy创建两个组件,分别叫“Main” 和 “XXXManager”,接着把对应的脚本分别挂载上去,例如:Main组件挂载上Main.cs脚本,XXXManager组件挂载XXXManager.cs脚本。

        

      4.运行之后的结果如下:

        

      总结:这应该是最简单的单例方法了。

      

    单例二:升级版单例方法 B --- 继承于MonoBehaviour

      接下来介绍一种更“规范”一点的单例方法。

      1.修改 XXXManager.cs 脚本,其余地方不修改,代码如下:

        

      2.运行结果如下:

        

    单例三:单例方法 C --- 不继承于MonoBehaviour

      在我们的日常开发中,有的单例方法是不继承于MonoBehaviour的,不需要将其挂载到GameObject组件上去。这类不需要挂载的。

      1.修改 XXXManager.cs 脚本,修改后的脚本如下:

        

      2.因为是不继承于MonoBehaviour,所以需要将 Hierarchy 面板中,XXXManager上挂载的脚本移除。

      3.运行结果为:

        

        

      总结:上述的单例方法中,我们可以进行归纳。其实就是继承和不继承 MonoBehaviour 的单例方法,接下来我们将用到C#语言面向对象的特点(封装、继承、多态),对我们的单例进行一个更好的规范。

    单例四:最终版D --- 继承于MonoBehaviour(不随着场景切换而销毁) 

      1.首先,我们将写一个基类,这个基类实现了单例方法,并且不随着场景的切换而销毁。脚本如下:

        

      2.修改 XXXManager.cs 脚本,修改后的脚本如下:

        

      3.运行结果:

        

    单例五:最终版E --- 不继承于MonoBehaviour(不随着场景切换而销毁)

      1.首先,写一个基类,脚本如下:

        

      2.修改XXXManager脚本,修改后的脚本如下:

        

      3.运行结果如下:

        

      总结:单例的几种方法已经写完了,在轻量级(Demo)的开发中,我觉得A B C三种单例方法已经满足我们的开发需求。但是如果是比较大型的项目或者说我们平时学习中的话,我推荐使用D E两种方法去做。

    Dean二十七
  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/Dean27/p/7744452.html
Copyright © 2011-2022 走看看