perf(editor): 关闭 Domain/Scene Reload 加速进入 Play,并补齐域重载安全
关闭 Domain Reload 后 SO 的 OnEnable/OnDisable 不再于进入/退出 Play 触发、 静态字段不再重置,运行时态会跨 Play 会话残留。补齐重置路径: - 新增 PlayModeResetHook:编辑器内在"进入 Play 前"统一回调各 SO 的重置, 复刻 Domain Reload 曾提供的干净起点;运行时构建为空实现、零开销。 - 静态态用 RuntimeInitializeOnLoadMethod 重置: ServiceLocator._services / SettingsManager.SettingsChanged / EventChainManager.OnChainExecutedInEditor。 - SO 运行时态经 PlayModeResetHook 重置: BaseEventChannelSO(粘性值+订阅委托) / VoidBaseEventChannelSO / WorldStateRegistry(状态字典+变更事件) / InputReaderSO。 - InputReaderSO 增加解绑追踪:跨会话重建前先解绑旧输入回调, 避免 InputActionAsset 存活导致同一输入重复绑定、多次触发。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -79,6 +79,13 @@ namespace BaseGames.EventChain
|
||||
/// EventChainEditorWindow 在 OnEnable 中订阅此事件。
|
||||
/// </summary>
|
||||
public static event Action<string, string> OnChainExecutedInEditor;
|
||||
|
||||
/// <summary>
|
||||
/// 关闭 Domain Reload 后静态事件不再于进入 Play 时清空,此钩子在任何 Awake 之前将其重置为 null,
|
||||
/// 避免上一次运行残留的编辑器窗口订阅者累积。
|
||||
/// </summary>
|
||||
[UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
private static void ResetEditorStaticState() => OnChainExecutedInEditor = null;
|
||||
#endif
|
||||
|
||||
private readonly HashSet<string> _completedChains = new();
|
||||
|
||||
Reference in New Issue
Block a user