Kursach_StealthAction/Assets/Scripts/Editor/MainMenuSceneBuilder.cs
2026-10-19 20:14:24 +03:00

580 lines
26 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem.UI;
using UnityEngine.Rendering.Universal;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
public static class MainMenuSceneBuilder
{
private static DefaultControls.Resources uiResources;
private static Font standardFont;
[MenuItem("Tools/Build Main Menu Scene")]
public static string BuildScene()
{
standardFont = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
uiResources = new DefaultControls.Resources
{
standard = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UISprite.psd"),
background = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/Background.psd"),
knob = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/Knob.psd"),
checkmark = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/Checkmark.psd"),
dropdown = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/DropdownArrow.psd"),
mask = AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UIMask.psd")
};
// Создаем новую пустую сцену
Scene newScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
// 1. Камера
GameObject camGo = new GameObject("Main Camera");
Camera cam = camGo.AddComponent<Camera>();
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = new Color(0.035f, 0.05f, 0.075f, 1f);
camGo.AddComponent<UniversalAdditionalCameraData>();
camGo.AddComponent<AudioListener>();
camGo.tag = "MainCamera";
camGo.transform.position = new Vector3(0, 0, -10);
// 2. EventSystem
GameObject eventSysGo = new GameObject("EventSystem");
eventSysGo.AddComponent<EventSystem>();
eventSysGo.AddComponent<InputSystemUIInputModule>();
// 3. Canvas
GameObject canvasGo = new GameObject("Canvas");
Canvas canvas = canvasGo.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.pixelPerfect = true;
CanvasScaler scaler = canvasGo.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920, 1080);
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
scaler.matchWidthOrHeight = 0.5f;
canvasGo.AddComponent<GraphicRaycaster>();
// 4. Менеджер Главного Меню
GameObject managerGo = new GameObject("MainMenuManager");
MainMenuManager manager = managerGo.AddComponent<MainMenuManager>();
// 5. Задний фон Canvas
CreateImage("Background_Dark", canvasGo.transform,
new Color(0.025f, 0.04f, 0.065f, 1f),
Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
// Декоративная подложка с мягким сине-зеленым свечением
CreateImage("Decor_Tint", canvasGo.transform,
new Color(0.00f, 0.45f, 0.60f, 0.06f),
Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
// Декоративная неоновая полоса слева
CreateImage("AccentLine_Left", canvasGo.transform,
new Color(0.00f, 0.85f, 0.95f, 0.70f),
new Vector2(0f, 0f), new Vector2(0f, 1f),
new Vector2(6f, 0f), new Vector2(3f, 0f));
// Копирайт / версия в правом нижнем углу
CreateText("Version_Text", canvasGo.transform,
"Версия 1.0.0 | Лаборатория 'Эхо'",
14, FontStyle.Normal, TextAnchor.MiddleRight,
new Color(0.40f, 0.52f, 0.62f, 0.75f),
new Vector2(0.70f, 0.02f), new Vector2(0.98f, 0.06f), Vector2.zero, Vector2.zero);
// 6. Заголовок игры (Логотип и подзаголовок)
GameObject headerContainer = CreateEmptyRect("Header_Container", canvasGo.transform,
new Vector2(0.08f, 0.64f), new Vector2(0.55f, 0.90f), Vector2.zero, Vector2.zero);
CreateText("Title_Text", headerContainer.transform,
"ECHO // PROTOCOL",
48, FontStyle.Bold, TextAnchor.MiddleLeft,
new Color(0.92f, 0.97f, 1f, 1f),
new Vector2(0f, 0.40f), new Vector2(1f, 1f), Vector2.zero, Vector2.zero);
CreateText("Subtitle_Text", headerContainer.transform,
"ТАКТИЧЕСКИЙ СТЕЛС-ЭКШЕН • СЕКРЕТНЫЙ ОБЪЕКТ",
16, FontStyle.Normal, TextAnchor.MiddleLeft,
new Color(0.00f, 0.85f, 0.95f, 0.85f),
new Vector2(0f, 0.12f), new Vector2(1f, 0.40f), Vector2.zero, Vector2.zero);
CreateImage("Header_Divider", headerContainer.transform,
new Color(0.00f, 0.85f, 0.95f, 0.45f),
new Vector2(0f, 0.02f), new Vector2(0.85f, 0.05f), Vector2.zero, Vector2.zero);
// 7. Основная панель кнопок меню (MainMenuPanel)
GameObject mainMenuPanel = CreateEmptyRect("MainMenuPanel", canvasGo.transform,
new Vector2(0.08f, 0.18f), new Vector2(0.38f, 0.60f), Vector2.zero, Vector2.zero);
VerticalLayoutGroup menuLayout = mainMenuPanel.AddComponent<VerticalLayoutGroup>();
menuLayout.childAlignment = TextAnchor.UpperLeft;
menuLayout.spacing = 18f;
menuLayout.childControlWidth = true;
menuLayout.childControlHeight = false;
menuLayout.childForceExpandWidth = true;
menuLayout.childForceExpandHeight = false;
// Кнопка "ИГРАТЬ"
Button playBtn = CreateStyledButton("Button_Play", mainMenuPanel.transform,
"► ИГРАТЬ",
new Color(0.08f, 0.22f, 0.32f, 0.95f),
new Color(0.00f, 0.65f, 0.85f, 1.0f),
new Color(0.04f, 0.14f, 0.22f, 1.0f),
new Color(0.90f, 0.98f, 1.0f, 1.0f),
66f, 24);
// Кнопка "НАСТРОЙКИ"
Button settingsBtn = CreateStyledButton("Button_Settings", mainMenuPanel.transform,
"⚙ НАСТРОЙКИ",
new Color(0.07f, 0.12f, 0.18f, 0.90f),
new Color(0.18f, 0.38f, 0.52f, 1.0f),
new Color(0.04f, 0.08f, 0.12f, 1.0f),
new Color(0.85f, 0.92f, 0.98f, 1.0f),
62f, 22);
// Кнопка "ВЫХОД"
Button quitBtn = CreateStyledButton("Button_Quit", mainMenuPanel.transform,
"✖ ВЫХОД ИЗ ИГРЫ",
new Color(0.18f, 0.08f, 0.10f, 0.90f),
new Color(0.55f, 0.16f, 0.22f, 1.0f),
new Color(0.10f, 0.04f, 0.06f, 1.0f),
new Color(0.95f, 0.85f, 0.85f, 1.0f),
62f, 22);
// ==========================================
// 8. Панель настроек (SettingsPanel)
// ==========================================
GameObject settingsPanel = CreateEmptyRect("SettingsPanel", canvasGo.transform,
Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
// Затемняющий фон
CreateImage("Backdrop_Dim", settingsPanel.transform,
new Color(0.01f, 0.02f, 0.03f, 0.78f),
Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
// Модальное окно
GameObject settingsCard = CreateImage("Settings_Card", settingsPanel.transform,
new Color(0.05f, 0.08f, 0.12f, 0.98f),
new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f),
new Vector2(920f, 720f), Vector2.zero);
Outline panelOutline = settingsCard.AddComponent<Outline>();
panelOutline.effectColor = new Color(0.00f, 0.85f, 0.95f, 0.50f);
panelOutline.effectDistance = new Vector2(2f, -2f);
// Заголовок панели настроек
CreateText("Settings_Header", settingsCard.transform,
"НАСТРОЙКИ СИСТЕМЫ",
28, FontStyle.Bold, TextAnchor.MiddleCenter,
new Color(0.90f, 0.97f, 1.0f, 1.0f),
new Vector2(0.05f, 0.90f), new Vector2(0.95f, 0.98f), Vector2.zero, Vector2.zero);
CreateImage("Settings_Divider", settingsCard.transform,
new Color(0.00f, 0.85f, 0.95f, 0.35f),
new Vector2(0.05f, 0.89f), new Vector2(0.95f, 0.895f), Vector2.zero, Vector2.zero);
// Контейнер списка настроек
GameObject settingsList = CreateEmptyRect("Settings_List", settingsCard.transform,
new Vector2(0.06f, 0.14f), new Vector2(0.94f, 0.87f), Vector2.zero, Vector2.zero);
VerticalLayoutGroup settingsLayout = settingsList.AddComponent<VerticalLayoutGroup>();
settingsLayout.spacing = 16f;
settingsLayout.childAlignment = TextAnchor.UpperCenter;
settingsLayout.childControlWidth = true;
settingsLayout.childControlHeight = false;
settingsLayout.childForceExpandWidth = true;
settingsLayout.childForceExpandHeight = false;
// --- Раздел: Звук ---
CreateCategoryHeader("HEADER_AUDIO", settingsList.transform, "— АУДИО И ЗВУК —");
var volumeRow = CreateSliderRow("Row_Volume", settingsList.transform, "Общая громкость", 0f, 1f, 1f, "%");
Slider volSlider = volumeRow.slider;
Text volText = volumeRow.valueText;
Toggle muteToggle = CreateToggleRow("Row_Mute", settingsList.transform, "Отключить звук (Mute)");
// --- Раздел: Графика ---
CreateCategoryHeader("HEADER_GRAPHICS", settingsList.transform, "— ГРАФИКА И ДИСПЛЕЙ —");
Dropdown qualityDropdown = CreateDropdownRow("Row_Quality", settingsList.transform, "Качество графики");
Toggle fullscreenToggle = CreateToggleRow("Row_Fullscreen", settingsList.transform, "Полноэкранный режим");
Dropdown resolutionDropdown = CreateDropdownRow("Row_Resolution", settingsList.transform, "Разрешение экрана");
// --- Раздел: Управление ---
CreateCategoryHeader("HEADER_CONTROLS", settingsList.transform, "— УПРАВЛЕНИЕ —");
var sensRow = CreateSliderRow("Row_Sensitivity", settingsList.transform, "Чувствительность мыши", 0.2f, 3.0f, 1.0f, "x");
Slider sensSlider = sensRow.slider;
Text sensText = sensRow.valueText;
// Нижняя строка кнопок в панели настроек
GameObject bottomButtonsRow = CreateEmptyRect("Settings_BottomButtons", settingsCard.transform,
new Vector2(0.06f, 0.03f), new Vector2(0.94f, 0.12f), Vector2.zero, Vector2.zero);
HorizontalLayoutGroup bottomLayout = bottomButtonsRow.AddComponent<HorizontalLayoutGroup>();
bottomLayout.spacing = 30f;
bottomLayout.childAlignment = TextAnchor.MiddleCenter;
bottomLayout.childControlWidth = true;
bottomLayout.childControlHeight = true;
bottomLayout.childForceExpandWidth = true;
bottomLayout.childForceExpandHeight = true;
Button resetBtn = CreateStyledButton("Button_ResetDefaults", bottomButtonsRow.transform,
"Сбросить настройки",
new Color(0.18f, 0.12f, 0.14f, 0.95f),
new Color(0.35f, 0.18f, 0.22f, 1.0f),
new Color(0.12f, 0.06f, 0.08f, 1.0f),
new Color(0.95f, 0.85f, 0.85f, 1.0f),
50f, 18);
Button backBtn = CreateStyledButton("Button_Back", bottomButtonsRow.transform,
"✔ НАЗАД В МЕНЮ",
new Color(0.08f, 0.22f, 0.30f, 0.95f),
new Color(0.00f, 0.65f, 0.85f, 1.0f),
new Color(0.05f, 0.14f, 0.20f, 1.0f),
new Color(0.90f, 0.98f, 1.0f, 1.0f),
50f, 20);
// ==========================================
// 9. Панель загрузки (LoadingPanel)
// ==========================================
GameObject loadingPanel = CreateImage("LoadingPanel", canvasGo.transform,
new Color(0.02f, 0.03f, 0.05f, 0.97f),
Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
GameObject loadingContainer = CreateEmptyRect("Loading_Container", loadingPanel.transform,
new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f),
new Vector2(600f, 200f), Vector2.zero);
CreateText("Loading_Title", loadingContainer.transform,
"ЗАГРУЗКА МИССИИ...",
28, FontStyle.Bold, TextAnchor.MiddleCenter,
new Color(0.00f, 0.85f, 0.95f, 1.0f),
new Vector2(0f, 0.60f), new Vector2(1f, 1f), Vector2.zero, Vector2.zero);
GameObject sliderObj = DefaultControls.CreateSlider(uiResources);
sliderObj.name = "Loading_ProgressBar";
sliderObj.transform.SetParent(loadingContainer.transform, false);
RectTransform sliderRt = sliderObj.GetComponent<RectTransform>();
sliderRt.anchorMin = new Vector2(0.05f, 0.35f);
sliderRt.anchorMax = new Vector2(0.95f, 0.55f);
sliderRt.offsetMin = Vector2.zero;
sliderRt.offsetMax = Vector2.zero;
Slider loadingSlider = sliderObj.GetComponent<Slider>();
loadingSlider.interactable = false;
Transform fillTransform = sliderObj.transform.Find("Fill Area/Fill");
if (fillTransform != null)
{
Image fillImg = fillTransform.GetComponent<Image>();
if (fillImg != null) fillImg.color = new Color(0.00f, 0.85f, 0.95f, 1f);
}
GameObject loadingPercent = CreateText("Loading_Text", loadingContainer.transform,
"0%",
18, FontStyle.Normal, TextAnchor.MiddleCenter,
new Color(0.80f, 0.90f, 1.0f, 0.9f),
new Vector2(0f, 0f), new Vector2(1f, 0.30f), Vector2.zero, Vector2.zero);
Text loadingText = loadingPercent.GetComponent<Text>();
// ==========================================
// 10. Привязка ссылок к MainMenuManager
// ==========================================
manager.headerContainer = headerContainer;
manager.mainMenuPanel = mainMenuPanel;
manager.settingsPanel = settingsPanel;
manager.loadingPanel = loadingPanel;
manager.gameSceneName = "SampleScene";
manager.loadingSlider = loadingSlider;
manager.loadingText = loadingText;
manager.volumeSlider = volSlider;
manager.volumeValueText = volText;
manager.muteToggle = muteToggle;
manager.qualityDropdown = qualityDropdown;
manager.fullscreenToggle = fullscreenToggle;
manager.resolutionDropdown = resolutionDropdown;
manager.sensitivitySlider = sensSlider;
manager.sensitivityValueText = sensText;
UnityEditor.Events.UnityEventTools.AddPersistentListener(playBtn.onClick, manager.PlayGame);
UnityEditor.Events.UnityEventTools.AddPersistentListener(settingsBtn.onClick, manager.OpenSettings);
UnityEditor.Events.UnityEventTools.AddPersistentListener(quitBtn.onClick, manager.QuitGame);
UnityEditor.Events.UnityEventTools.AddPersistentListener(backBtn.onClick, manager.CloseSettings);
UnityEditor.Events.UnityEventTools.AddPersistentListener(resetBtn.onClick, manager.ResetToDefaults);
// Изначальная видимость панелей
headerContainer.SetActive(true);
mainMenuPanel.SetActive(true);
settingsPanel.SetActive(false);
loadingPanel.SetActive(false);
// 11. Сохранение сцены и Build Settings
string scenePath = "Assets/Scenes/MainMenu.unity";
EditorSceneManager.SaveScene(newScene, scenePath);
Debug.Log("[MainMenuSceneBuilder] Сцена создана: " + scenePath);
List<EditorBuildSettingsScene> buildScenes = new List<EditorBuildSettingsScene>();
buildScenes.Add(new EditorBuildSettingsScene(scenePath, true));
buildScenes.Add(new EditorBuildSettingsScene("Assets/Scenes/SampleScene.unity", true));
EditorBuildSettings.scenes = buildScenes.ToArray();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
return "SUCCESS: MainMenu created and configured!";
}
#region Хелперы создания UI элементов
private static GameObject CreateEmptyRect(string name, Transform parent, Vector2 anchorMin, Vector2 anchorMax, Vector2 sizeDelta, Vector2 anchoredPosition)
{
GameObject go = new GameObject(name, typeof(RectTransform));
go.transform.SetParent(parent, false);
RectTransform rt = go.GetComponent<RectTransform>();
rt.anchorMin = anchorMin;
rt.anchorMax = anchorMax;
rt.sizeDelta = sizeDelta;
rt.anchoredPosition = anchoredPosition;
return go;
}
private static GameObject CreateImage(string name, Transform parent, Color color, Vector2 anchorMin, Vector2 anchorMax, Vector2 sizeDelta, Vector2 anchoredPosition)
{
GameObject go = CreateEmptyRect(name, parent, anchorMin, anchorMax, sizeDelta, anchoredPosition);
Image img = go.AddComponent<Image>();
img.color = color;
img.sprite = uiResources.background;
img.type = Image.Type.Sliced;
return go;
}
private static GameObject CreateText(string name, Transform parent, string text, int fontSize, FontStyle style, TextAnchor alignment, Color color, Vector2 anchorMin, Vector2 anchorMax, Vector2 sizeDelta, Vector2 anchoredPosition)
{
GameObject go = CreateEmptyRect(name, parent, anchorMin, anchorMax, sizeDelta, anchoredPosition);
Text t = go.AddComponent<Text>();
t.font = standardFont;
t.text = text;
t.fontSize = fontSize;
t.fontStyle = style;
t.alignment = alignment;
t.color = color;
t.horizontalOverflow = HorizontalWrapMode.Wrap;
t.verticalOverflow = VerticalWrapMode.Overflow;
return go;
}
private static Button CreateStyledButton(string name, Transform parent, string label, Color normalColor, Color highlightedColor, Color pressedColor, Color textColor, float height, int fontSize)
{
GameObject btnObj = DefaultControls.CreateButton(uiResources);
btnObj.name = name;
btnObj.transform.SetParent(parent, false);
LayoutElement layout = btnObj.AddComponent<LayoutElement>();
layout.minHeight = height;
layout.preferredHeight = height;
Image img = btnObj.GetComponent<Image>();
img.color = normalColor;
img.type = Image.Type.Sliced;
Button btn = btnObj.GetComponent<Button>();
ColorBlock colors = btn.colors;
colors.normalColor = normalColor;
colors.highlightedColor = highlightedColor;
colors.pressedColor = pressedColor;
colors.selectedColor = highlightedColor;
colors.colorMultiplier = 1f;
colors.fadeDuration = 0.12f;
btn.colors = colors;
Text text = btnObj.GetComponentInChildren<Text>();
if (text != null)
{
text.font = standardFont;
text.text = label;
text.fontSize = fontSize;
text.fontStyle = FontStyle.Bold;
text.color = textColor;
text.alignment = TextAnchor.MiddleCenter;
}
return btn;
}
private static void CreateCategoryHeader(string name, Transform parent, string text)
{
GameObject go = CreateEmptyRect(name, parent, Vector2.zero, Vector2.one, new Vector2(0f, 32f), Vector2.zero);
LayoutElement layout = go.AddComponent<LayoutElement>();
layout.minHeight = 32f;
layout.preferredHeight = 32f;
Text t = go.AddComponent<Text>();
t.font = standardFont;
t.text = text;
t.fontSize = 17;
t.fontStyle = FontStyle.Bold;
t.alignment = TextAnchor.MiddleLeft;
t.color = new Color(0.00f, 0.85f, 0.95f, 0.95f);
}
private struct SliderRow
{
public Slider slider;
public Text valueText;
}
private static SliderRow CreateSliderRow(string name, Transform parent, string label, float min, float max, float def, string unit)
{
GameObject row = CreateEmptyRect(name, parent, Vector2.zero, Vector2.one, new Vector2(0f, 42f), Vector2.zero);
LayoutElement layout = row.AddComponent<LayoutElement>();
layout.minHeight = 42f;
layout.preferredHeight = 42f;
HorizontalLayoutGroup hLayout = row.AddComponent<HorizontalLayoutGroup>();
hLayout.spacing = 18f;
hLayout.childAlignment = TextAnchor.MiddleLeft;
hLayout.childControlWidth = false;
hLayout.childControlHeight = true;
hLayout.childForceExpandWidth = false;
hLayout.childForceExpandHeight = true;
// Метка названия
GameObject lblGo = CreateEmptyRect("Label", row.transform, Vector2.zero, Vector2.one, new Vector2(280f, 42f), Vector2.zero);
LayoutElement lblLayout = lblGo.AddComponent<LayoutElement>();
lblLayout.minWidth = 280f;
lblLayout.preferredWidth = 280f;
Text lbl = lblGo.AddComponent<Text>();
lbl.font = standardFont;
lbl.text = label;
lbl.fontSize = 18;
lbl.alignment = TextAnchor.MiddleLeft;
lbl.color = new Color(0.85f, 0.92f, 0.98f, 1f);
// Slider
GameObject sliderObj = DefaultControls.CreateSlider(uiResources);
sliderObj.name = "Slider";
sliderObj.transform.SetParent(row.transform, false);
LayoutElement sliderLayout = sliderObj.AddComponent<LayoutElement>();
sliderLayout.minWidth = 360f;
sliderLayout.preferredWidth = 360f;
Slider slider = sliderObj.GetComponent<Slider>();
slider.minValue = min;
slider.maxValue = max;
slider.value = def;
// Значение текстом
GameObject valGo = CreateEmptyRect("ValueText", row.transform, Vector2.zero, Vector2.one, new Vector2(90f, 42f), Vector2.zero);
LayoutElement valLayout = valGo.AddComponent<LayoutElement>();
valLayout.minWidth = 90f;
valLayout.preferredWidth = 90f;
Text valText = valGo.AddComponent<Text>();
valText.font = standardFont;
valText.text = unit == "%" ? $"{Mathf.RoundToInt(def * 100)}%" : $"{def:F1}{unit}";
valText.fontSize = 18;
valText.fontStyle = FontStyle.Bold;
valText.alignment = TextAnchor.MiddleCenter;
valText.color = new Color(0.00f, 0.85f, 0.95f, 1f);
return new SliderRow { slider = slider, valueText = valText };
}
private static Toggle CreateToggleRow(string name, Transform parent, string label)
{
GameObject row = CreateEmptyRect(name, parent, Vector2.zero, Vector2.one, new Vector2(0f, 40f), Vector2.zero);
LayoutElement layout = row.AddComponent<LayoutElement>();
layout.minHeight = 40f;
layout.preferredHeight = 40f;
HorizontalLayoutGroup hLayout = row.AddComponent<HorizontalLayoutGroup>();
hLayout.spacing = 18f;
hLayout.childAlignment = TextAnchor.MiddleLeft;
hLayout.childControlWidth = false;
hLayout.childControlHeight = true;
hLayout.childForceExpandWidth = false;
hLayout.childForceExpandHeight = true;
// Метка названия
GameObject lblGo = CreateEmptyRect("Label", row.transform, Vector2.zero, Vector2.one, new Vector2(280f, 40f), Vector2.zero);
LayoutElement lblLayout = lblGo.AddComponent<LayoutElement>();
lblLayout.minWidth = 280f;
lblLayout.preferredWidth = 280f;
Text lbl = lblGo.AddComponent<Text>();
lbl.font = standardFont;
lbl.text = label;
lbl.fontSize = 18;
lbl.alignment = TextAnchor.MiddleLeft;
lbl.color = new Color(0.85f, 0.92f, 0.98f, 1f);
// Toggle
GameObject toggleObj = DefaultControls.CreateToggle(uiResources);
toggleObj.name = "Toggle";
toggleObj.transform.SetParent(row.transform, false);
LayoutElement toggleLayout = toggleObj.AddComponent<LayoutElement>();
toggleLayout.minWidth = 50f;
toggleLayout.preferredWidth = 50f;
Text toggleLabel = toggleObj.GetComponentInChildren<Text>();
if (toggleLabel != null) toggleLabel.text = "";
Toggle toggle = toggleObj.GetComponent<Toggle>();
return toggle;
}
private static Dropdown CreateDropdownRow(string name, Transform parent, string label)
{
GameObject row = CreateEmptyRect(name, parent, Vector2.zero, Vector2.one, new Vector2(0f, 44f), Vector2.zero);
LayoutElement layout = row.AddComponent<LayoutElement>();
layout.minHeight = 44f;
layout.preferredHeight = 44f;
HorizontalLayoutGroup hLayout = row.AddComponent<HorizontalLayoutGroup>();
hLayout.spacing = 18f;
hLayout.childAlignment = TextAnchor.MiddleLeft;
hLayout.childControlWidth = false;
hLayout.childControlHeight = true;
hLayout.childForceExpandWidth = false;
hLayout.childForceExpandHeight = true;
// Метка названия
GameObject lblGo = CreateEmptyRect("Label", row.transform, Vector2.zero, Vector2.one, new Vector2(280f, 44f), Vector2.zero);
LayoutElement lblLayout = lblGo.AddComponent<LayoutElement>();
lblLayout.minWidth = 280f;
lblLayout.preferredWidth = 280f;
Text lbl = lblGo.AddComponent<Text>();
lbl.font = standardFont;
lbl.text = label;
lbl.fontSize = 18;
lbl.alignment = TextAnchor.MiddleLeft;
lbl.color = new Color(0.85f, 0.92f, 0.98f, 1f);
// Dropdown
GameObject dropdownObj = DefaultControls.CreateDropdown(uiResources);
dropdownObj.name = "Dropdown";
dropdownObj.transform.SetParent(row.transform, false);
LayoutElement ddLayout = dropdownObj.AddComponent<LayoutElement>();
ddLayout.minWidth = 420f;
ddLayout.preferredWidth = 420f;
Dropdown dropdown = dropdownObj.GetComponent<Dropdown>();
Text caption = dropdown.captionText;
if (caption != null) caption.font = standardFont;
Text item = dropdown.itemText;
if (item != null) item.font = standardFont;
return dropdown;
}
#endregion
}