Unity3D 单例(singleton)管理类

在Unity3D中,有什么好的方法去创建一个单例游戏管理类,可以像一个全局类的静态变量一样到处访问?

在Unity中有什么接口吗?我是否要把这个脚本添加到一个物体上呢?这个类可以仅仅放在文件夹里不用添加到场景里吗?

通常来说视情况而定,常用的两种单例类。

(1)组件式的添加在物体上。

(2)不从MonoBehaviour继承的独立类。

public class MainComponentManger {
    private static MainComponentManger instance;
    public static void CreateInstance () {
        if (instance == null) {
            instance = new MainComponentManger ();
            GameObject go = GameObject.Find ("Main");
            if (go == null) {
                go = new GameObject ("Main");
                instance.main = go;
                // important: make game object persistent:
                Object.DontDestroyOnLoad (go);
            }
            // trigger instantiation of other singletons
            Component c = MenuManager.SharedInstance;
            // ...
        }
    }

    GameObject main;

    public static MainComponentManger SharedInstance {
        get {
            if (instance == null) {
                CreateInstance ();
            }
            return instance;
        }
    }

    public static T AddMainComponent <T> () where T : UnityEngine.Component {
        T t = SharedInstance.main.GetComponent<T> ();
        if (t != null) {
            return t;
        }
        return SharedInstance.main.AddComponent <T> ();
    }

当其它单例类想要注册Main 的组件时只要这样:

public class AudioManager : MonoBehaviour {
    private static AudioManager instance = null;
    public static AudioManager SharedInstance {
        get {
            if (instance == null) {
                instance = MainComponentManger.AddMainComponent<AudioManager> ();
            }
            return instance;
        }
    }

原文链接:http://stackoverflow.com/questions/13730112/unity3d-singleton-manager-classes

Unity3D 单例(singleton)管理类

时间: 2024-10-06 20:38:58

Unity3D 单例(singleton)管理类的相关文章

Objective-C设计模式——单例Singleton(对象创建)

单例 和其它语言的单例产不多,可以说是最简单的一种设计模式了.但是有几个点需要注意下,单例就是一个类只有一个实例. 所以我们要想办法阻止该类产生别的实例,一般语言中都会将构造函数写为private.但是OC中的函数并没有限定符,所以我们需要用一些小技巧来屏蔽这一点. 应用场景 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法. 这个唯一的实例只能通过类的子类化进行扩展,而且扩展的对象不会破坏客户端代码. 注意 1.OC中单例的实例变量要定义在.m文件 2.OC中单例需要

Android与设计模式——单例(Singleton)模式

概念: java中单例模式是一种常见的设计模式.单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类仅仅能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给全部其它对象提供这一实例. 单例模式确保某个类仅仅有一个实例.并且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机能够有若干个打印机,但仅仅能有一个Pri

单例 singleton

一.单例模式 特点:单例模式的类必须保证始终只有一个实例存在. 场景:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个. 二.单例类的构建 1:为你的单例类声明一个静态的实例,并且初始化它的值为nil. 2:在获取实例的方法中,只有在静态实例为nil的时候,产生一个你的类的实例,这个实例通常被称为共享的实例. 3:重写allocWithZone 方法,用于确定:不能够使用其他的方法来创建我们不得实例,限制用户只能通过获取实例的方法得到这个类的

设计一个线程安全的单例(Singleton)模式

在设计单例模式的时候,虽然很容易设计出符合单例模式原则的类类型,但是考虑到垃圾回收机制以及线程安全性,需要我们思考的更多.有些设计虽然可以勉强满足项目要求,但是在进行多线程设计的时候.不考虑线程安全性,必然会给我们的程序设计带来隐患.此处,我们不介绍什么是单例模式,也不介绍如何设计简单的设计模式,因为你完全可以在书上或者在博客中找到.此处我们的目的就是设计一个使用的单例模式类.单例模式需要注意与思考的问题: (1)如何仅能实例化一个对象? (2)怎么样设计垃圾回收机制? (3)如何确保线程安全性

手写单例singleton

1 // 2 // ViewController.m 3 // singleton 4 // 5 // Created by ys on 15/11/23. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 10 #import "ViewController.h" 11 #import "singletonClass.h" 12 13 @interface ViewController () 14

写一个单例(Singleton),并说明单例的目的和好处

单例的目的:保证一个类只有单一的实例,也就是说你无法通过new来创建这个类的一个新实例. 单例的好处:当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象. Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问. 第一种:在声明变量时实例化(也叫饿汉式单例模式),代码如下: public class Singleton { private s

如何写一个比较严谨的单例Singleton模式

iOS真正意义上的单例模式: 我们在程序中很多时候要保证一个类只有一个唯一的实例,一般情况下初始化对象是通过[[Class alloc]init]来完成的,alloc是分配内存空间,init是对象的初始化,分配对象内存空间的另一个方法是allocWithZone方法,实际操作中当调用alloc方法来给对象分配空间时,默认也调用了allocWithZone方法.如果我们在初始化对象的时候没有使用alloc方法,而是直接使用allocWithZone方法的话,就没法保证这个单例是真正意义上的单例了,

iOS 单例(Singleton)总结 和第三库引用单例

引用:http://blog.csdn.net/lovefqing/article/details/8516536#t3 http://blog.csdn.net/kindazrael/article/details/7917863 单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据.最简单的一个例子是,当用户打开QQ空间播放音乐的时候,这里就是一个单例,如果不是

单例singleton

public class Test    {        #region 单例        ///<summary>        ///单例对象        ///</summary>        private static Singleton<Test> Singleton;        ///<summary>        ///实例        ///</summary>        public static Test