UI 系统
This commit is contained in:
@@ -145,10 +145,17 @@ namespace BaseGames.Editor
|
||||
GameObject settingsRootGo = GetOrCreateChild(uiRootGo.transform, "SettingsRoot").gameObject;
|
||||
GameObject mapRootGo = GetOrCreateChild(uiRootGo.transform, "MapRoot").gameObject;
|
||||
GameObject shopRootGo = GetOrCreateChild(uiRootGo.transform, "ShopRoot").gameObject;
|
||||
// 形态技能一览 / 能力解锁总览(实例化预制件,注册为 PanelId.FormSkills / Abilities,供暂停菜单打开)
|
||||
GameObject formSkillRootGo = EnsureUIPanelInstance(uiRootGo.transform, "FormSkillRoot",
|
||||
"Assets/_Game/Prefabs/UI/UI_FormSkillPanel.prefab", report);
|
||||
GameObject abilityRootGo = EnsureUIPanelInstance(uiRootGo.transform, "AbilityRoot",
|
||||
"Assets/_Game/Prefabs/UI/UI_AbilityOverviewPanel.prefab", report);
|
||||
pauseRootGo.SetActive(false);
|
||||
settingsRootGo.SetActive(false);
|
||||
mapRootGo.SetActive(false);
|
||||
shopRootGo.SetActive(false);
|
||||
formSkillRootGo.SetActive(false);
|
||||
abilityRootGo.SetActive(false);
|
||||
|
||||
GameObject deathCanvasGo = GetOrCreateCanvas(uiRootGo.transform, "DeathScreen Canvas", 10);
|
||||
GameObject deathRootGo = GetOrCreateChild(deathCanvasGo.transform, "DeathScreenRoot").gameObject;
|
||||
@@ -268,7 +275,7 @@ namespace BaseGames.Editor
|
||||
// UIManager uses _panels (PanelRegistration[]) — NOT individual _pauseMenuRoot/_settingsRoot etc.
|
||||
var so = new SerializedObject(uiManager);
|
||||
var panelsProp = so.FindProperty("_panels");
|
||||
panelsProp.arraySize = 4;
|
||||
panelsProp.arraySize = 6;
|
||||
var p0 = panelsProp.GetArrayElementAtIndex(0);
|
||||
p0.FindPropertyRelative("id").intValue = (int)PanelId.Pause;
|
||||
p0.FindPropertyRelative("root").objectReferenceValue = pauseRootGo;
|
||||
@@ -281,6 +288,12 @@ namespace BaseGames.Editor
|
||||
var p3 = panelsProp.GetArrayElementAtIndex(3);
|
||||
p3.FindPropertyRelative("id").intValue = (int)PanelId.Shop;
|
||||
p3.FindPropertyRelative("root").objectReferenceValue = shopRootGo;
|
||||
var p4 = panelsProp.GetArrayElementAtIndex(4);
|
||||
p4.FindPropertyRelative("id").intValue = (int)PanelId.FormSkills;
|
||||
p4.FindPropertyRelative("root").objectReferenceValue = formSkillRootGo;
|
||||
var p5 = panelsProp.GetArrayElementAtIndex(5);
|
||||
p5.FindPropertyRelative("id").intValue = (int)PanelId.Abilities;
|
||||
p5.FindPropertyRelative("root").objectReferenceValue = abilityRootGo;
|
||||
so.ApplyModifiedPropertiesWithoutUndo();
|
||||
}
|
||||
AssignAsset(uiManager, "_onGameStateChanged", report, true, "EVT_GameStateChanged", "EVT_GameState");
|
||||
@@ -1435,6 +1448,29 @@ namespace BaseGames.Editor
|
||||
/// 历史的非预制件裸物体会被替换为预制件实例;绑定 <c>_config</c> 与三个加载事件频道。
|
||||
/// 预制件缺失时仅在 report 提示(先跑「生成加载界面」菜单),不报错。
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// 通用:实例化 / 复用一个自足 UI 面板预制件为指定命名根(自身已绑好引用,不再额外绑定)。
|
||||
/// 历史裸物体会被替换为预制件实例。预制件缺失时仅 report 提示,返回占位根(不报错)。
|
||||
/// </summary>
|
||||
private static GameObject EnsureUIPanelInstance(Transform uiParent, string instName, string prefabPath, List<string> report)
|
||||
{
|
||||
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
||||
Transform existing = uiParent.Find(instName);
|
||||
if (prefab == null)
|
||||
{
|
||||
report.Add($"缺少预制件 {prefabPath}(请先运行对应「BaseGames/UI/控件库」生成菜单)。");
|
||||
return existing != null ? existing.gameObject : GetOrCreateChild(uiParent, instName).gameObject;
|
||||
}
|
||||
if (existing != null && PrefabUtility.GetCorrespondingObjectFromSource(existing.gameObject) != null)
|
||||
return existing.gameObject;
|
||||
if (existing != null) Undo.DestroyObjectImmediate(existing.gameObject);
|
||||
var go = (GameObject)PrefabUtility.InstantiatePrefab(prefab, uiParent);
|
||||
go.name = instName;
|
||||
Undo.RegisterCreatedObjectUndo(go, $"Instantiate {instName}");
|
||||
report.Add($"{instName}:由 {System.IO.Path.GetFileName(prefabPath)} 实例化。");
|
||||
return go;
|
||||
}
|
||||
|
||||
private static void EnsureLoadingScreenInstance(Transform uiParent, List<string> report)
|
||||
{
|
||||
const string instName = "Canvas_Loading";
|
||||
|
||||
Reference in New Issue
Block a user