【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.pswp.cn/web/80237.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80237.shtml
英文地址,請注明出處:http://en.pswp.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…