IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【Unity】Unity开发进阶(四)Unity脚本单例工具(必备工具) -> 正文阅读

[游戏开发]【Unity】Unity开发进阶(四)Unity脚本单例工具(必备工具)

在Unity场景中,经常有很多脚本需要引入,而这些脚本中,有很大一部分都是只需要引用一次,也只需要进行一次实例化,此时我们可以提供一个工具用于自动获取该脚本的实例对象,并保证全场景中只包含这一个实例,还能在脚本未被引入时实现自动引入脚本。这是一个非常实用的工具,几乎每个项目都会用到。

该工具的特点:

  1. 自动获取该脚本的实例对象。
  2. 保证全场景中只包含这一个实例。
  3. 在脚本未被引入时实现自动引入脚本。

具体代码如下:

/// <summary>
/// Mono脚本单例工具
/// 使用场景:所有在场景中只出现一次的脚本都应该使用此类获取实例。<br />
/// 作用:<br />
///     1、如果脚本已经被引用到场景中,则在任何类中都可以直接使用该子类的实例。<br />
///     2、如果脚本未被引用,可以直接使用此类进行引用,无需手动引用。<br />
/// 使用方法:<br />
///     1、在继承此类时必须将子类类型作为泛型传递给父类。<br />
///     2、在任意脚本生命周期中,通过子类类型访问Instance即可获取子类实例。<br />
/// </summary>
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{

    /// <summary>
    ///  实例对象,该对象不允许外部访问,在此类外部需要使用Instance的get方法来获取实例
    /// </summary>
    private static T instance;

    /// <summary>
    /// 用此方法来获取实例,当此方法第一次被调用时,会主动寻找子类的脚本,如果并未找到,则创建该脚本。
    /// </summary>
    public static T Instance
    {
        get
        {
            if (instance == null)
            {
                instance = FindObjectOfType<T>();
                if (instance == null)
                {
                    new GameObject("Singleton of " + typeof(T)).AddComponent<T>();
                }
                else
                {
                    instance.Init();
                }
            }
            return instance;
        }
    }

    protected void Awake()
    {
        if (instance == null)
        {
            instance = this as T;
            Init();
        }
    }

    /// <summary>
    /// 默认初始化方法,子类可以重写此方法进行初始化
    /// </summary>
    public virtual void Init()
    {

    }
}

// ****************下面为测试代码********************

// 这个类是我们需要实现单例的脚本,只需要继承MonoSingleton并提供泛型即可。
public class XXManager : MonoSingleton<XXManager>
{
    public void Fun1()
    {
        print("我要做事了~");
    }
}

// 这个类是用来测试调用的脚本,只需要使用调用类的Instance属性即可获取实例。
public class TestSingleton : MonoBehaviour
{

    private void Awake()
    {
        XXManager.Instance.Fun1();
    }

}

更多内容请查看总目录【Unity】Unity学习笔记目录整理

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:04:24  更:2021-09-08 11:05:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 20:25:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码