From 58d1f54e0dc5a9e1f4a3624e5eb7159146185a5e Mon Sep 17 00:00:00 2001 From: ksh999000 <740612340@qq.com> Date: Sat, 4 Jul 2026 11:00:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=BB=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unity/Assets/Editor/UIBuilder.cs | 132 +- .../shaders/IndianOcean_DarknessOverlay.mat | 2 +- unity/Assets/Scenes/MainMenu.unity | 1363 ++++++++--------- unity/Assets/UI/Art.meta | 8 + unity/Assets/UI/Art/Common.meta | 8 + unity/Assets/UI/Art/HUD.meta | 8 + unity/Assets/UI/Art/MainMenu.meta | 8 + unity/Assets/UI/Art/MainMenu/bg.jpg | Bin 0 -> 175113 bytes unity/Assets/UI/Art/MainMenu/bg.jpg.meta | 175 +++ .../Assets/UI/Art/MainMenu/juqinghuifang.png | Bin 0 -> 14971 bytes .../UI/Art/MainMenu/juqinghuifang.png.meta | 175 +++ unity/Assets/UI/Art/MainMenu/kaishiyouxi.png | Bin 0 -> 13792 bytes .../UI/Art/MainMenu/kaishiyouxi.png.meta | 175 +++ unity/Assets/UI/Art/MainMenu/title.png | Bin 0 -> 19592 bytes unity/Assets/UI/Art/MainMenu/title.png.meta | 175 +++ .../Assets/UI/Art/MainMenu/zhizuorenyuan.png | Bin 0 -> 12713 bytes .../UI/Art/MainMenu/zhizuorenyuan.png.meta | 175 +++ unity/Assets/UI/Art/ResultScreen.meta | 8 + unity/Assets/UI/MainMenuUIController.cs | 25 +- unity/UserSettings/EditorUserSettings.asset | 4 +- 20 files changed, 1696 insertions(+), 745 deletions(-) create mode 100644 unity/Assets/UI/Art.meta create mode 100644 unity/Assets/UI/Art/Common.meta create mode 100644 unity/Assets/UI/Art/HUD.meta create mode 100644 unity/Assets/UI/Art/MainMenu.meta create mode 100644 unity/Assets/UI/Art/MainMenu/bg.jpg create mode 100644 unity/Assets/UI/Art/MainMenu/bg.jpg.meta create mode 100644 unity/Assets/UI/Art/MainMenu/juqinghuifang.png create mode 100644 unity/Assets/UI/Art/MainMenu/juqinghuifang.png.meta create mode 100644 unity/Assets/UI/Art/MainMenu/kaishiyouxi.png create mode 100644 unity/Assets/UI/Art/MainMenu/kaishiyouxi.png.meta create mode 100644 unity/Assets/UI/Art/MainMenu/title.png create mode 100644 unity/Assets/UI/Art/MainMenu/title.png.meta create mode 100644 unity/Assets/UI/Art/MainMenu/zhizuorenyuan.png create mode 100644 unity/Assets/UI/Art/MainMenu/zhizuorenyuan.png.meta create mode 100644 unity/Assets/UI/Art/ResultScreen.meta diff --git a/unity/Assets/Editor/UIBuilder.cs b/unity/Assets/Editor/UIBuilder.cs index 74299b3..804853a 100644 --- a/unity/Assets/Editor/UIBuilder.cs +++ b/unity/Assets/Editor/UIBuilder.cs @@ -9,14 +9,123 @@ using GameFramework; /// public static class UIBuilder { - [MenuItem("Tools/搭建游戏UI (HUD + ResultScreen + MainMenu标题)")] + [MenuItem("Tools/搭建游戏UI (HUD + ResultScreen + MainMenu)")] public static void BuildAll() { + BuildMainMenu(); BuildHUD(); BuildResultScreen(); Debug.Log("[UIBuilder] 全部 UI 搭建完成!请在 Inspector 中检查引用是否正确。"); } + /// + /// 在 MainMenu 场景中搭建主菜单 Canvas。 + /// + [MenuItem("Tools/搭建 MainMenu Canvas")] + public static void BuildMainMenu() + { + // 加载美术资源 + var bgSprite = AssetDatabase.LoadAssetAtPath("Assets/UI/Art/MainMenu/bg.jpg"); + var titleSprite = AssetDatabase.LoadAssetAtPath("Assets/UI/Art/MainMenu/title.png"); + var startSprite = AssetDatabase.LoadAssetAtPath("Assets/UI/Art/MainMenu/kaishiyouxi.png"); + var replaySprite = AssetDatabase.LoadAssetAtPath("Assets/UI/Art/MainMenu/juqinghuifang.png"); + var creditsSprite = AssetDatabase.LoadAssetAtPath("Assets/UI/Art/MainMenu/zhizuorenyuan.png"); + + // 创建 MainMenu Canvas + var canvasObj = new GameObject("MainMenu_Canvas"); + var canvas = canvasObj.AddComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + canvas.sortingOrder = 0; + var scaler = canvasObj.AddComponent(); + scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; + scaler.referenceResolution = new Vector2(1920, 1080); + canvasObj.AddComponent(); + + // 添加 MainMenuUIController 脚本 + var controller = canvasObj.AddComponent(); + + // ===== 背景图 ===== + if (bgSprite != null) + { + var bgObj = new GameObject("Background"); + bgObj.transform.SetParent(canvasObj.transform, false); + var bgImg = bgObj.AddComponent(); + bgImg.sprite = bgSprite; + bgImg.preserveAspect = false; + var bgRect = bgObj.GetComponent(); + bgRect.anchorMin = Vector2.zero; + bgRect.anchorMax = Vector2.one; + bgRect.sizeDelta = Vector2.zero; + } + + // ===== 标题图片 ===== + if (titleSprite != null) + { + var titleObj = new GameObject("TitleImage"); + titleObj.transform.SetParent(canvasObj.transform, false); + var titleImg = titleObj.AddComponent(); + titleImg.sprite = titleSprite; + titleImg.preserveAspect = true; + var titleRect = titleObj.GetComponent(); + titleRect.anchorMin = new Vector2(0.5f, 0.65f); + titleRect.anchorMax = new Vector2(0.5f, 0.65f); + titleRect.pivot = new Vector2(0.5f, 0.5f); + titleRect.sizeDelta = new Vector2(titleSprite.rect.width * 0.5f, titleSprite.rect.height * 0.5f); + + // 连接 titleImage 引用 + var so = new SerializedObject(controller); + so.FindProperty("titleImage").objectReferenceValue = titleImg; + so.ApplyModifiedProperties(); + } + + // ===== 按钮区域(居中偏下) ===== + var buttonArea = new GameObject("ButtonArea"); + buttonArea.transform.SetParent(canvasObj.transform, false); + var areaRect = buttonArea.AddComponent(); + areaRect.anchorMin = new Vector2(0.5f, 0.15f); + areaRect.anchorMax = new Vector2(0.5f, 0.15f); + areaRect.pivot = new Vector2(0.5f, 0.5f); + var layout = buttonArea.AddComponent(); + layout.spacing = 20; + layout.childForceExpandWidth = false; + layout.childForceExpandHeight = false; + layout.childAlignment = TextAnchor.UpperCenter; + buttonArea.AddComponent().verticalFit = ContentSizeFitter.FitMode.PreferredSize; + + // 开始游戏按钮 + Button startBtn = null; + if (startSprite != null) + { + var btn = CreateImageButton(buttonArea.transform, "StartButton", startSprite); + startBtn = btn.GetComponent