优化加载Apply

This commit is contained in:
2025-12-02 16:39:29 +08:00
parent 00729395a3
commit 11623b044b
2 changed files with 24 additions and 16 deletions

View File

@@ -221,17 +221,17 @@ namespace Demo.Game
rootGameObject.SetContent(nameof(IsAutoPlay), IsAutoPlay ? 1 : 0);
rootGameObject.SetContent("SongLength", MainAudio.CurrentClip.length);
yield return rootGameObject.ParseScript2Expr(rootObject.LoadAsText());
yield return rootGameObject.ApplyScript();
IEnumerator NDFS(ScriptableObject current)
static void NDFS(ScriptableObject current)
{
foreach (var child in current.Childs)
{
yield return NDFS(child);
NDFS(child);
}
if (current.IsScriptApply == false)
yield return current.ApplyScript();
ConventionUtility.StartCoroutine(current.ApplyScript());
}
yield return NDFS(rootGameObject);
//yield return
NDFS(rootGameObject);
}
}
finally

View File

@@ -12,10 +12,18 @@ namespace Demo.Game
return new GameObject().AddComponent<ParticleJudgement>();
}
[Content, SerializeField] private List<IEnumerator> TaskLoader = new();
[Content, SerializeField] private Dictionary<IInteraction.JudgementLevel, string> AssetBundles = new();
[Content, SerializeField] private Dictionary<IInteraction.JudgementLevel, GameObject> Prefabs = new();
[Content, SerializeField] private Dictionary<IInteraction.JudgementLevel, float> Durations = new();
protected override IEnumerator DoSomethingDuringApplyScript()
{
yield return base.DoSomethingDuringApplyScript();
foreach (var task in TaskLoader)
yield return task;
}
public override IEnumerator UnloadScript()
{
yield return base.UnloadScript();
@@ -31,18 +39,18 @@ namespace Demo.Game
/// <param name="prefab"></param>
/// <param name="duration">判定效果会现形的持续时间</param>
[Convention.RScript.Variable.Attr.Method]
public IEnumerator Load(IInteraction.JudgementLevel levelId, string ab, string prefab, float duration)
public void Load(IInteraction.JudgementLevel levelId, string ab, string prefab, float duration)
{
AssetBundle assetBundle = null;
yield return this.LoadAssetBundle(ab, x => assetBundle = x);
var req = assetBundle.LoadAssetAsync<GameObject>(prefab);
yield return req;
GameObject sub = Instantiate(req.asset as GameObject);
sub.SetActive(false);
Prefabs.Add(levelId, sub);
sub.transform.SetParent(transform);
AssetBundles.Add(levelId, ab);
Durations.Add(levelId, duration);
TaskLoader.Add(this.LoadAssetBundle(ab, assetBundle =>
{
var obj = assetBundle.LoadAsset<GameObject>(prefab);
GameObject sub = Instantiate(obj);
sub.SetActive(false);
Prefabs.Add(levelId, sub);
sub.transform.SetParent(transform);
AssetBundles.Add(levelId, ab);
Durations.Add(levelId, duration);
}));
}
private void CreateParticle(GameObject prefab)