From cfeb262f490aa6aebe1cfaf8405c2dbedfee1dd5 Mon Sep 17 00:00:00 2001 From: CroakFang <1605296300@qq.com> Date: Tue, 27 Sep 2022 00:11:12 +0800 Subject: [PATCH] Optimize live loading --- Assets/Scripts/UmaViewerBuilder.cs | 12 ++++++--- Assets/Scripts/UmaViewerMain.cs | 41 +++++++++++++++++++++++++----- Assets/Scripts/UmaViewerUI.cs | 2 +- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Assets/Scripts/UmaViewerBuilder.cs b/Assets/Scripts/UmaViewerBuilder.cs index 0c33d35..4cbdf75 100644 --- a/Assets/Scripts/UmaViewerBuilder.cs +++ b/Assets/Scripts/UmaViewerBuilder.cs @@ -10,6 +10,7 @@ using System.IO; using System.Linq; using UmaMusumeAudio; using UnityEngine; +using static UmaViewerMain; public class UmaViewerBuilder : MonoBehaviour { @@ -344,10 +345,11 @@ public class UmaViewerBuilder : MonoBehaviour RecursiveLoadAsset(entry); } - public void LoadLive(int id) + public void LoadLive(LiveEntry live) { - var asset = UmaViewerMain.Instance.AbList.FirstOrDefault(a => a.Name.EndsWith("cutt_son" + id)); - if (asset == null) return; + var asset = UmaViewerMain.Instance.AbList.FirstOrDefault(a => a.Name.EndsWith("cutt_son" + live.MusicId)); + var BGasset = UmaViewerMain.Instance.AbList.FirstOrDefault(a => a.Name.EndsWith($"pfb_env_live{live.BackGroundId}_controller000")); + if (asset == null|| BGasset == null) return; if (CurrentLiveContainer != null) { @@ -356,6 +358,7 @@ public class UmaViewerBuilder : MonoBehaviour UnloadAllBundle(); CurrentLiveContainer = new GameObject(Path.GetFileName(asset.Name)).AddComponent(); RecursiveLoadAsset(asset); + RecursiveLoadAsset(BGasset); } @@ -818,7 +821,8 @@ public class UmaViewerBuilder : MonoBehaviour private void LoadProp(GameObject go) { - var prop = Instantiate(go, (go.name.Contains("Cutt_son") ? CurrentLiveContainer : CurrentOtherContainer).transform); + var container = (go.name.Contains("Cutt_son") || go.name.Contains("pfb_env_live")) ? CurrentLiveContainer : CurrentOtherContainer; + var prop = Instantiate(go, container.transform); foreach (Renderer r in prop.GetComponentsInChildren()) { foreach (Material m in r.sharedMaterials) diff --git a/Assets/Scripts/UmaViewerMain.cs b/Assets/Scripts/UmaViewerMain.cs index 0a66f69..d0e9e17 100644 --- a/Assets/Scripts/UmaViewerMain.cs +++ b/Assets/Scripts/UmaViewerMain.cs @@ -61,18 +61,32 @@ public class UmaViewerMain : MonoBehaviour yield return UmaViewerDownload.DownloadText("https://www.tracenacademy.com/api/BasicLiveDataInfo", txt => { UmaLiveData = JArray.Parse(txt); - foreach (var item in UmaLiveData) + var asset = AbList.FirstOrDefault(a => a.Name.Equals("livesettings")); + if(asset != null) { - if (!Lives.Where(c => c.MusicId == (int)item["musicId"]).Any()) + string filePath = UmaDatabaseController.GetABPath(asset); + if (File.Exists(filePath)) { - Lives.Add(new LiveEntry() + AssetBundle bundle = AssetBundle.LoadFromFile(filePath); + foreach (var item in UmaLiveData) { - MusicId = (int)item["musicId"], - songName = (string)item["songName"] - }); + if (!Lives.Where(c => c.MusicId == (int)item["musicId"]).Any()) + { + if (bundle.Contains((string)item["musicId"])) + { + TextAsset liveData = bundle.LoadAsset((string)item["musicId"]); + + Lives.Add(new LiveEntry(liveData.text) + { + MusicId = (int)item["musicId"], + songName = (string)item["songName"] + }); + } + } + } + UI.LoadLivePanels(); } } - UI.LoadLivePanels(); }); } @@ -93,5 +107,18 @@ public class UmaViewerMain : MonoBehaviour { public int MusicId; public string songName; + public string BackGroundId; + public List LiveSettings = new List(); + + public LiveEntry(string data) + { + string[] lines = data.Split("\n"[0]); + for (int i = 1; i < lines.Length; i++) + { + LiveSettings.Add(lines[i].Split(',')); + } + BackGroundId = LiveSettings[1][2]; + } } + } diff --git a/Assets/Scripts/UmaViewerUI.cs b/Assets/Scripts/UmaViewerUI.cs index 9377869..60952a4 100644 --- a/Assets/Scripts/UmaViewerUI.cs +++ b/Assets/Scripts/UmaViewerUI.cs @@ -159,7 +159,7 @@ public class UmaViewerUI : MonoBehaviour var imageInstance1 = container.GetComponent(); container.Button.onClick.AddListener(() => { HighlightChildImage(LiveList.content, imageInstance1); - Builder.LoadLive(live.MusicId); + Builder.LoadLive(live); }); var CharaContainer = Instantiate(UmaContainerNoTMPPrefab, LiveSoundList.content).GetComponent();