屏幕问题
This commit is contained in:
@@ -79,9 +79,40 @@ namespace AibisDream.Kit
|
||||
|
||||
private readonly List<IActionQueueCallback> _actionQueueCallbacks = new();
|
||||
|
||||
/// <summary>
|
||||
/// 确保存在可用的 <see cref="ActionKitMonoBehaviourEvents"/> 实例。
|
||||
/// 由于 <see cref="Singleton{T}"/> 不会自动创建对象,当场景里没有该组件时,某些 Action 的 Deinit 回收入队会触发 NRE。
|
||||
/// </summary>
|
||||
private static ActionKitMonoBehaviourEvents EnsureInstance()
|
||||
{
|
||||
if (Instance != null) return Instance;
|
||||
if (!Application.isPlaying) return null;
|
||||
|
||||
var go = new GameObject(nameof(ActionKitMonoBehaviourEvents));
|
||||
DontDestroyOnLoad(go);
|
||||
return go.AddComponent<ActionKitMonoBehaviourEvents>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或创建全局事件载体(用于 StartGlobal、回收队列等)。
|
||||
/// </summary>
|
||||
public static ActionKitMonoBehaviourEvents GetOrCreate()
|
||||
{
|
||||
return EnsureInstance();
|
||||
}
|
||||
|
||||
public static void AddCallback(IActionQueueCallback actionQueueCallback)
|
||||
{
|
||||
Instance._actionQueueCallbacks.Add(actionQueueCallback);
|
||||
var inst = EnsureInstance();
|
||||
|
||||
// 在退出/非运行态等情况下无法创建实例时,直接执行回调避免 NRE(回收/清理类回调通常是幂等的)。
|
||||
if (inst == null)
|
||||
{
|
||||
actionQueueCallback?.Call();
|
||||
return;
|
||||
}
|
||||
|
||||
inst._actionQueueCallbacks.Add(actionQueueCallback);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AibisDream.Kit
|
||||
@@ -135,12 +135,12 @@ namespace AibisDream.Kit
|
||||
|
||||
public static IActionController StartGlobal(this IAction self, Action<IActionController> onFinish = null)
|
||||
{
|
||||
return self.Start(ActionKitMonoBehaviourEvents.Instance, onFinish);
|
||||
return self.Start(ActionKitMonoBehaviourEvents.GetOrCreate(), onFinish);
|
||||
}
|
||||
|
||||
public static IActionController StartGlobal(this IAction self, Action onFinish)
|
||||
{
|
||||
return self.Start(ActionKitMonoBehaviourEvents.Instance, onFinish);
|
||||
return self.Start(ActionKitMonoBehaviourEvents.GetOrCreate(), onFinish);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user