馨予带你飞之unity中使用单例(二)

Unity中使用单例类

  • 单例模式
  • Unity中单例类的创建
  • Unity中单例类的使用

单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

Unity中单例类的创建

using UnityEngine;
using System.Collections;
/// <summary>
/// 单例类
/// </summary>
public class SingleClass {

    //防止外部实例
    private SingleClass()
    {

    }
    //静态单例对象(之后一直访问的都是它)
    private static SingleClass _instance;
    //获取单例对象的方法
    public static SingleClass Instance()
    {
        if(_instance == null)
        {
            _instance = new SingleClass ();
        }
        return _instance;
    }

    /// <summary>
    /// 原黑色方块,现在的颜色
    /// </summary>
    public Color blackColor;
    /// <summary>
    /// 原白色方块,现在的颜色
    /// </summary>
    public Color whiteColor;
    /// <summary>
    /// 用于开始界面,更换白色方块的颜色
    /// </summary>
    /// <param name="c">C.</param>
    public void ChangeWhileColor(Color c)
    {
        SingleClass.Instance().whiteColor = c;
    }
    /// <summary>
    /// 用于开始界面,更换黑色方块的颜色
    /// </summary>
    /// <param name="c">C.</param>
    public void ChangeBlackColor(Color c)
    {
        SingleClass.Instance().blackColor = c;
    }
}

Unity中单例类的使用

using UnityEngine;
using System.Collections;

public class InitCubes : MonoBehaviour {

    //别踩白块中的一层白块
    public GameObject cubes;
    //用户黑色方块的外部接口
    public Color blackColor;
    //用户白色方块的外部接口
    public Color whiteColor;
    /// <summary>
    /// 用户设置
    /// </summary>
    void Awake()
    {
        SingleClass.Instance().ChangeBlackColor(blackColor);
        SingleClass.Instance().ChangeWhileColor(whiteColor);
    }

    /// <summary>
    /// 游戏开始
    /// </summary>
    void Start()
    {
        //在000的位置创建预设体对象
        GameObject mycubes =
            Instantiate(cubes,Vector3.zero,
            Quaternion.identity) as GameObject;
        //随机的索引号
        int index = Random.Range(0,4);
        //给四个方块设置颜色
        for(int i = 0 ; i < 4 ; i++)
        {
            //随机到的方块设置成黑块颜色
            if(i == index)
            {
                mycubes.transform.GetChild(i).
                GetComponent<SpriteRenderer>().color =
                    SingleClass.Instance().blackColor;
            }
            //其他三个方块设置成白块颜色
            else
            {
                mycubes.transform.GetChild(i).
                GetComponent<SpriteRenderer>().color =
                    SingleClass.Instance().whiteColor;
            }
        }
    }
}


作者:莫新宇

公司:蓝鸥科技有限公司

微信号:M514208625

Sina微博:欣羽馨予

邮箱:[email protected]

时间: 2024-08-08 11:04:19

馨予带你飞之unity中使用单例(二)的相关文章

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

Java设计模式中的单例设计

/** * 单例设计模式 * 应用场合:只需要一个对象的 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型有:饿汉模式.懒汉模式 * 下面的例子是一个饿汉模式的例子 */ class SingleDemo { // 1.将构造方法私有化,不允许外部直接创建使用 private SingleDemo() {} // 2.创建类的唯一实例,使用private static修饰 private static SingleDemo instance = new SingleDemo(); //

iOS开发——多线程OC篇&amp;多线程中的单例

多线程中的单例 1 #import "DemoObj.h" 2 3 @implementation DemoObj 4 5 static DemoObj *instance; 6 7 8 9 // 在iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法 10 // 如果要做单例,需要重写此方法 11 // GCD提供了一个方法,专门用来创建单例的 12 + (id)allocWithZone:(struct _NSZone *)zone 13 { 14 sta

【Spring】8、Spring框架中的单例Beans是线程安全的么

看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的.如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全. 最浅显的解决办法就是将多态bean的作用域由"singleton&

iOS中的单例你用对了?

单例模式怎么定义的,可能在不同的语言,不同的书中不完全一样,但是概况开来都应该是:一个类有且仅有一个实例,并且自行实例化向整个系统提供. 因此,首先你可能需要确定你是真的需要一个单例类,还是说仅仅是需要一个方便调用的实例化方法.如果你是真的需要一个单例类,那么你就应该确保这个单例类,有且仅有一个实例(不管怎么操作都只能获取到这个实例). 最近看到一些github上的单例使用,别人的用法,有一些思考,然后写demo测试了下,就这个简单的单例也有一些坑呢,希望能给他人一些提醒. Objective-

多个so中模板单例的多次实例化

在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次!   这个单例是通过继承模板来实现的(暂时不考虑线程安全的问题) template<class T>class CSingleT{public: static T * Instance() { if (!ms_pObject) { ms_pObject = new T; } return ms_pObject; } static voi

在Swift中实现单例方法

在写Swift的单例方法之前可以温习一下Objective-C中单例的写法: 1 + (instancetype)sharedSingleton{ 2 static id instance; 3 4 static dispatch_once_t onceToken; 5 dispatch_once(&onceToken, ^{ 6 instance = [[self alloc] init]; 7 }); 8 return instance; 9 } 首先可以考虑仿照OC中的写法写一个. 因此S

笔记:Java中的单例设计模式

之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类有且仅有一个实例,并且自行实例化向整个系统提供. 单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将

缓存中获取单例bean

前言 上一篇文章FactoryBean的使用实际上是为了Bean的加载的详细解析进行的介绍FactoryBean,从这篇文章开始,LZ会对Bean的加载过程进行详细的讲述,之前文章Bean的加载只是对Bean的加载过程进行了快速的大致上的过了一遍,详细的解析过程开始... 缓存中获取单例bean 前面的文章Bean的加载已经提到过,单例在Spring的同一个容器中只会被创建一次,后续再获取bean直接从单例缓存中获取,当然这里也只是尝试加载,首先尝试从缓存中加载,然后再尝试从singletonF