111
This commit is contained in:
@@ -1,17 +1,19 @@
|
||||
using R3;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class SimpleR3Test : UIBase
|
||||
namespace Tuan.GameScripts.Main
|
||||
{
|
||||
public SerializableReactiveProperty<float> value = new(0);
|
||||
|
||||
public InputField inputField;
|
||||
public Scrollbar scrollbar;
|
||||
|
||||
public override void OnCreate()
|
||||
public class SimpleR3Test : UIBase
|
||||
{
|
||||
value.BindToScrollbar(scrollbar).AddTo(this);
|
||||
value.BindToInputField(inputField).AddTo(this);
|
||||
public SerializableReactiveProperty<float> value = new(0);
|
||||
|
||||
public InputField inputField;
|
||||
public Scrollbar scrollbar;
|
||||
|
||||
public override void OnCreate()
|
||||
{
|
||||
value.BindToScrollbar(scrollbar).AddTo(this);
|
||||
value.BindToInputField(inputField).AddTo(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,38 +1,41 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class UIBase : MonoBehaviour
|
||||
namespace Tuan.GameScripts.Main
|
||||
{
|
||||
public RectTransform rectTransform
|
||||
public class UIBase : MonoBehaviour
|
||||
{
|
||||
get
|
||||
public RectTransform rectTransform
|
||||
{
|
||||
if (_rectTransform == null)
|
||||
_rectTransform = GetComponent<RectTransform>();
|
||||
return _rectTransform;
|
||||
get
|
||||
{
|
||||
if (_rectTransform == null)
|
||||
_rectTransform = GetComponent<RectTransform>();
|
||||
return _rectTransform;
|
||||
}
|
||||
}
|
||||
RectTransform _rectTransform;
|
||||
public UIBase parent;
|
||||
public virtual void OnCreate() { }
|
||||
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();
|
||||
}
|
||||
}
|
||||
RectTransform _rectTransform;
|
||||
public UIBase parent;
|
||||
public virtual void OnCreate() { }
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,156 +1,160 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Tuan.GameFramework;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
|
||||
public class UIManager : Singleton<UIManager>
|
||||
namespace Tuan.GameScripts.Main
|
||||
{
|
||||
Dictionary<string, UIBase> openedUIs = new Dictionary<string, UIBase>();
|
||||
Dictionary<string, AssetHandle> assetHandles = new Dictionary<string, AssetHandle>();
|
||||
Stack<UIBase> uiStack = new Stack<UIBase>();
|
||||
public class UIManager : Singleton<UIManager>
|
||||
{
|
||||
Dictionary<string, UIBase> openedUIs = new Dictionary<string, UIBase>();
|
||||
Dictionary<string, AssetHandle> assetHandles = new Dictionary<string, AssetHandle>();
|
||||
Stack<UIBase> uiStack = new Stack<UIBase>();
|
||||
|
||||
public T ShowUI<T>(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase
|
||||
{
|
||||
T ui = null;
|
||||
string uiType = typeof(T).Name;
|
||||
if (!openedUIs.ContainsKey(uiName))
|
||||
public T ShowUI<T>(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase
|
||||
{
|
||||
GameObject uiPrefab = LoadUI(uiType);
|
||||
ui = CreateUI<T>(uiPrefab, uiName, parent, isFull);
|
||||
openedUIs[uiName] = ui;
|
||||
uiStack.Push(ui);
|
||||
T ui = null;
|
||||
string uiType = typeof(T).Name;
|
||||
if (!openedUIs.ContainsKey(uiName))
|
||||
{
|
||||
GameObject uiPrefab = LoadUI(uiType);
|
||||
ui = CreateUI<T>(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;
|
||||
}
|
||||
else
|
||||
public async UniTask<T> ShowUIAsync<T>(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase
|
||||
{
|
||||
ui = openedUIs[uiName] as T;
|
||||
T ui = null;
|
||||
string uiType = typeof(T).Name;
|
||||
if (!openedUIs.ContainsKey(uiName))
|
||||
{
|
||||
GameObject uiPrefab = await LoadUIAsync(uiType);
|
||||
ui = CreateUI<T>(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;
|
||||
}
|
||||
Debug.Log($"ShowUI====>name:{uiName} type:{typeof(T).Name}");
|
||||
ui.OnShow();
|
||||
return ui;
|
||||
}
|
||||
public async UniTask<T> ShowUIAsync<T>(string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase
|
||||
{
|
||||
T ui = null;
|
||||
string uiType = typeof(T).Name;
|
||||
if (!openedUIs.ContainsKey(uiName))
|
||||
T CreateUI<T>(GameObject uiPrefab, string uiName, RectTransform parent = null, bool isFull = false) where T : UIBase
|
||||
{
|
||||
GameObject uiPrefab = await LoadUIAsync(uiType);
|
||||
ui = CreateUI<T>(uiPrefab, uiName, parent, isFull);
|
||||
openedUIs[uiName] = ui;
|
||||
uiStack.Push(ui);
|
||||
GameObject uiObj = GameObject.Instantiate(uiPrefab);
|
||||
uiObj.name = uiName;
|
||||
T ui = uiObj.GetComponent<T>();
|
||||
ui.OnCreate();
|
||||
if (parent) ui.SetParent(parent, isFull);
|
||||
Debug.Log($"CreateUI====>name:{uiName} type:{typeof(T).Name}");
|
||||
return ui;
|
||||
}
|
||||
else
|
||||
GameObject LoadUI(string uiType)
|
||||
{
|
||||
ui = openedUIs[uiName] as T;
|
||||
if (!assetHandles.ContainsKey(uiType))
|
||||
{
|
||||
AssetHandle uiHandle = YooAssets.LoadAssetSync<GameObject>(uiType);
|
||||
assetHandles.Add(uiType, uiHandle);
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetHandle uiHandle = assetHandles[uiType];
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
}
|
||||
Debug.Log($"ShowUIAsync====>name:{uiName} type:{typeof(T).Name}");
|
||||
ui.OnShow();
|
||||
return ui;
|
||||
}
|
||||
T CreateUI<T>(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<T>();
|
||||
ui.OnCreate();
|
||||
if (parent) ui.SetParent(parent, isFull);
|
||||
Debug.Log($"CreateUI====>name:{uiName} type:{typeof(T).Name}");
|
||||
return ui;
|
||||
}
|
||||
GameObject LoadUI(string uiType)
|
||||
{
|
||||
if (!assetHandles.ContainsKey(uiType))
|
||||
async UniTask<GameObject> LoadUIAsync(string uiType)
|
||||
{
|
||||
AssetHandle uiHandle = YooAssets.LoadAssetSync<GameObject>(uiType);
|
||||
assetHandles.Add(uiType, uiHandle);
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
if (!assetHandles.ContainsKey(uiType))
|
||||
{
|
||||
AssetHandle uiHandle = YooAssets.LoadAssetAsync<GameObject>(uiType);
|
||||
await uiHandle.ToUniTask();
|
||||
assetHandles.Add(uiType, uiHandle);
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetHandle uiHandle = assetHandles[uiType];
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetHandle uiHandle = assetHandles[uiType];
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
}
|
||||
async UniTask<GameObject> LoadUIAsync(string uiType)
|
||||
{
|
||||
if (!assetHandles.ContainsKey(uiType))
|
||||
{
|
||||
AssetHandle uiHandle = YooAssets.LoadAssetAsync<GameObject>(uiType);
|
||||
await uiHandle.ToUniTask();
|
||||
assetHandles.Add(uiType, uiHandle);
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetHandle uiHandle = assetHandles[uiType];
|
||||
return (GameObject)uiHandle.AssetObject;
|
||||
}
|
||||
}
|
||||
|
||||
#region 用于测试没挂载UIBase的
|
||||
Dictionary<string, GameObject> testOpenedUIs = new Dictionary<string, GameObject>();
|
||||
Stack<GameObject> testUIStack = new Stack<GameObject>();
|
||||
public GameObject TestShowUI(string path, string uiName, RectTransform parent = null, bool isFull = false)
|
||||
{
|
||||
GameObject ui = null;
|
||||
if (!testOpenedUIs.ContainsKey(uiName))
|
||||
#region 用于测试没挂载UIBase的
|
||||
Dictionary<string, GameObject> testOpenedUIs = new Dictionary<string, GameObject>();
|
||||
Stack<GameObject> testUIStack = new Stack<GameObject>();
|
||||
public GameObject TestShowUI(string path, string uiName, RectTransform parent = null, bool isFull = false)
|
||||
{
|
||||
GameObject uiPrefab = LoadUI(path);
|
||||
ui = TestCreateUI(uiPrefab, uiName, parent, isFull);
|
||||
testOpenedUIs[uiName] = ui;
|
||||
testUIStack.Push(ui);
|
||||
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;
|
||||
}
|
||||
else
|
||||
public async UniTask<GameObject> TestShowUIAsync(string path, string uiName, RectTransform parent = null, bool isFull = false)
|
||||
{
|
||||
ui = testOpenedUIs[uiName];
|
||||
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;
|
||||
}
|
||||
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 TestCreateUI(GameObject uiPrefab, string uiName, RectTransform parent = null, bool isFull = false)
|
||||
{
|
||||
GameObject uiPrefab = await LoadUIAsync(path);
|
||||
ui = TestCreateUI(uiPrefab, uiName, parent, isFull);
|
||||
testOpenedUIs[uiName] = ui;
|
||||
testUIStack.Push(ui);
|
||||
GameObject uiObj = GameObject.Instantiate(uiPrefab);
|
||||
uiObj.name = uiName;
|
||||
RectTransform ui = uiObj.GetComponent<RectTransform>();
|
||||
if (parent) TestSetParent(ui, parent, isFull);
|
||||
Debug.Log($"TestCreateUI====>name:{uiName}");
|
||||
return uiObj;
|
||||
}
|
||||
else
|
||||
void TestSetFull(RectTransform rectTransform)
|
||||
{
|
||||
ui = testOpenedUIs[uiName];
|
||||
rectTransform.anchorMin = Vector2.zero;
|
||||
rectTransform.anchorMax = Vector2.one;
|
||||
rectTransform.offsetMin = Vector2.zero;
|
||||
rectTransform.offsetMax = Vector2.zero;
|
||||
rectTransform.sizeDelta = Vector2.zero;
|
||||
}
|
||||
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<RectTransform>();
|
||||
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);
|
||||
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
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace R3
|
||||
namespace Tuan.GameScripts.Main
|
||||
{
|
||||
public static class UnityUIBindings
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user