bloak
This commit is contained in:
104
Assets/Blocks/Scripts/Editor/BlockSetupTool.cs
Normal file
104
Assets/Blocks/Scripts/Editor/BlockSetupTool.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Tools > Block World Setup — добавляет все нужные объекты в сцену.
|
||||
/// </summary>
|
||||
public static class BlockSetupTool
|
||||
{
|
||||
[MenuItem("Tools/Block World Setup")]
|
||||
public static void Setup()
|
||||
{
|
||||
// ── BlockRegistry ────────────────────────────────────────────────────
|
||||
var registry = Object.FindObjectOfType<BlockRegistry>();
|
||||
if (registry == null)
|
||||
{
|
||||
var go = new GameObject("BlockRegistry");
|
||||
registry = go.AddComponent<BlockRegistry>();
|
||||
|
||||
var shader = Shader.Find("Blocks/VoxelLit");
|
||||
if (shader != null) registry.voxelShader = shader;
|
||||
else Debug.LogWarning("[BlockSetup] Shader 'Blocks/VoxelLit' not found. Assign manually.");
|
||||
|
||||
Debug.Log("[BlockSetup] Created BlockRegistry.");
|
||||
}
|
||||
|
||||
// ── WorldManager ──────────────────────────────────────────────────────
|
||||
var wm = Object.FindObjectOfType<WorldManager>();
|
||||
if (wm == null)
|
||||
{
|
||||
var go = new GameObject("WorldManager");
|
||||
wm = go.AddComponent<WorldManager>();
|
||||
wm.registry = registry;
|
||||
Debug.Log("[BlockSetup] Created WorldManager.");
|
||||
}
|
||||
|
||||
// ── FlatWorldGenerator ────────────────────────────────────────────────
|
||||
var gen = Object.FindObjectOfType<FlatWorldGenerator>();
|
||||
if (gen == null)
|
||||
{
|
||||
var go = new GameObject("FlatWorldGenerator");
|
||||
gen = go.AddComponent<FlatWorldGenerator>();
|
||||
Debug.Log("[BlockSetup] Created FlatWorldGenerator.");
|
||||
}
|
||||
|
||||
// ── BlockPlacer на Player ─────────────────────────────────────────────
|
||||
var player = GameObject.FindWithTag("Player");
|
||||
if (player != null)
|
||||
{
|
||||
if (player.GetComponent<BlockPlacer>() == null)
|
||||
{
|
||||
var placer = player.AddComponent<BlockPlacer>();
|
||||
|
||||
// Назначаем breakMaterial
|
||||
var breakShader = Shader.Find("Blocks/BlockBreak");
|
||||
if (breakShader != null)
|
||||
placer.breakMaterial = new Material(breakShader);
|
||||
|
||||
// Layer mask: ищем слой "BlockLayer", иначе напоминаем
|
||||
int layer = LayerMask.NameToLayer("BlockLayer");
|
||||
if (layer >= 0)
|
||||
placer.blockLayer = 1 << layer;
|
||||
else
|
||||
Debug.LogWarning("[BlockSetup] Layer 'BlockLayer' not found. Создай его и назначь чанкам, затем задай blockLayer в BlockPlacer.");
|
||||
|
||||
Debug.Log("[BlockSetup] Added BlockPlacer to Player.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[BlockSetup] Player not found. Добавь BlockPlacer на объект с тегом 'Player' вручную.");
|
||||
}
|
||||
|
||||
Selection.activeGameObject = wm.gameObject;
|
||||
|
||||
EditorUtility.DisplayDialog(
|
||||
"Block World Setup",
|
||||
"Готово!\n\n" +
|
||||
"Что нужно сделать вручную:\n" +
|
||||
"1. BlockRegistry → добавь свои BlockDefinition в список\n" +
|
||||
"2. Создай слой 'BlockLayer' (Project Settings > Tags & Layers)\n" +
|
||||
"3. Назначь слой 'BlockLayer' чанкам (через chunkPrefab или скрипт)\n" +
|
||||
"4. BlockPlacer → назначь breakLayer и crackTexture\n" +
|
||||
"5. Запусти сцену — FlatWorldGenerator сгенерирует мир автоматически",
|
||||
"OK");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/Create Block Definition")]
|
||||
static void CreateBlockDefinition()
|
||||
{
|
||||
string folder = "Assets/Blocks/Definitions";
|
||||
if (!System.IO.Directory.Exists(folder))
|
||||
System.IO.Directory.CreateDirectory(folder);
|
||||
|
||||
var def = ScriptableObject.CreateInstance<BlockDefinition>();
|
||||
def.blockId = "new_block";
|
||||
def.displayName = "New Block";
|
||||
|
||||
string path = AssetDatabase.GenerateUniqueAssetPath($"{folder}/NewBlock.asset");
|
||||
AssetDatabase.CreateAsset(def, path);
|
||||
AssetDatabase.SaveAssets();
|
||||
Selection.activeObject = def;
|
||||
Debug.Log($"[BlockSetup] Created BlockDefinition: {path}");
|
||||
}
|
||||
}
|
||||
2
Assets/Blocks/Scripts/Editor/BlockSetupTool.cs.meta
Normal file
2
Assets/Blocks/Scripts/Editor/BlockSetupTool.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8dfaacf2cb701dd42965a828524a39f5
|
||||
Reference in New Issue
Block a user