fack
This commit is contained in:
101
Assets/Inventory/Scripts/InventorySetup.cs
Normal file
101
Assets/Inventory/Scripts/InventorySetup.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user