写一个代码EventManager:
EventManager 是一种更通用的事件管理系统,通常用于在整个项目中管理和触发事件。
EventManager 可以包含许多不同类型的事件,可以在项目的多个脚本之间共享。
EventManager 的主要目的是将事件的定义和处理集中在一个地方,以便更容易地跟踪和管理事件。
我们要的需求,B脚本发送一个事件调用A脚本,并且可以传参(不需要你可以删除参数),并且A和B解耦,那就需要用到中介者模式。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventManager : MonoBehaviour
{
//单例
public static EventManager Instance { get; private set; }
//事件
public event Action<int> OnTaskEvent;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
}
public void TriggerEvent(int parameter)
{
//所有订阅了OnTaskEvent事件的方法都会被调用,并接收到这个参数。如下
OnTaskEvent?.Invoke(parameter);
}
}
public class ScriptA : MonoBehaviour
{
private void OnEnable()
{
EventManager.Instance.OnTaskEvent += HandleTaskEvent;
}
private void OnDisable()
{
EventManager.Instance.OnTaskEvent -= HandleTaskEvent;
}
private void HandleTaskEvent(string parameter)
{
// 处理事件,例如更新 UI 或执行任务逻辑
Debug.Log("A 脚本处理任务事件: " + parameter);
}
}
public class ScriptB : MonoBehaviour
{
public void SomeMethod()
{
// 在适当的时机触发事件,例如任务完成或状态更改
string parameter = "任务完成";
EventManager.Instance.TriggerTaskEvent(parameter);
}
}