【Unity程序技巧】Unity中的单例模式的运用

news2024/10/6 12:29:13

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==1==)未继承Mono的单例模式
    • 🎶(==2==)通用单例模式的基类泛型模板
    • 🎶(==3==)继承Mono的单例模式
    • 🎶(==4==)继承Mono的单例模式的泛型模板
    • 🎶(==5==)单例模式的泛型模板自动添加
    • 🅰️


前言

菜鸟教程

“单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。”

  • 有错误的地方在于new 的部分
    在这里插入图片描述
    在这里插入图片描述

🎶(1未继承Mono的单例模式


  • 脚本:

public class  GameManagers
{
    private static GameManagers instance;
    public static GameManagers GetInstance()
    {
        if (instance == null) instance = new GameManagers();
        return instance;
    }
}

🎶(2通用单例模式的基类泛型模板


  • 脚本:
public class  GameManagers<T> where T : new()
{
    private static T instance;
    public static T GetInstance()
    {
        if (instance == null) instance = new T();
        return instance;
    }
}
//继承单例模式泛型模板的基类
public class BaseContorl : GameManagers<BaseContorl>
{

}

🎶(3继承Mono的单例模式


  • 脚本:
public class Single : MonoBehaviour
{
    private static Single singleControl;
    public static Single SingleControl => singleControl;

    private void Awake()
    {
        singleControl = this;
    }
}

  • 存在的问题

不要在此处new了

在这里插入图片描述


🎶(4继承Mono的单例模式的泛型模板


  • 脚本:
public class SingleBase<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T singleControl;
    public static T SingleControl => singleControl;
    
    //保护类型的虚函数,可供子类重写 
    protected virtual  void Awake()
    {
        singleControl = this as T;
    }
}

//当子类继承单例模式的泛型模板的时候
public class GameContorls : SingleBase<GameContorls>
{
  
    protected override void Awake()
    {
        //子类需要要重写,因为示例返回需要执行
        base.Awake();
    }
}
  • 缺点:

🎶(5单例模式的泛型模板自动添加


  • 之前的那种模式,当我们连续把单例模式脚本拖拽两次就会破坏单例模式的唯一性
  • 避免了手动拖拽脚本才可以激活单例模式 ,自动添加单例模式,想用就直接调用方法
public class SingleBase<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T instance;

    public static T Geteinstance()
    {
        if (instance == null)
        {
            //用代码创建一个新对象并且添加单例模式脚本
            GameObject obj = new GameObject();
            //设置对象的名字为脚本的名字
            obj.name = typeof(T).ToString();
            //instance就等于添加的这个脚本
            instance = obj.AddComponent<T>();
            //为了保证换场景的时候单例模式还存在
            DontDestroyOnLoad(obj);
        }

        return instance;
    }
}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-checkbox-group限制勾选数量

<!--* Description: 视频监控 页面* Author: mhf* Date: 2023-08-15 13:26:33 --> <template><div class"videoSurveillance"><el-row :gutter"24"><el-col :span"4"><div class"videoSurveillance-left&…

亚马逊评分规则是什么,如何提高亚马逊等级评分-站斧浏览器

亚马逊平台的账户评级问题&#xff0c;如果账号评级比较差的话&#xff0c;那么会有一些不好的影响&#xff0c;因此卖家朋友们需要想办法去提升自己的账户评级。那么亚马逊评分规则是什么&#xff0c;如何提高亚马逊等级评分。 亚马逊评分规则是什么&#xff1f; 所有新卖家…

看阿里测试工程师如何玩转postman+newman+jenkins接口自动化

postman用来做接口测试非常方便&#xff0c;接口较多时&#xff0c;则可以实现接口自动化 一、环境准备 1.安装nodejs6.0 安装nodejs6.0&#xff08;github上面写的版本要求&#xff09;&#xff0c;用于安装newman4.0&#xff0c;到nodejs官网下载即可https://nodejs.org/en/…

集成Activiti-Modeler流程设计器

集成Activiti-Modeler流程设计器 Activiti Modeler 是 Activiti 官方提供的一款在线流程设计的前端插件&#xff0c;可以方便流程设计与开发人员绘制流程图&#xff0c;保存流程模型&#xff0c;部署至流程定义等等。 1、材料准备 首先我们需要获取activiti-explorer.zip&…

(三十)大数据实战——HBase集成部署安装Phoenix

前言 Phoenix 是一个开源的分布式关系型数据库查询引擎&#xff0c;它基于 Apache HBase构建。它提供了在 Hadoop 生态系统中使用 SQL查询和事务处理的能力。本节内容我们主要介绍一下Hbase如何集成部署安装Phoenix服务工具&#xff0c;并集成hive框架&#xff0c;能够快速、灵…

什么是16S rRNA,rDNA, 菌群研究为什么用16S测序,细菌如何命名分类?

谷禾健康 当谈到肠道菌群研究时&#xff0c;16S测序是一种常用的方法&#xff0c;它在了解微生物组成和多样性方面非常重要且实用。 16S rRNA是细菌和古细菌中的一个高度保守的基因片段&#xff0c;同时具有一定的变异性。通过对16S rRNA基因进行测序&#xff0c;可以确定微生物…

9.3.5网络原理(应用层HTTP/HTTPS)

一.HTTP: 1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频. 2. 3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body). 4. 5.URL:唯一资源描述符(长度不限制). a. b.注意:查询字符串(query stri…

Linux内核源码分析 (B.x)Linux内核的页面分配机制

一、伙伴系统 如果不遵循以上原则&#xff0c;在一个很大的连续空间里&#xff0c;会出现不连续的空洞&#xff0c;造成外部碎片 一般MAX_ORDER取11&#xff0c;也就是说Linux内核最大分配的最大内存块为2^10个页面&#xff0c;大小为4MB。 二、迁移类型 使用迁移类型可以实现…

【多区域电力系统模型】三区域电力系统的LQR和模糊逻辑控制(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…

典型数据结构-栈/队列/链表、哈希查找、二叉树(BT)、线索二叉树、二叉排序树(BST树)、平衡二叉树(AVL树)、红黑树(RB树)

目录 典型数据结构列举 栈/队列/链表 树 二叉树 线索二叉树 二叉排序树 平衡二叉树&#xff08;AVL树&#xff09; 红黑树 其它树种和应用介绍 典型数据结构列举 栈/队列/链表 描述略。 一些基本的简单实现参考/数据结构简单实现/文件夹里面。 线性表详解&#xff…

Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p33632 机器学习模型的表现不佳通常是由于过度拟合或欠拟合引起的&#xff0c;我们将重点关注客户经常遇到的过拟合情况&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 过度拟合是指学习的假设在训练数据上…

部署云MYSQL(在线版)

在Methodot - 您的一站式云原生在线开发协作平台网站上可以部署免费的MYSQL&#xff0c;在应用商店里能看到可以搭建多种数据库&#xff1a;&#xff08;前提是要注册登录&#xff0c;免费版只能是2人共享&#xff09; 登陆好后&#xff0c;点击工作台&#xff0c;选择应用商店…

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

基于SpringBoot+Vue+协同过滤算法的电影推荐系统(可随意更改项目主题如音乐、美食、商品、小说等)

toc 一、前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&…

[矩阵的乘法运算] m*M = c

另人给的一道题&#xff0c;一时没弄出来&#xff0c;后来看WP&#xff0c;复现一下。 对于矩阵运算 m*M c 求m 的情况。 满秩差1半秩 import os import secret import hashlib from Crypto.Util.number import getPrime from Crypto.Util.Padding import padLEN 32def xo…

three3D的vite+vue版本基础代码

自己稍微处理一下目录结构 <script setup>// 导入three.js import * as THREE from three// 创建场景 const scene new THREE.Scene();// 创建相机 const camera new THREE.PerspectiveCamera(45, //视角window.innerWidth / window.innerHeight, //宽高比0.1, // 近平…

基于matlab求两个数最大公约数函数gcd

一、gcd函数 在MATLAB中&#xff0c;可以使用内置函数gcd()来求两个数的最大公约数。 二、示例 以下是使用MATLAB求两个数最大公约数的示例代码&#xff1a; % 定义两个数 a 36; b 48; % 求最大公约数 gcd_result gcd(a, b); % 输出结果 fprintf(最大公约数为&#xff1…

百度SEO优化策略与经验分享(提升百度排名的8大步骤)

百度关键词优化策略介绍&#xff1a;蘑菇号https://www.mooogu.cn/ 百度搜索引擎优化&#xff0c;简称为百度SEO&#xff0c;是一种通过优化网站结构和内容&#xff0c;提高网站在百度搜索引擎中的排名&#xff0c;从而获得更多有价值的流量和销售机会的行业术语。百度SEO的核…

项目上线部署--》服务器部署流程(一)

目录 &#x1f31f;准备工作 服务器购买 域名购买 域名解析&#xff08;配置 DNS&#xff09; &#x1f31f;服务器环境搭建 配置服务器 安装 CentOS 开发人员相关包 ​编辑 配置免密登陆 &#x1f31f;写在最后 &#x1f31f;准备工作 服务器购买 国内服务器&#x…