【Unity】用事件广播的方式实现游戏暂停,简单且实用!

1.前言

在做Unity项目的时候,要考虑到“游戏暂停”的功能,最直接的办法是修改游戏的Time.TimeScale = 0f。但是这种方式的影响也比较大,因为它会导致游戏中很多程序无法正常运行。

于是我就有了一个想法,在游戏中想要暂停的对象,只是希望它的某些行为暂时停止运行,在适当的时机下再让它启用。

那么我们可以专门设计一个这样的脚本,在暂停事件被触发的时候,来禁用这个对象的某些行为脚本,在暂停结束之后,再让这些脚本重新运行。

2.功能实现

2.1 搭建泛型事件框架

你可以参考我写的这篇文章,里面我提供了详细的搭建过程以及代码,方便你快速应用到你的项目当中:【Unity】搭建泛型事件框架,可广泛应用于中小型的游戏项目!!!_unity事件框架-CSDN博客

2.2 创建BoolEventSO

基于之前搭建的泛型事件框架,我们来创建这个类型(BoolEventListener如果你有需求可以创建,但是在我这个方案里面,可以不创建)

接着请在项目中创建一个BooEventSO的SO文件,取名就叫作OnGamePause吧!

using UnityEngine;
[CreateAssetMenu(fileName = "new BoolEventSO",menuName = "Events/BoolEventSO")]
public class BoolEventSO : BaseEventSO<bool>
{
}

2.3 创建PauseTrigger

PauseTrigger的使用方式没有太大的限制,你可以单独在场景中创建一个空对象,然后把这个脚本挂载上去,在列表中添加你在暂停的时候要禁用的脚本就行。

或者给你需要暂停的对象挂载,然后在列表中添加脚本也可以。

pauseEvent引用之前创建的“OnGamePause”SO文件即可。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 暂停触发器
/// 说明,用于在暂停事件被触发的时候,禁用指定的脚本
/// </summary>
public class PauseTrigger : MonoBehaviour
{//禁用目标列表public List<MonoBehaviour> pauseTargets = new();//引用暂停事件的SO文件public BoolEventSO pauseEvent;//true表示继续游戏,false表示暂停游戏private void OnGamePause(bool isPause){foreach(var pauseTarget in pauseTargets){pauseTarget.enabled = !value ;}}//注册事件private void OnEnable(){pauseEvent.OnEventRaised += OnGamePause;}//注销事件private void OnDisable(){pauseEvent.OnEventRaised -= OnGamePause;}
}

2.4 激活暂停事件

引用“OnGamePause”,调用里面的RaisedEvent函数,传参数即可。

比如,在某个脚本中,我希望实现点击“暂停”按钮暂停游戏,点击“继续”按钮继续游戏。

下面是节选的核心代码

public BoolEventSO onGamePauseSO;public void OnPauseButtonClick()
{onGamePauseSO?.RaisedEvent(true,this);
}public void OnContinueButtonClick()
{onGamePauseSO?.RaisedEvent(false,this);
}

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

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

相关文章

Suna: 开源多面手 AI 代理

GitHub&#xff1a;GitHub - kortix-ai/suna: Suna - Open Source Generalist AI Agent 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Suna 是一个完全开源的 AI 助手&#xff0c;可帮助您轻松完成实际任务。通过自然对话&#xff0c…

直接从图片生成 html

1. 起因&#xff0c; 目的: 无意间碰到一个网站: https://wise.com/zh-cn/currency-converter/brl-to-cny-rate其实我就是想搜一下巴西的货币单位是什么。这个网站的设计很漂亮&#xff0c; 尤其是颜色搭配很不错&#xff0c;讨人喜欢。所以我想让 AI 帮我生成类似的效果。本文…

验证码与登录过程逻辑学习总结

目录 前言 一、验证码与登录 二、使用步骤 1.先apipost测试一波 2.先搞验证码 3.跨域问题 4.后端走起 总结 前言 近期要做一个比较完整的demo&#xff0c;需要自己做一个前端登录页面&#xff0c;不过api接口都是现成的&#xff0c;一开始以为过程会很easy&#xff0c;…

轨道炮--范围得遍历,map巧统计

1.思路很难想&#xff0c;但代码一看一下就明白了&#xff0c;就是模拟时间&#xff0c;map存起来遍历也不受10*6影响 2.每次先统计点对应的直线&#xff0c;再动这个点&#xff0c;map一遍历实时更新ma统计max&#xff0c;AC!!!! https://www.luogu.com.cn/problem/P8695 #i…

Vue 3.5 新特性深度解析:全面升级的开发体验

Vue 3.5 新特性深度解析&#xff1a;全面升级的开发体验 前言 随着Vue 3.5的正式发布&#xff0c;这个渐进式JavaScript框架再次带来了令人兴奋的改进。本文将深入剖析Vue 3.5的核心更新&#xff0c;帮助开发者快速掌握新特性并应用于实际项目。 ✨ 核心新特性 1. 增强的响应…

质量管理工程师面试总结

今天闲着无聊参加了学校招聘会的一家双选会企业&#xff0c;以下是面试的过程。 此次面试采用的是一对多的形式。&#xff08;此次三个求职者&#xff0c;一个面试官&#xff09; 面试官&#xff1a;开始你们每个人先做个自我介绍吧。 哈哈哈哈哈哈哈哈&#xff0c;其实我们…

c++ std库中的文件操作学习笔记

