当前位置: 首页 > news >正文

【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);
}

相关文章:

  • 单元化架构
  • <PLC><视觉><机器人>基于海康威视视觉检测和UR机械臂,如何实现N点标定?
  • IEEE 列表会议第五届机器人、自动化与智能控制国际会议
  • 软件架构风格系列(4):事件驱动架构
  • Python打卡 DAY 27
  • 大模型在数据分析领域的研究综述
  • CSS:颜色的三种表示方式
  • 学习以任务为中心的潜动作,随地采取行动
  • Servlet 深度解析:生命周期、请求响应与状态管理
  • PCIe数据采集系统详解
  • JAVA:线程调度器与时间分片的技术指南
  • 数据通信原理 光纤通信 期末速成
  • Android minSdk从21升级24后SO库异常
  • linux防火墙
  • 单序列双指针---初阶篇
  • 原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)
  • 文件上传Ⅲ
  • css:倒影倾斜效果
  • OpenAI与微软洽谈新融资及IPO,Instagram因TikTok流失四成用户
  • TRTC实时对话式AI解决方案,助力人机语音交互极致体验
  • 以军称已开始在加沙的新一轮大规模攻势
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来
  • 巴基斯坦与印度停火延长至18日
  • 商务部:今年前3月自贸试验区进出口总额达2万亿元
  • 苏轼“胡为适南海”?