zoukankan      html  css  js  c++  java
  • Unity-3d Day06

    继续搞单例模式  在实战中体会了一下单例模式 

    唉  还是搞不懂  虽然知道了怎么写  但在哪用还是很模糊  等以后写多了就好了吧

    回顾一下,单例模式的定义是:保证一个类只有一个实例,并且提供一个访问它的全局访问点。单例对象的类必须保证只有一个实例存在。在我们的场景中,全局脚本的对象只会创建一次,保证单例,然后它(全局单例类)提供给各个脚本访问单例对象的方法,并且所有其他脚本的公共数据都会存储在全局单例脚本中。

    单例模式可以很方便地提供数据、对象的访问方式,单例仅允许被实例一次,这就保证了他在各个程序模块间的唯一性。大家可能会想到全局变量,是的,确实可以用全局变量来做。不过为了提供代码的可维护性,全局是有很大局限的。你又想在Unity里经常还可Static 变量会共享信息,不过你还发现他被声明在各处。对的,不好找,不好维护。

    至于使用嘛   我也在研究   基本上都是在控制游戏的流程啊   背景音乐啊  切换场景啊什么的时候用到单例模式

    以下是模型的单例模式:模型的单例不能有构造器  不 能 有 构 造 器 !   而且要注意Awake和start的执行顺序。

    using UnityEngine;
    using System.Collections;
    
    //对象单例模式
    public class GameManager : MonoBehaviour
    {
        private static GameManager m_manager;
    
        public static GameManager M_manager
        {
            get
            {
                if (m_manager == null)
                {
                    m_manager = new GameObject("GameManager").AddComponent<GameManager>();
                }
                return m_manager;
            }
        }
        //注意执行顺序
        void Awake()
        {
            //添加音频组件
            gameObject.AddComponent<AudioSource>();
        }
        // Use this for initialization
        void Start()
        {
    
        }
        //添加音频
        public void PlayAudio(AudioClip clip){
            audio.PlayOneShot(clip);
        }
        // Update is called once per frame
        void Update()
        {
    
        }
    }

    在摄像机脚本中简简单单调用一下就好了

     void Start()
        {
            GameManager manager = GameManager.M_manager;
            manager.PlayAudio(clip);
    
            ModelManager modelManager = ModelManager.M_mamager;
        }


    还有对象的单例,用法和c#时候没什么两样

    using UnityEngine;
    using System.Collections;
    
    //模型单例
    public class ModelManager{
        private static ModelManager m_mamager;
        public static ModelManager M_mamager
        {
            get {
                if (m_mamager == null) {
                    m_mamager = new ModelManager();
                }
                return ModelManager.m_mamager; 
            }
        }
        public Mouse[] mouses = new Mouse[10];
        public ModelManager() {
            for (int i = 0; i < 10; i++)
            {
                mouses[i] = new Mouse();
            }
        }
        
    }


    下面是一些Application类的使用    感觉还是一样  都是公式   :

    using UnityEngine;
    using System.Collections;
    
    public class GameController : MonoBehaviour
    {
       public AudioClip clip;
     
        // Use this for initialization
        void Start()
        {
            GameManager manager = GameManager.M_manager;
            manager.PlayAudio(clip);
    
            ModelManager modelManager = ModelManager.M_mamager;
        }
    
        // Update is called once per frame
        void Update()
        {
    
        }
        void OnGUI() {
    
            GUILayout.Label(Application.platform.ToString());            
            GUILayout.Label(Application.runInBackground.ToString());     
            GUILayout.Label(Application.dataPath.ToString());
            GUILayout.Label(Application.persistentDataPath.ToString());
            GUILayout.Label(Application.temporaryCachePath.ToString());
            GUILayout.Label(Application.loadedLevel.ToString());
            //切换场景
            if (GUILayout.Button("level")) {
                //销毁之前场景
                Application.LoadLevel(1);
                //不销毁之前场景
                Application.LoadLevelAdditive(1);
            }
            //退出
            if (GUILayout.Button("quit"))
            {
                Application.Quit();
            }
            //链接 打开网页
            if (GUILayout.Button("baidu"))
            {
                Application.OpenURL("http://www.baidu.com");
            }
            
        }
    
    }

    今天就研究这么多啦  good night buddies!

  • 相关阅读:
    springboot内置分页技术
    打印正三角,倒三角,实心棱形,空心棱形
    显示Pl/Sql Developer window list窗口
    Oracle 中使用正则表达式
    前端使用pdf.js预览pdf文件,超级简单
    tomcat8踩坑:url包含|等特殊字符报错400的问题
    使用 Itext 生成PDF字节数组(文件流不落地)
    使用 Itext 生成PDF
    回车提交事件
    python爬虫之re正则表达式库
  • 原文地址:https://www.cnblogs.com/little-sun/p/4379118.html
Copyright © 2011-2022 走看看