1. 概述 C标准库提供了 头文件中的几个类来进行文件操作&#xff0c;这些类封装了底层的文件操作&#xff0c;提供了面向对象和类型安全的接口&#xff0c;使得文件读写更加便捷和高效。主要的文件流类包括&#xff1a; std::ifstream&#xff1a;用于从文件中读取数据。 st…

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正&#xff01; 想象一下&#xff0c;你经营着一家咖啡店&#xff0c;顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入&#xff0c;向后厨发送指令&#xff0c;比如“为顾客A准备一杯拿铁”。 然而&#xff0c;如果有个不怀好意的顾客…

解决Mawell1.29.2启动SQLException: You have an error in your SQL syntax问题

问题背景 此前在openEuler24.03 LTS环境下的Hive使用了MySQL8.4.2&#xff0c;在此环境下再安装并启动Maxwell1.29.2时出现如下问题 [ERROR] Maxwell: SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f…

Oracle APEX IR报表列宽调整

目录 1. 问题&#xff1a;如何调整Oracle APEX IR报表列宽 2. 解决办法 1. 问题&#xff1a;如何调整Oracle APEX IR报表列宽 1-1. 防止因标题长而数据短&#xff0c;导致标题行的文字都立起来了&#xff0c;不好看。 1-2. 防止因数据太长而且中间还没有空格&#xff0c;把列…

pytorch 14.3 Batch Normalization综合调参实践

文章目录 一、Batch Normalization与Batch_size综合调参二、复杂模型上的Batch_normalization表现1、BN对复杂模型&#xff08;sigmoid&#xff09;的影响2、模型复杂度对模型效果的影响3、BN对复杂模型&#xff08;tanh&#xff09;的影响 三、包含BN层的神经网络的学习率优化…

Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用

Model.eval() 与 torch.no_grad(): PyTorch 中的区别与应用 在 PyTorch 深度学习框架中&#xff0c;model.eval() 和 torch.no_grad() 是两个在模型推理&#xff08;inference&#xff09;阶段经常用到的函数&#xff0c;它们各自有着独特的功能和应用场景。本文将详细解析这两…

Swagger go中文版本手册

Swaggo(github.com/swaggo/swag)的注解语法是基于 OpenAPI 2.0 (以前称为 Swagger 2.0) 规范的,并添加了一些自己的约定。 主要官方文档: swaggo/swag GitHub 仓库: 这是最权威的来源。 链接: https://github.com/swaggo/swag重点关注: README.md: 包含了基本的安装、使用…

物联网设备远程管理:基于代理IP的安全固件更新通道方案

在物联网设备远程管理中&#xff0c;固件更新的安全性直接关系到设备功能稳定性和系统抗攻击能力。结合代理IP技术与安全协议设计&#xff0c;可构建安全、高效的固件更新通道。 一、代理IP在固件更新中的核心作用 网络层隐匿与路由优化 隐藏更新源服务器&#xff1a;通过代理I…

【C++重载操作符与转换】句柄类与继承

目录 一、句柄类的基本概念 1.1 什么是句柄类 1.2 句柄类的设计动机 1.3 句柄类的基本结构 二、句柄类的实现方式 2.1 基于指针的句柄类 2.2 值语义的句柄类 2.3 引用计数的句柄类 三、句柄类与继承的结合应用 3.1 实现多态容器 3.2 实现插件系统 3.3 实现状态模式…

谷歌曾经的开放重定向漏洞(如今已经修复) -- noogle DefCamp 2024

题目描述: 上周&#xff0c;我决定创建自己的搜索引擎。这有点难&#xff0c;所以我背上了另一个。我也在8000端口上尝试了一些东西。 未发现题目任何交互,但是存在一个加密js const _0x43a57f _0x22f9; (function(_0x3d7d57, _0x426e05) {const _0x16c3fa _0x22f9, _0x3187…

【C#】ToArray的使用

在 C# 中&#xff0c;ToArray 方法通常用于将实现了 IEnumerable<T> 接口的集合&#xff08;如 List<T>&#xff09;转换为数组。这个方法是 LINQ 提供的一个扩展方法&#xff0c;位于 System.Linq 命名空间中。因此&#xff0c;在使用 ToArray 方法之前&#xff0…

资产管理平台—chemex

1、简介 Chemex CMDB&#xff08;Configuration Management Database&#xff09;是一个基于现代微服务架构的资产管理与自动化平台&#xff0c;专为 IT 基础设施与业务资产管理而设计。其核心目标是解决大规模系统运维中资产信息混乱、配置分散、数据不一致等问题&#xff0c…

【AI】mcp server是什么玩意儿

文章目录 背景mcp server的必要性mcp server的基本概念mcp server的架构与核心组件总结 背景 劈里啪啦的整了一堆概念&#xff0c;对mcp server还是只停留在知道个词的地步。 虽然目前大模型的对话生成能力很强&#xff0c;但是大模型&#xff08;如deepseek&#xff09;并不能…

c# 数据结构 树篇 入门树与二叉树的一切

事先声明,本文不适合对数据结构完全不懂的小白 请至少学会链表再阅读 c# 数据结构 链表篇 有关单链表的一切_c# 链表-CSDN博客 数据结构理论先导:《数据结构&#xff08;C 语言描述&#xff09;》也许是全站最良心最通俗易懂最好看的数据结构课&#xff08;最迟每周五更新~~&am…