diff --git a/Assets/Boot.unity b/Assets/Boot.unity index 7bc0ea9..f1e555e 100644 --- a/Assets/Boot.unity +++ b/Assets/Boot.unity @@ -655,7 +655,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: MainCamera: {fileID: 330585545} - PlayMode: 2 + PlayMode: 0 --- !u!4 &1019312449 Transform: m_ObjectHideFlags: 0 @@ -881,6 +881,14 @@ PrefabInstance: propertyPath: m_Name value: IngameDebugConsole objectReference: {fileID: 0} + - target: {fileID: 22331464, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 124489897} + - target: {fileID: 22331464, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3} + propertyPath: m_RenderMode + value: 1 + objectReference: {fileID: 0} - target: {fileID: 22400762, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3} propertyPath: m_AnchoredPosition.y value: 0.0000076293945 diff --git a/Assets/GameFramework/Runtime/MainUICanvas.cs b/Assets/GameFramework/Runtime/MainUICanvas.cs index 979dbf2..cdf493b 100644 --- a/Assets/GameFramework/Runtime/MainUICanvas.cs +++ b/Assets/GameFramework/Runtime/MainUICanvas.cs @@ -3,9 +3,9 @@ using UnityEngine; public class MainUICanvas : SingletonMono { public GameObject InitBg; - public Transform Top; - public Transform Medium; - public Transform Bottom; + public RectTransform Top; + public RectTransform Medium; + public RectTransform Bottom; public Camera UICamera; private void Awake() { diff --git a/Assets/GameRes/Main/UI/FullTest.prefab b/Assets/GameRes/Main/UI/FullTest.prefab new file mode 100644 index 0000000..b8ac307 --- /dev/null +++ b/Assets/GameRes/Main/UI/FullTest.prefab @@ -0,0 +1,113 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3149112341066480121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8374724181955065529} + - component: {fileID: 103223121363424772} + - component: {fileID: 8793378026247639231} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8374724181955065529 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3149112341066480121} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2569990057225954958} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &103223121363424772 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3149112341066480121} + m_CullTransparentMesh: 1 +--- !u!114 &8793378026247639231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3149112341066480121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.9355135, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6364109098557891170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2569990057225954958} + m_Layer: 5 + m_Name: FullTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2569990057225954958 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6364109098557891170} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8374724181955065529} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GameRes/Main/UI/FullTest.prefab.meta b/Assets/GameRes/Main/UI/FullTest.prefab.meta new file mode 100644 index 0000000..4375b9b --- /dev/null +++ b/Assets/GameRes/Main/UI/FullTest.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ebc30e082f9e5fa48bd59697dd386346 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/Main/GameStart.cs b/Assets/GameScripts/Main/GameStart.cs index ad7f2e4..1ad28fe 100644 --- a/Assets/GameScripts/Main/GameStart.cs +++ b/Assets/GameScripts/Main/GameStart.cs @@ -13,8 +13,11 @@ public class GameStart : MonoBehaviour } async UniTask LoadSimpleR3Test() { - AssetHandle handle = YooAssets.LoadAssetAsync("SimpleR3Test"); - await handle; - GameObject.Instantiate(handle.AssetObject, MainUICanvas.Inst.Medium); + 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); } } diff --git a/Assets/GameScripts/Main/UI.meta b/Assets/GameScripts/Main/UI.meta new file mode 100644 index 0000000..b5dd629 --- /dev/null +++ b/Assets/GameScripts/Main/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43d2406acc71f48448efde6aa488d064 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameScripts/Main/SimpleR3Test.cs b/Assets/GameScripts/Main/UI/SimpleR3Test.cs similarity index 76% rename from Assets/GameScripts/Main/SimpleR3Test.cs rename to Assets/GameScripts/Main/UI/SimpleR3Test.cs index 35e8c3f..eebe8d2 100644 --- a/Assets/GameScripts/Main/SimpleR3Test.cs +++ b/Assets/GameScripts/Main/UI/SimpleR3Test.cs @@ -2,16 +2,16 @@ using R3; using UnityEngine; using UnityEngine.UI; -public class SimpleR3Test : MonoBehaviour +public class SimpleR3Test : UIBase { public SerializableReactiveProperty value = new(0); public InputField inputField; public Scrollbar scrollbar; - - void Start() + public override void OnCreate() { + base.OnCreate(); value.BindToScrollbar(scrollbar).AddTo(this); value.BindToInputField(inputField).AddTo(this); } diff --git a/Assets/GameScripts/Main/SimpleR3Test.cs.meta b/Assets/GameScripts/Main/UI/SimpleR3Test.cs.meta similarity index 100% rename from Assets/GameScripts/Main/SimpleR3Test.cs.meta rename to Assets/GameScripts/Main/UI/SimpleR3Test.cs.meta diff --git a/Assets/GameScripts/Main/UI/UIBase.cs b/Assets/GameScripts/Main/UI/UIBase.cs new file mode 100644 index 0000000..a54f2e7 --- /dev/null +++ b/Assets/GameScripts/Main/UI/UIBase.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +public class UIBase : MonoBehaviour +{ + public RectTransform rectTransform; + public UIBase parent; + public virtual void OnCreate() + { + rectTransform = GetComponent(); + } + public virtual void OnShow() { } + public virtual void OnHide() { } + + public void SetFull() + { + rectTransform.anchorMin = Vector2.zero; + rectTransform.anchorMax = Vector2.one; + rectTransform.offsetMin = Vector2.zero; + rectTransform.offsetMax = Vector2.zero; + rectTransform.sizeDelta = Vector2.zero; + } + + public void SetParent(RectTransform ui, bool isFull = false) + { + rectTransform.SetParent(ui); + rectTransform.localScale = Vector3.one; + rectTransform.localPosition = Vector3.zero; + rectTransform.localRotation = Quaternion.identity; + if (isFull) + SetFull(); + } +} diff --git a/Assets/GameScripts/Main/UI/UIBase.cs.meta b/Assets/GameScripts/Main/UI/UIBase.cs.meta new file mode 100644 index 0000000..42c4800 --- /dev/null +++ b/Assets/GameScripts/Main/UI/UIBase.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 11bbb38035ff49641be77ec96d27de0c \ No newline at end of file diff --git a/Assets/GameScripts/Main/UI/UIManager.cs b/Assets/GameScripts/Main/UI/UIManager.cs new file mode 100644 index 0000000..c8024b4 --- /dev/null +++ b/Assets/GameScripts/Main/UI/UIManager.cs @@ -0,0 +1,137 @@ +using Cysharp.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using YooAsset; + +public class UIManager : Singleton +{ + public Dictionary openedUIs = new Dictionary(); + Stack uiStack = new Stack(); + + public T ShowUI(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase + { + T ui = null; + string uiType = typeof(T).Name; + if (!openedUIs.ContainsKey(uiName)) + { + GameObject uiPrefab = LoadUI(uiType); + ui = CreateUI(uiPrefab, uiName, parent, isFull); + openedUIs[uiName] = ui; + uiStack.Push(ui); + } + else + { + ui = openedUIs[uiName] as T; + } + Debug.Log($"ShowUI====>name:{uiName} type:{typeof(T).Name}"); + ui.OnShow(); + return ui; + } + public async UniTask ShowUIAsync(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase + { + T ui = null; + string uiType = typeof(T).Name; + if (!openedUIs.ContainsKey(uiName)) + { + GameObject uiPrefab = await LoadUIAsync(uiType); + ui = CreateUI(uiPrefab, uiName, parent, isFull); + openedUIs[uiName] = ui; + uiStack.Push(ui); + } + else + { + ui = openedUIs[uiName] as T; + } + Debug.Log($"ShowUIAsync====>name:{uiName} type:{typeof(T).Name}"); + ui.OnShow(); + return ui; + } + T CreateUI(GameObject uiPrefab, string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase + { + GameObject uiObj = GameObject.Instantiate(uiPrefab); + uiObj.name = uiName; + T ui = uiObj.GetComponent(); + ui.OnCreate(); + if (parent) ui.SetParent(parent, isFull); + Debug.Log($"CreateUI====>name:{uiName} type:{typeof(T).Name}"); + return ui; + } + GameObject LoadUI(string uiType) + { + AssetHandle uiHandle = YooAssets.LoadAssetSync(uiType); + return (GameObject)uiHandle.AssetObject; + } + async UniTask LoadUIAsync(string uiType) + { + AssetHandle uiHandle = YooAssets.LoadAssetAsync(uiType); + await uiHandle.ToUniTask(); + return (GameObject)uiHandle.AssetObject; + } + + #region 用于测试没挂载UIBase的 + public Dictionary testOpenedUIs = new Dictionary(); + Stack testUIStack = new Stack(); + public GameObject TestShowUI(string path, string uiName, RectTransform parent = null, bool isFull = false) + { + GameObject ui = null; + if (!testOpenedUIs.ContainsKey(uiName)) + { + GameObject uiPrefab = LoadUI(path); + ui = TestCreateUI(uiPrefab, uiName, parent, isFull); + testOpenedUIs[uiName] = ui; + testUIStack.Push(ui); + } + else + { + ui = testOpenedUIs[uiName]; + } + Debug.Log($"TestShowUI====>name:{uiName}"); + return ui; + } + public async UniTask< GameObject> TestShowUIAsync(string path, string uiName, RectTransform parent = null, bool isFull = false) + { + GameObject ui = null; + if (!testOpenedUIs.ContainsKey(uiName)) + { + GameObject uiPrefab = await LoadUIAsync(path); + ui = TestCreateUI(uiPrefab, uiName, parent, isFull); + testOpenedUIs[uiName] = ui; + testUIStack.Push(ui); + } + else + { + ui = testOpenedUIs[uiName]; + } + Debug.Log($"TestShowUI====>name:{uiName}"); + return ui; + } + GameObject TestCreateUI(GameObject uiPrefab, string uiName, RectTransform parent = null, bool isFull = false) + { + GameObject uiObj = GameObject.Instantiate(uiPrefab); + uiObj.name = uiName; + RectTransform ui = uiObj.GetComponent(); + if (parent) TestSetParent(ui, parent, isFull); + Debug.Log($"TestCreateUI====>name:{uiName}"); + return uiObj; + } + void TestSetFull(RectTransform rectTransform) + { + rectTransform.anchorMin = Vector2.zero; + rectTransform.anchorMax = Vector2.one; + rectTransform.offsetMin = Vector2.zero; + rectTransform.offsetMax = Vector2.zero; + rectTransform.sizeDelta = Vector2.zero; + } + + void TestSetParent(RectTransform ui, RectTransform parent, bool isFull = false) + { + ui.SetParent(parent); + ui.localScale = Vector3.one; + ui.localPosition = Vector3.zero; + ui.localRotation = Quaternion.identity; + if (isFull) + TestSetFull(ui); + } + #endregion +} diff --git a/Assets/GameScripts/Main/UI/UIManager.cs.meta b/Assets/GameScripts/Main/UI/UIManager.cs.meta new file mode 100644 index 0000000..91e8bb2 --- /dev/null +++ b/Assets/GameScripts/Main/UI/UIManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a59f1c308a49e0742878b0c58f906538 \ No newline at end of file diff --git a/Assets/GameScripts/Main/UnityUIBindings.cs b/Assets/GameScripts/Main/UI/UnityUIBindings.cs similarity index 100% rename from Assets/GameScripts/Main/UnityUIBindings.cs rename to Assets/GameScripts/Main/UI/UnityUIBindings.cs diff --git a/Assets/GameScripts/Main/UnityUIBindings.cs.meta b/Assets/GameScripts/Main/UI/UnityUIBindings.cs.meta similarity index 100% rename from Assets/GameScripts/Main/UnityUIBindings.cs.meta rename to Assets/GameScripts/Main/UI/UnityUIBindings.cs.meta diff --git a/Assets/NuGet.config.meta b/Assets/NuGet.config.meta index 8caa3b0..ab1030e 100644 --- a/Assets/NuGet.config.meta +++ b/Assets/NuGet.config.meta @@ -1,2 +1,28 @@ fileFormatVersion: 2 -guid: 358f9376bf3004b4dadf89a4e4518d83 \ No newline at end of file +guid: 358f9376bf3004b4dadf89a4e4518d83 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: