1. 继承于MonoBehaviour(不随着场景切换而销毁)

  基类代码:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 单例模式基类,继承于 MonoBehaviour,不随场景切换而销毁
/// 在场景中新建空物体 DDOL,挂载 T 类继承 DDOLSingleton<T> 即可
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class DDOLSingleton<T> : MonoBehaviour where T : DDOLSingleton<T>
{
protected static T _instance = null; public static T Instance
{
get
{
if (null == _instance)
{
GameObject go = GameObject.Find("DDOL");
if (null == go)
{
go = new GameObject("DDOL");
DontDestroyOnLoad(go);
}
_instance = go.GetComponent<T>();
if (null == _instance)
{
_instance = go.AddComponent<T>();
}
}
return _instance;
}
}
}

  测试:

  新建空实体 DDOL,挂载脚本 GameManage。

  新建一个按钮,实现加载下一场景功能,测试是否随场景销毁而销毁。

  Hierarchy :

  GameManage 代码:

 using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 单例
/// </summary>
public class GameManage : DDOLSingleton<GameManage> {
public void TestMethod()
{
Debug.Log("GameManage");
}
}

  测试代码:

 /// <summary>
/// 测试单例
/// </summary>
public class Test : MonoBehaviour { // Use this for initialization
void Start () {
GameManage.Instance.TestMethod();
} // Update is called once per frame
void Update () { } public void OnBtnClick()
{
SceneManager.LoadScene();
}
}

  效果图:

2. 不继承于MonoBehaviour(随着场景切换而销毁)

  基类代码:

 /// <summary>
/// 单例模式基类,不继承于 MonoBehaviour,随场景切换而销毁
/// 挂载 T 类继承 DDOLSingleton<T>,重载 Init 函数即可
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class Singleton<T> where T : class, new()
{
protected static T _instance = null; public static T Instance
{
get
{
if (null == _instance)
{
_instance = new T();
}
return _instance;
}
} protected Singleton()
{
if (null != _instance)
{
Debug.LogError("This " + typeof(T).ToString() + " Singleton Instance is not null !!!");
}
Init();
} public virtual void Init()
{ }
}

  此时 GameManage 代码修改为:

 /// <summary>
/// 测试 Singleton
/// </summary>
public class GameManage : Singleton<GameManage> {
public override void Init()
{
base.Init();
} public void TestMethod()
{
Debug.Log("GameManage");
}
}

Unity 单例的更多相关文章

  1. C# LINQ Unity 单例

    C# LINQ   1. 自定义 Master,Kongfu 类 1 class Master 2 { 3 4 public int Id { get; set; } 5 public string ...

  2. unity单例封装

    # 1.前言本篇主要针对Unity单例模式,完成一个可以重复继承使用的抽象类,减少重复的工作与代码.同时,对存在的多种单例进行优劣分析.# 2.Unity单例问题分析## 2.1 单例原则单例要满足以 ...

  3. Unity 单例写法

    借鉴自:http://www.cnblogs.com/CodeCabin/p/unity_global_manager.html 实现复杂一些的全局控制,如切换游戏关卡等操作,更常用的方式是使用单例类 ...

  4. C#单例和Unity单例

    单例是一种设计模式 单例:不管在项目中的任何模块,当需要使用某个对象的时候,获取到的始终是同一个对象 在C#中 public class InstanceDemo{ private static In ...

  5. Unity单例

    引自:http://www.unitymanual.com/thread-16916-1-1.html

  6. unity脚本的运行顺序以及单例的实现

    unity引擎把所有脚本先行编译后,在运行的时候一批,一批的函数进行执行. unity脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到 Awake ->OnEable-> St ...

  7. Unity Singleton 单例类(Unity3D开发之二十)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...

  8. Unity 游戏框架搭建 (三) MonoBehaviour单例的模板

      上一篇文章讲述了如何设计C#单例的模板.也随之抛出了问题: 如何设计接收MonoBehaviour生命周期的单例的模板? 如何设计? 先分析下需求:   1.约束脚本实例对象的个数.   2.约束 ...

  9. Unity 游戏框架搭建 (二) 单例的模板

      上一篇文章中说到的manager of managers,其中每个manager都是单例的实现,当然也可以使用静态类实现,但是相比于静态类的实现,单例的实现更为通用,可以适用大多数情况. 如何设计 ...

随机推荐

  1. Vijos1891 学姐的逛街计划 【费用流】*

    Vijos1891 学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课. 偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, ...

  2. 《DSP using MATLAB》示例Example 6.27

    代码: % r = 0.9; theta = (pi/180)*[-55:5:-35, 35:5:55]'; p = r*exp(j*theta); a = poly(p); b = 1; w = [ ...

  3. CMDB

    一.CMDB CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧 ...

  4. win7下VS2010编译python3

    转自:http://www.cnblogs.com/fortwo/archive/2013/04/16/3023871.html 1.首先从python.org上:http://www.python. ...

  5. hadoop之 hadoop用途方向

    hadoop是什么?Hadoop是一个开源的框架,可编写和运行分不是应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式.Hadoop=HDFS(文 ...

  6. 互联网的keyvalue处理

    今天在和许伟讨论系统配置页面得时候,许伟提到了“打通页面”的概念,当时我没太明白,后来才知道是指类似于cloudera里面的配置页面那种,不是列表页,而是展示+编辑在一个页面.刚才想了一下,其实对于这 ...

  7. RK3288 摄像头左右镜像

    系统:Android 5.1 设置摄像头左右镜像 diff --git a/frameworks/av/services/camera/libcameraservice/api1/CameraClie ...

  8. nagios(centreon)监控Linux日志

    1 将check_log3.pl下载后放到客户端服务器的插件文件夹[root@SSAVL2475 libexec]# cp /tmp/check_log3.pl  /usr/local/nagios/ ...

  9. 常见企业IT支撑【8、端口回流问题】

    端口回流故障场景,常见于内网启用了Server服务器,使用出口路由设备的外网口NAT映射了一个公网地址,域内内网主机访问了这个公网地址,访问不通. 故障容易出现在办公网内的带有对外Server测试环境 ...

  10. 关于千兆以太网芯片及VLAN浅析

    MARVEL出产的高端千兆以太网交换芯片,对每个端口支持不同的交换模式. 包括4种模式: Secure模式:所带VLAN tag必须存在于VTU表中,且入端口必须是该VLAN成员,否则丢弃报文. Ch ...