This commit is contained in:
SoulliesOfficial
2026-06-12 06:52:57 -04:00
parent 021e76efe7
commit 3e2d78524c
2 changed files with 65 additions and 0 deletions

View File

@@ -104,6 +104,46 @@ namespace Ichni.RhythmGame
GameManager.Instance.noteManager.RegisterNote(this, exactJudgeTime - beyondTime - 0.5f);
}
}
/// <summary>
/// 当 NoteVisual 被动态挂载或替换后,重新缓存效果列表并刷新 NoteManager 注册。
/// </summary>
public void RefreshNoteVisualCaches()
{
generateEffects = GetEffectListSafe("Generate");
generalJudgeEffects = GetEffectListSafe("GeneralJudge");
perfectEffects = GetEffectListSafe("Perfect");
goodEffects = GetEffectListSafe("Good");
badEffects = GetEffectListSafe("Bad");
missEffects = GetEffectListSafe("Miss");
afterJudgeEffects = GetEffectListSafe("AfterJudge");
float beyondTime = 0f;
if (generateEffects != null)
{
for (int i = 0; i < generateEffects.Count; i++)
{
EffectBase effectBase = generateEffects[i];
if (effectBase is NoteGenerateEffect ge)
{
ge.nowEffectState = EffectBase.EffectState.Before;
ge.Recover();
beyondTime = Mathf.Max(beyondTime, ge.generateTime);
}
else
{
effectBase.nowEffectState = EffectBase.EffectState.Before;
effectBase.Recover();
}
}
}
if (exactJudgeTime - beyondTime - 0.5f > -GameManager.Instance.songInformation.delay)
{
gameObject.SetActive(false);
GameManager.Instance.noteManager.RegisterNote(this, exactJudgeTime - beyondTime - 0.5f);
}
}
#endregion
#region [] Main Update & Visual Calculate

View File

@@ -47,6 +47,19 @@ namespace Ichni.RhythmGame
base.SetDefaultSubmodules();
effectSubmodule = new EffectSubmodule(this, EffectSubmodule.EffectSubmodulePreset.Note);
}
/// <summary>
/// NoteVisual 初始化完毕后,通知父 Note 重新缓存效果列表。
/// </summary>
public override void AfterInitialize()
{
base.AfterInitialize();
if (note != null)
{
note.RefreshNoteVisualCaches();
}
}
#endregion
#region [] Behavior Overrides
@@ -59,6 +72,18 @@ namespace Ichni.RhythmGame
{
}
public override void OnDelete()
{
base.OnDelete();
// 清除父 Note 对已删除 NoteVisual 的引用,防止悬空引用和 NullReferenceException
if (note != null)
{
note.noteVisual = null;
note.RefreshNoteVisualCaches();
}
}
#endregion
}