#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; using UnityEngine.UI; /// /// Автоматически настраивает всю систему инвентаря на сцене /// Добавить на пустой GameObject "GameManager" в сцене /// public class InventorySetup : MonoBehaviour { [Header("Настройки")] public bool createUI = true; public bool createManagers = true; void Awake() { // Не создаём если уже есть на сцене (после ручной настройки) if (FindObjectOfType() != null) { Debug.Log("[InventorySetup] Inventory already exists, skipping creation"); return; } if (createManagers) SetupManagers(); if (createUI) SetupUI(); } void SetupManagers() { var imGO = new GameObject("InventoryManager"); imGO.transform.SetParent(transform); imGO.AddComponent(); var itemsGO = new GameObject("InventoryItems"); itemsGO.transform.SetParent(transform); itemsGO.AddComponent(); var testerGO = new GameObject("InventoryTester"); testerGO.transform.SetParent(transform); testerGO.AddComponent(); Debug.Log("[InventorySetup] Managers created"); } void SetupUI() { var canvasGO = new GameObject("InventoryCanvas"); canvasGO.transform.SetParent(transform); var canvas = canvasGO.AddComponent(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; canvas.sortingOrder = 100; canvasGO.AddComponent(); canvasGO.AddComponent(); Debug.Log("[InventorySetup] UI created"); } } #if UNITY_EDITOR /// /// Кнопка в инспекторе для быстрой настройки сцены /// [CustomEditor(typeof(InventorySetup))] public class InventorySetupEditor : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); if (GUILayout.Button("Настроить сцену для инвентаря")) { var target = (InventorySetup)this.target; if (FindObjectOfType() == null) { target.createManagers = true; target.createUI = true; Debug.Log("Инвентарь будет настроен при запуске"); } else { Debug.LogWarning("InventoryManager уже существует на сцене!"); } } GUILayout.Space(10); if (GUILayout.Button("Открыть сцену в Unity")) { EditorApplication.ExecuteMenuItem("Window/General/Scene"); } } } #endif