Unity 单例
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 单例的更多相关文章
- C# LINQ Unity 单例
C# LINQ 1. 自定义 Master,Kongfu 类 1 class Master 2 { 3 4 public int Id { get; set; } 5 public string ...
- unity单例封装
# 1.前言本篇主要针对Unity单例模式,完成一个可以重复继承使用的抽象类,减少重复的工作与代码.同时,对存在的多种单例进行优劣分析.# 2.Unity单例问题分析## 2.1 单例原则单例要满足以 ...
- Unity 单例写法
借鉴自:http://www.cnblogs.com/CodeCabin/p/unity_global_manager.html 实现复杂一些的全局控制,如切换游戏关卡等操作,更常用的方式是使用单例类 ...
- C#单例和Unity单例
单例是一种设计模式 单例:不管在项目中的任何模块,当需要使用某个对象的时候,获取到的始终是同一个对象 在C#中 public class InstanceDemo{ private static In ...
- Unity单例
引自:http://www.unitymanual.com/thread-16916-1-1.html
- unity脚本的运行顺序以及单例的实现
unity引擎把所有脚本先行编译后,在运行的时候一批,一批的函数进行执行. unity脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到 Awake ->OnEable-> St ...
- Unity Singleton 单例类(Unity3D开发之二十)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...
- Unity 游戏框架搭建 (三) MonoBehaviour单例的模板
上一篇文章讲述了如何设计C#单例的模板.也随之抛出了问题: 如何设计接收MonoBehaviour生命周期的单例的模板? 如何设计? 先分析下需求: 1.约束脚本实例对象的个数. 2.约束 ...
- Unity 游戏框架搭建 (二) 单例的模板
上一篇文章中说到的manager of managers,其中每个manager都是单例的实现,当然也可以使用静态类实现,但是相比于静态类的实现,单例的实现更为通用,可以适用大多数情况. 如何设计 ...
随机推荐
- Lua table
获取数组长度 在Lua中可以使用“#”和table.maxn两种方法来获取数组的长度 arr = {,,,} arr[] = 7 都仅统计数字key的长度: #是从1递增到nil的长度: table. ...
- HTML CSS 表格换行禁止 超出指定长度自动截断
word-break:keep-all; white-space:nowrap; overflow:hidden; min-width:30px; max-width:100px;
- 【DUBBO】Dubbo:monitor的配置
[一]:配置项 <dubbo:monitor protocol="registry"/> [二]:配置解析器-->具体解析器为com.alibaba.dubbo. ...
- spring事务中隔离级别和spring的事务传播机制
Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要 么就不做.也就是说,事务必须是 ...
- CH1801 括号画家
题意 Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号.这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号( ).中括号[ ]和大括号{ },总长度为N.这排随意绘制的括 ...
- Nginx配置(需要把nginx的根目录指向ftp上传文件的目录。)
改成
- mint-ui框架的使用
1.安装mint-ui框架: cnpm install mint-ui --save-dev 在main.js入口文件中引入并命名用mint-ui框架 import Vue from 'vue' im ...
- mix deps HEX_HTTP_CONCURRENCY=1 HEX_HTTP_TIMEOUT=120 timeout
mix deps.get timeout 问题: If this happens consistently, adjust your concurrency and timeout setting ...
- smarty 模板编译和变量调节器 模板引入
<?php require './smarty/Smarty.class.php'; $sm = new Smarty; //$sm->force_compile = true; $sm- ...
- strlen和sizeof的长度区别
strlen返回字符长度 而sizeof返回整个数组占多长,字符串的\0也会计入一个长度