[框架] Unity 公共执行器
本篇我们通过使用单例模式来创建一个公共执行器,使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行,且可进行添加和移除操作。
1. 创建单例模式改造器:SingletonMono
我们先创建一个单例模式改造器,使得其它类想要使用单例模式都可以直接继承该类:
using UnityEngine;public class SingletonMono<T> : MonoBehaviour where T : SingletonMono<T>
{public static T Instance;protected virtual void Awake(){if (Instance == null){Instance = (T)this;}else{Destroy(gameObject);}}
}
2. 公共执行器:MonoManager
关于 PlayerInputControl 类的相关解释可参考文章:[步骤] 启用Unity全新输入系统。
using System;
using UnityEngine;public class MonoManager : SingletonMono<MonoManager>
{[HideInInspector] public PlayerInputControl input;private void OnEnable(){if (input == null)input = new PlayerInputControl();input.Enable();}private void OnDisable(){input?.Disable();}private Action updateAction;private Action lateUpdateAction;private Action fixedUpdateAction;public void AddUpdateListener(Action action){updateAction += action;}public void RemoveUpdateListener(Action action){updateAction -= action;}public void AddLateUpdateListener(Action action){lateUpdateAction += action;}public void RemoveLateUpdateListener(Action action){lateUpdateAction -= action;}public void AddFixedUpdateListener(Action action){fixedUpdateAction += action;}public void RemoveFixedUpdateListener(Action action){fixedUpdateAction -= action;}private void Update(){updateAction?.Invoke();}private void LateUpdate(){lateUpdateAction?.Invoke();}private void FixedUpdate(){fixedUpdateAction?.Invoke();}
}
3. 测试:TestMonoManager
using System.Collections;
using UnityEngine;public class TestMonoManager : MonoBehaviour
{Coroutine coroutine;private void Start(){MonoManager.Instance.AddUpdateListener(TestUpdate);MonoManager.Instance.AddFixedUpdateListener(TestFixedUpdate);MonoManager.Instance.AddFixedUpdateListener(TestLateUpdate);coroutine = MonoManager.Instance.StartCoroutine(TestCoroutine());}private void TestUpdate(){print("正在执行Update");}private void TestFixedUpdate(){print("正在执行FixedUpdate");}private void TestLateUpdate(){print("正在执行LateUpdate");}private IEnumerator TestCoroutine(){while (true){yield return new WaitForSeconds(0.1f);print("正在执行TestCoroutine");// 当用户按下<移动键>则停止执行该协程if (MonoManager.Instance.input.Player.Move.ReadValue<Vector2>() != Vector2.zero){MonoManager.Instance.StopCoroutine(coroutine);}}}}
相关文章:
[框架] Unity 公共执行器
本篇我们通过使用单例模式来创建一个公共执行器,使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行,且可进行添加和移除操作。 1. 创建单例模式改造器:SingletonMono 我们先创建一个单例模式改造器,使…...
二进制转为HEX数组小工具
在使用RA8889时,JPG的解码只能从FLASH的DMA通道获取,那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办? RA8889支持JPG图片硬解码,但数据流是从FLASH进行DMA读取的,然后再进行解码。因此这种情况下ÿ…...
数据结构-二叉树-红黑树
一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…...
C++11 新特性 decltype 说明符
一、typeof与typeid 1.1、typeof 在C11标准之前,GCC已经提供了一个类似功能的运算符 typeof对类型进行推导,但是这毕竟是编译器的实现,不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符,获取的类型…...
java线程局部变量使用方式
线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在,并且每个线程都有自己的一份拷贝。换句话说,线程局部变量是线程私有的,其他线程无法访问。 使用场景主要包括: 1. 存储线程状态信息ÿ…...
【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙
【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…...
2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享
大家好,从昨天肝到现在,终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解!_哔哩哔哩_bilibili 2024数维杯…...
中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2022年12月 编程题五道 总分:100分一、鸡兔同笼(20分) 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至…...
今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日
每天一分钟,知晓天下事! 2024年5月12日 星期日 农历四月初五 1、 全国多地已推“一次挂号管三天”,部分医院专家门诊适用。 2、 在梅大高速塌方事故中拦车、救援,黄曼秋等5人拟确认为见义勇为。 3、 深圳新能源车指标申请条件调…...
微服务思想以及实现
文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求(RestTemplate)3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…...
C语法:格式符号%f和%lf引发的错误
今天编程时有如下代码: #include"stdio.h"int main(void) {double profit;double bonus;printf("请输入本月利润\n");scanf("%f",&profit);//错误:此行profit是double类型,格式符为%f,当输入8时࿰…...
Java基础入门day48
day48 JDBC调用关系 tomcat 简介 tomcat是Apache下的一个核心项目,免费开源,支持servlet和jsp。 tomcat技术先进,性能稳定,目前比较流行的web应用服务器 安装 官网: Apache Tomcat - Welcome! 下载 tomcat8.5 解压&a…...
C++笔记(体系结构与内核分析)
1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起,目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开,可以将任何容器与任何算法结合使用,只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …...
c++ 唤醒指定线程
在C中,直接唤醒一个特定的线程并不像在Java的Thread类中有interrupt()方法或者某些操作系统特定的API(如POSIX的pthread_cond_signal或Windows的SetEvent)那样简单。C标准库没有提供一个直接的方法来"唤醒"一个正在等待的线程。然而…...
java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
今天遇到一个问题 系统线上问题,经常出现这样的问题,刚重启系统时不报错了,可是运行一段时间又会出现。sql已经写了limit 1,mybatis的debug日志也返回total为1,可是却报错返回了1805条数据 乍一看,感觉太不…...
AI图书推荐:利用生成式AI实现业务流程超自动化
《利用生成式AI实现业务流程超自动化》(Hyperautomation with Generative AI)这本书探索了广泛的用例和示例,展示了超自动化在不同行业、领域和特定部门的多样化应用, 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…...
什么事防抖和节流,有什么区别,如何实现
防抖和节流,本质上是优化高频率执行代码的一种手段,比如:resize、scroll、keypress、mousemove这些事件在触发的时候,会不断调用绑定在事件上的回调函数,这样极大浪费资源,降低前端性能。 为了优化体验&am…...
PanguSync大数据量初始化脚本
由于数据库增量同步软件PanguSync初始化最大超时时间为600s,如果初始数据量很大,第一次部署时可能会超时,可以先停止任务,使用以下Sql语句进行初始化,以下语句可以分步执行,初始化完成后,后续无需再执行耗时…...
DELL T630服务器iDRAC分辨率调整办法
对于Dell T630服务器的iDRAC分辨率调整,您需要登录到iDRAC的Web界面。以下是详细的步骤: 登录iDRAC:在浏览器中输入iDRAC的IP地址,然后使用用户名(通常是“root”)和密码登录。 导航到虚拟控制台ÿ…...
您真的会高效使用 Mac 吗?
文章目录 屏幕的保养快捷键预览修改文件名查看文件属性搜索编辑复制,粘贴,剪切,撤销删除 跳转窗口屏幕截图声音Dock强制退出查字典神奇的Option键鼠标与触控板切换桌面与应用程序打开通知中心打开Mission Control 安装与卸载Mac应用程序压缩和…...
环境管理从未如此简单:Miniconda-Python3.9镜像快速入门指南
环境管理从未如此简单:Miniconda-Python3.9镜像快速入门指南 1. 为什么选择Miniconda-Python3.9镜像 Python作为当今最流行的编程语言之一,在数据科学、机器学习和Web开发等领域有着广泛应用。但Python环境管理一直是开发者面临的痛点之一,…...
智慧园区能源管理系统解决方案
某园区集成生产、办公、生活三大功能,建设有生产厂房、化学品库、辅助用房、气罐站、研发楼、综合楼及其他配套设施,涉及到多种用能,包含电能、天然气、压缩空气、冷热能等,带来日益高昂的能耗成本与能源浪费隐患。 1、制冷空调监…...
从PVT到CST:5种CiA402控制模式在机器人项目中的花式用法(附ROS2配置示例)
从PVT到CST:5种CiA402控制模式在机器人项目中的花式用法(附ROS2配置示例) 在工业机器人开发中,控制模式的灵活切换往往能解决80%的运动控制难题。当机械臂需要完成高精度装配时,CSP模式能保证微米级定位;执…...
当 Go 还在追求极简时,C++ 26 却又加了四大“史诗级”新特性
大家好,我是Tony Bai。在这个 Go、Zig 等“小而美”新语言颇受青睐的时代,如果你去技术社区里问一句:“C 这门语言怎么样?”你大概率会得到一堆充满戏谑的回答:“太复杂了,别学”、“从入门到放弃”、“面试…...
CSSCI论文写作07:如何写作文献综述
认识文献综述 什么是文献综述 文献综述(literaturereview)是对目前为止的、与某一研究问题相关的各种文献进行系统查阅和分析,以了解该领域研究状况的过程。从具体形式来看,文献综述分为以下两种: (1)完整的、可直接发表的文献综述。它通常包括引言、概述、正文、目前研…...
158页精品PPT | 某大型研发制造集团信息化IT规划整体方案
许多公司在数字化转型过程中会遇到一些共同的挑战,比如数据孤岛、技术更新慢、员工技能不足等。这些问题会导致企业效率低下,难以适应市场变化。针对这些问题,我们提出了一套解决方案,核心目标是帮助企业提升数字化水平࿰…...
商用电子表格:重塑美国经济的隐形力量
电子表格虽不受人喜爱,却是有史以来最成功的应用软件,全球六分之一的人都在使用。它重塑了美国经济,改变了企业的认知与运营方式。不起眼的伟大工具微软 Excel 是最成功的应用软件,全球六分之一的人都在使用它,还决定着…...
Graphormer部署案例:中小企业AI药物研发团队低成本GPU算力部署方案
Graphormer部署案例:中小企业AI药物研发团队低成本GPU算力部署方案 1. 项目背景与价值 在药物研发领域,分子属性预测是核心环节之一。传统实验方法成本高昂且周期漫长,而Graphormer作为基于纯Transformer架构的图神经网络,为这一…...
**发散创新:策略即代码——用 Rust实现动态权限控制引擎**在现代软件系统中,权限管理早已不是简单的“用
发散创新:策略即代码——用 Rust 实现动态权限控制引擎 在现代软件系统中,权限管理早已不是简单的“用户-角色-资源”映射。越来越多的业务场景要求我们具备灵活、可扩展、易维护的权限决策机制。传统硬编码方式难以应对频繁变更的业务规则,而…...
3步搭建PP-DocLayoutV3服务:快速体验文档版面分析的强大能力
3步搭建PP-DocLayoutV3服务:快速体验文档版面分析的强大能力 1. 引言:文档版面分析的价值 在日常工作中,我们经常需要处理各种文档——合同、论文、报告、书籍等。传统OCR技术虽然能识别文字,但往往无法理解文档的结构ÿ…...
