同步
This commit is contained in:
@@ -104,6 +104,46 @@ namespace Ichni.RhythmGame
|
|||||||
GameManager.Instance.noteManager.RegisterNote(this, exactJudgeTime - beyondTime - 0.5f);
|
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
|
#endregion
|
||||||
|
|
||||||
#region [轮询更新] Main Update & Visual Calculate
|
#region [轮询更新] Main Update & Visual Calculate
|
||||||
|
|||||||
@@ -47,6 +47,19 @@ namespace Ichni.RhythmGame
|
|||||||
base.SetDefaultSubmodules();
|
base.SetDefaultSubmodules();
|
||||||
effectSubmodule = new EffectSubmodule(this, EffectSubmodule.EffectSubmodulePreset.Note);
|
effectSubmodule = new EffectSubmodule(this, EffectSubmodule.EffectSubmodulePreset.Note);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// NoteVisual 初始化完毕后,通知父 Note 重新缓存效果列表。
|
||||||
|
/// </summary>
|
||||||
|
public override void AfterInitialize()
|
||||||
|
{
|
||||||
|
base.AfterInitialize();
|
||||||
|
|
||||||
|
if (note != null)
|
||||||
|
{
|
||||||
|
note.RefreshNoteVisualCaches();
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region [行为重写] Behavior Overrides
|
#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
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user