diff --git a/Assets/GameScripts/Main/GameStart.cs b/Assets/GameScripts/Main/GameStart.cs index 1ad28fe..3da259e 100644 --- a/Assets/GameScripts/Main/GameStart.cs +++ b/Assets/GameScripts/Main/GameStart.cs @@ -1,5 +1,11 @@ using Cysharp.Threading.Tasks; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.NetworkInformation; +using System.Threading; using UnityEngine; +using UnityEngine.Networking; using YooAsset; public class GameStart : MonoBehaviour @@ -9,15 +15,15 @@ public class GameStart : MonoBehaviour { Debug.Log("GameStart"); GamePreload.Inst.Test("call by GameStart"); - await LoadSimpleR3Test(); + _=FrameSplittingTest(1); + await UIManager.Inst.ShowUIAsync("test1", MainUICanvas.Inst.Medium); } - async UniTask LoadSimpleR3Test() + async UniTask FrameSplittingTest(int delayFrame) { - UIManager.Inst.ShowUI("test1", MainUICanvas.Inst.Medium); - await UIManager.Inst.ShowUIAsync("test2", MainUICanvas.Inst.Medium); - await UIManager.Inst.ShowUIAsync("test2"); - await UIManager.Inst.ShowUIAsync("test3"); - await UIManager.Inst.TestShowUIAsync("FullTest", "test4", MainUICanvas.Inst.Medium,true); - UIManager.Inst.TestShowUI("FullTest","test5", MainUICanvas.Inst.Medium); + for (int i = 0; i < 100; i++) + { + Debug.Log(i); + await UniTask.DelayFrame(delayFrame); + } } -} +} \ No newline at end of file diff --git a/Assets/GameScripts/Main/UI/SimpleR3Test.cs b/Assets/GameScripts/Main/UI/SimpleR3Test.cs index eebe8d2..1677508 100644 --- a/Assets/GameScripts/Main/UI/SimpleR3Test.cs +++ b/Assets/GameScripts/Main/UI/SimpleR3Test.cs @@ -11,7 +11,6 @@ public class SimpleR3Test : UIBase public override void OnCreate() { - base.OnCreate(); value.BindToScrollbar(scrollbar).AddTo(this); value.BindToInputField(inputField).AddTo(this); } diff --git a/Assets/GameScripts/Main/UI/UIBase.cs b/Assets/GameScripts/Main/UI/UIBase.cs index a54f2e7..895d6a2 100644 --- a/Assets/GameScripts/Main/UI/UIBase.cs +++ b/Assets/GameScripts/Main/UI/UIBase.cs @@ -2,12 +2,18 @@ using UnityEngine; public class UIBase : MonoBehaviour { - public RectTransform rectTransform; - public UIBase parent; - public virtual void OnCreate() + public RectTransform rectTransform { - rectTransform = GetComponent(); + get + { + if (_rectTransform == null) + _rectTransform = GetComponent(); + return _rectTransform; + } } + RectTransform _rectTransform; + public UIBase parent; + public virtual void OnCreate() { } public virtual void OnShow() { } public virtual void OnHide() { } diff --git a/Assets/GameScripts/Main/UI/UIManager.cs b/Assets/GameScripts/Main/UI/UIManager.cs index c8024b4..24ba8c8 100644 --- a/Assets/GameScripts/Main/UI/UIManager.cs +++ b/Assets/GameScripts/Main/UI/UIManager.cs @@ -6,7 +6,8 @@ using YooAsset; public class UIManager : Singleton { - public Dictionary openedUIs = new Dictionary(); + Dictionary openedUIs = new Dictionary(); + Dictionary assetHandles = new Dictionary(); Stack uiStack = new Stack(); public T ShowUI(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase @@ -59,18 +60,36 @@ public class UIManager : Singleton } GameObject LoadUI(string uiType) { - AssetHandle uiHandle = YooAssets.LoadAssetSync(uiType); - return (GameObject)uiHandle.AssetObject; + if (!assetHandles.ContainsKey(uiType)) + { + AssetHandle uiHandle = YooAssets.LoadAssetSync(uiType); + assetHandles.Add(uiType, uiHandle); + return (GameObject)uiHandle.AssetObject; + } + else + { + AssetHandle uiHandle = assetHandles[uiType]; + return (GameObject)uiHandle.AssetObject; + } } async UniTask LoadUIAsync(string uiType) { - AssetHandle uiHandle = YooAssets.LoadAssetAsync(uiType); - await uiHandle.ToUniTask(); - return (GameObject)uiHandle.AssetObject; + if (!assetHandles.ContainsKey(uiType)) + { + AssetHandle uiHandle = YooAssets.LoadAssetAsync(uiType); + await uiHandle.ToUniTask(); + assetHandles.Add(uiType, uiHandle); + return (GameObject)uiHandle.AssetObject; + } + else + { + AssetHandle uiHandle = assetHandles[uiType]; + return (GameObject)uiHandle.AssetObject; + } } #region 用于测试没挂载UIBase的 - public Dictionary testOpenedUIs = new Dictionary(); + Dictionary testOpenedUIs = new Dictionary(); Stack testUIStack = new Stack(); public GameObject TestShowUI(string path, string uiName, RectTransform parent = null, bool isFull = false) { diff --git a/Assets/GameScripts/Main/UI/UnityUIBindings.cs b/Assets/GameScripts/Main/UI/UnityUIBindings.cs index 80580ab..9c80762 100644 --- a/Assets/GameScripts/Main/UI/UnityUIBindings.cs +++ b/Assets/GameScripts/Main/UI/UnityUIBindings.cs @@ -12,7 +12,7 @@ namespace R3 { return source.Subscribe(scrollbar, static (x, s) => s.value = x); } - public static IDisposable SubscribeToText(this ReactiveProperty source, InputField inputField) + public static IDisposable SubscribeToInputField(this ReactiveProperty source, InputField inputField) { return source.Subscribe(inputField, static (x, t) => t.text = x.ToString()); } @@ -33,7 +33,7 @@ namespace R3 var disposable = new CompositeDisposable(); // 值 → InputField - source.SubscribeToText(inputField).AddTo(disposable); + source.SubscribeToInputField(inputField).AddTo(disposable); // InputField → 值 inputField.OnValueChangedAsObservable().Subscribe(_value =>