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

在这里插入图片描述


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

👨‍💻 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.mzph.cn/news/81831.shtml

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

相关文章

iptables 防火墙配置

文章目录 iptables 防火墙配置规则链的分类–五链处理的动作iptables 常用参数和作用iptables 防火墙配置查看规则链清空规则链设置默认规则将流入的流量丢弃允许ICMP协议流量通过删除默认策略允许所以流量通过设置将所有流入22端口的流量全部拒绝允许指定网段的22端口通过设置…

学习如何使用最强大的 JavaScript 函数

今天你将学习如何使用**最强大的** JavaScript函数。 数组归约 “Array.reduce是最强大的 JavaScript Function. 时期。 ” reduce有什么作用?为何如此强大? 这是reduce的技术定义...... Array.prototype.reduce() reduce() 方法对数组的每个元素执行(您提供的)reducer 函…

Java键盘录入案例

键盘录入 Java里面有一个类叫Scanner&#xff0c;可以接收键盘输入的数字 第一步&#xff1a;导包&#xff0c;找Scanner这个类 import java.util.Scanner; 导包必须在类定义的上边&#xff08;public class上面&#xff09; 第二步&#xff1a;创建对象&#xff0c;开始使用Sc…

selenium学习

selenium模块和爬虫之间的关联 便捷的获取网站中动态加载的数据便捷实现模拟登录 什么是selenium模块 基于浏览器自动化的一个模块 selenium使用流程&#xff1a; - 环境安装&#xff1a;pip install selenium - 下载一个浏览器的驱动程序&#xff08;谷歌浏览器&#xff…

【数据分享】2000-2022年全球范围500m分辨率类NPP-VIIRS夜间灯光数据

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;我们平时使用的夜间灯光数据主要来源于NPP/VIIRS和DMSP/OLS两种渠道&#xff0c;这两种数据由于分辨率、数据年份、传感器等不同存在不兼容的情况限制了长时序夜间灯光数据的使用&#xff0c;针对该问题我们之前分享过…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

linux在所有文件中查找某一个字符串

linux在所有文件中查找某一个字符串 有时候我们需要在大量文件中查找某一个字符串&#xff0c;手工一个一个打开文件查找非常耗时&#xff0c;我们可以使用 find 和 xargs 两个命令来实现查找指定字符串。 命令详解 find <directory> -type f -name "*.c" |…

【AI视野·今日Robot 机器人论文速览 第三十五期】Mon, 18 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 18 Sep 2023 Totally 44 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;GelSplitter, 基于近红外与可见光融合实现高精度surfaceNormal重建的触觉传感器。(from 华中科技大学) 基于分光镜的紧凑型…

centos8 install mujoco

一、ubuntu 上安装mujoco $ sudo apt-get install libglfw3 libglew2.0 libgl1-mesa-glx libosmesa6 然后pip install mujoco_py二、centos没有apt install所对应的库 2.1 尝试解决centos8上安装mujoco环境依赖问题 执行python -c "import mujoco_py"时&#xff0…

项目:点餐系统

项目扩展&#xff1a; 1.订单操作 2.用户管理&#xff08;临时用户生成用户注册与登录&#xff09; 项目有可能涉及到的面试&#xff1a; 说说你的项目 为什么要做这个项目 服务器怎么搭建的 最初我自己写了一个简单的服务器&#xff0c;但是不太稳定&#xff0c;比较粗…

nginx代理socket链接集群后,频繁断开重连

目录 一、场景二、具体表现如下三、nginx代理配置四、nginx报错信息1、nginx错误日志2、nginx访问日志 五、服务端socket链接日志六、原因七、解决 一、场景 nginx使用集群模式代理多个socket链接&#xff0c;socket链接频繁断开重连 二、具体表现如下 三、nginx代理配置 ## …

LInux - mini_shell

结合进程替换的内容&#xff0c;我们可以自己实现一个简单的shell&#xff0c;shell是命令行解释器 #include<stdio.h> #include<unistd.h> #include<sys/wait.h> #include<string.h> #include<stdlib.h> #define MAX_C 128 #define MAX_CMD 32…

ELK之Logstash启动异常:Logstash could not be started because there is already...

Logstash启动异常&#xff1a; Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting. 提示我们已经有一个实例在用da…

vscode 配置网址

首先我的项目是一个面向医院的系统 我是在三个文件里都配置了网址 第一个文件&#xff1a;vue.config.js const path require(path) const webpack require(webpack) const createThemeColorReplacerPlugin require(./config/plugin.config)function resolve (dir) {retu…

Truenas Scale 安装 Official NextCloud

参考 Lawrence Systems 的 Youtube,频道有教程。 安装 安装 Collabora&#xff0c;只需要修改 账户&#xff0c;密码&#xff0c;及证书。 新增 dataset&#xff0c;名称 “NextCloud_Database”&#xff0c;其他默认新增 dataset&#xff0c;名称 “NextCloud_Data”&#…

什么是边缘计算网关?

边缘计算网关&#xff08;简称 边缘网关&#xff09;将云端功能扩展到本地的边缘设备&#xff0c;使边缘设备能够快速自主地响应本地事件&#xff0c;提供低延时、低成本、隐私安全、本地自治的本地计算服务。 同时所有服务都以 Docker 镜像方式安装&#xff0c;真正做到了跨平…

vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动

问题描述&#xff1a;默认情况下 vue-grid-layout 移动卡片到页面底部时页面滚动条并不会跟随卡片滚动。 问题解决&#xff1a; 在 grid-item中的move事件中&#xff0c;获取到当前移动的元素&#xff0c;并使用scrollIntoView方法来实现滚动条跟随。 代码如下&#xff1a; c…

安卓系列机型 另类体验第三方系统 DSU操作步骤解析 不影响主系统开启第二系统

dsu loader即 动态系统更新&#xff0c;可以在使用动态分区的安卓设备上&#xff0c;不影响原来系统的同时安装一个副系统&#xff0c;用于体验最新的原生安卓系统。可以不影响主系统的基础上体验其他gsi第三方。DSU 依赖于 Android 动态分区功能&#xff0c;并要求 GSI 作为可…

python爬虫爬取电影数据并做可视化

思路&#xff1a; 1、发送请求&#xff0c;解析html里面的数据 2、保存到csv文件 3、数据处理 4、数据可视化 需要用到的库&#xff1a; import requests,csv #请求库和保存库 import pandas as pd #读取csv文件以及操作数据 from lxml import etree #解析html库 from …

山西电力市场日前价格预测【2023-09-19】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-19&#xff09;山西电力市场全天平均日前电价为358.08元/MWh。其中&#xff0c;最高日前电价为417.72元/MWh&#xff0c;预计出现在19: 00。最低日前电价为325.97元/MWh&#xff0c;预计…