关于事件委托的一个简单原理版EventManager,自己学会解耦合,不再迷惑

写一个代码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);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_42489774/article/details/130078574