101 lines
2.9 KiB
C#
101 lines
2.9 KiB
C#
#if UNITY_EDITOR
|
||
using UnityEditor;
|
||
#endif
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
/// <summary>
|
||
/// Автоматически настраивает всю систему инвентаря на сцене
|
||
/// Добавить на пустой GameObject "GameManager" в сцене
|
||
/// </summary>
|
||
public class InventorySetup : MonoBehaviour
|
||
{
|
||
[Header("Настройки")]
|
||
public bool createUI = true;
|
||
public bool createManagers = true;
|
||
|
||
void Awake()
|
||
{
|
||
// Не создаём если уже есть на сцене (после ручной настройки)
|
||
if (FindObjectOfType<InventoryManager>() != 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<InventoryManager>();
|
||
|
||
var itemsGO = new GameObject("InventoryItems");
|
||
itemsGO.transform.SetParent(transform);
|
||
itemsGO.AddComponent<InventoryExampleItems>();
|
||
|
||
var testerGO = new GameObject("InventoryTester");
|
||
testerGO.transform.SetParent(transform);
|
||
testerGO.AddComponent<InventoryTester>();
|
||
|
||
Debug.Log("[InventorySetup] Managers created");
|
||
}
|
||
|
||
void SetupUI()
|
||
{
|
||
var canvasGO = new GameObject("InventoryCanvas");
|
||
canvasGO.transform.SetParent(transform);
|
||
|
||
var canvas = canvasGO.AddComponent<Canvas>();
|
||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||
canvas.sortingOrder = 100;
|
||
canvasGO.AddComponent<GraphicRaycaster>();
|
||
|
||
canvasGO.AddComponent<InventoryUIBuilder>();
|
||
|
||
Debug.Log("[InventorySetup] UI created");
|
||
}
|
||
}
|
||
|
||
#if UNITY_EDITOR
|
||
/// <summary>
|
||
/// Кнопка в инспекторе для быстрой настройки сцены
|
||
/// </summary>
|
||
[CustomEditor(typeof(InventorySetup))]
|
||
public class InventorySetupEditor : Editor
|
||
{
|
||
public override void OnInspectorGUI()
|
||
{
|
||
base.OnInspectorGUI();
|
||
|
||
if (GUILayout.Button("Настроить сцену для инвентаря"))
|
||
{
|
||
var target = (InventorySetup)this.target;
|
||
|
||
if (FindObjectOfType<InventoryManager>() == 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 |