using System; using UnityEngine; namespace BaseGames.Core.Events { /// /// 泛型 SO 事件频道基类。T 为负载类型。 /// public abstract class BaseEventChannelSO : ScriptableObject { [Multiline] public string description; public event Action OnEventRaised; public void Raise(T value) { #if UNITY_EDITOR EventBusMonitor.Record(name, value?.ToString() ?? "null", OnEventRaised?.GetInvocationList().Length ?? 0); #endif OnEventRaised?.Invoke(value); } /// /// 订阅并返回可 Dispose 的订阅句柄,配合 CompositeDisposable 使用。 /// public EventSubscription Subscribe(Action callback) { OnEventRaised += callback; return new EventSubscription(() => OnEventRaised -= callback); } } /// /// 无负载事件频道基类。 /// public abstract class VoidBaseEventChannelSO : ScriptableObject { [Multiline] public string description; public event Action OnEventRaised; public void Raise() { #if UNITY_EDITOR EventBusMonitor.Record(name, "", OnEventRaised?.GetInvocationList().Length ?? 0); #endif OnEventRaised?.Invoke(); } /// /// 订阅并返回可 Dispose 的订阅句柄。 /// public EventSubscription Subscribe(Action callback) { OnEventRaised += callback; return new EventSubscription(() => OnEventRaised -= callback); } } }