auto: 2026-05-20 01:02 · scene: Lobby · 261 files
This commit is contained in:
parent
412dedb7bc
commit
dd10b1f8bd
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b5b17d78de80a5541b44ca3a324a72b1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,359 @@
|
|||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEngine.Tilemaps;
|
||||
using System.IO;
|
||||
using EerieVillage.Map.Data;
|
||||
|
||||
namespace EerieVillage.Map.EditorScripts
|
||||
{
|
||||
/// <summary>
|
||||
/// BT13-Dev-Map — placeholder asset 일회 자동 생성 + Catalog 자동 link.
|
||||
/// PD 지시 (2026-05-19): 4 신규 자동 link — backgroundSprite·playerPrefab·groundCenter·platformShort·platformLong·monsters.
|
||||
/// ground.png·AirGround_Type*.png 의 spriteMode=Multiple 을 Single·FullRect 으로 자동 정정 후 Tile asset 자동 생성.
|
||||
/// 이전 본문 백업: 공유/개발팀_백업/EerieVillage/BT13-Dev-Map_20260519/MapAssetBootstrap.bak_20260519_0050.cs
|
||||
/// 메뉴: EerieVillage/Map/Bootstrap Placeholder Assets
|
||||
/// </summary>
|
||||
public static class MapAssetBootstrap
|
||||
{
|
||||
const string RESOURCES_MAP_PATH = "Assets/Resources/Map";
|
||||
const string TILES_AUTO_PATH = "Assets/Tiles/Auto";
|
||||
|
||||
[MenuItem("EerieVillage/Map/Bootstrap Placeholder Assets")]
|
||||
public static void Bootstrap()
|
||||
{
|
||||
EnsureFolder(RESOURCES_MAP_PATH);
|
||||
EnsureFolder(TILES_AUTO_PATH);
|
||||
|
||||
// 1. MapResourceCatalog (1) — PD 가 Inspector 또는 Registry 에서 Tile·Prefab 등록
|
||||
var catalogAsset = CreateAssetIfMissing<MapResourceCatalog>($"{RESOURCES_MAP_PATH}/MapResourceCatalog.asset");
|
||||
|
||||
// 1-A. 전체 자동 link (PD 2026-05-19 단순화 6 항목)
|
||||
// Bootstrap 1회로 모든 link 자동 등록 → PD 의 Inspector 수동 작업 불요.
|
||||
bool dirty = false;
|
||||
|
||||
// (1) backgroundSprite ← BgImg_1.png (맵 최하위 레이어 반복 배치)
|
||||
if (catalogAsset.backgroundSprite == null)
|
||||
{
|
||||
var s = AssetDatabase.LoadAssetAtPath<Sprite>($"{RESOURCES_MAP_PATH}/BgImg_1.png");
|
||||
if (s != null) { catalogAsset.backgroundSprite = s; dirty = true; Debug.Log("[Bootstrap] backgroundSprite ← BgImg_1.png"); }
|
||||
}
|
||||
|
||||
// (2) playerPrefab ← Player.prefab
|
||||
if (catalogAsset.playerPrefab == null)
|
||||
{
|
||||
var p = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/Player.prefab");
|
||||
if (p != null) { catalogAsset.playerPrefab = p; dirty = true; Debug.Log("[Bootstrap] playerPrefab ← Player.prefab"); }
|
||||
}
|
||||
|
||||
// (3) 9-slice ground + variant ← ground_Tileset.png sub-sprite (PD 2026-05-19 자연 연결)
|
||||
// ground_Tileset.png (spriteMode=Multiple) 의 23 sub-sprite 영역 role 별 Tile asset 자동 생성.
|
||||
// 기존 ground.png 단일 link 영역 폐기 — 9-slice 자동 분기 영역.
|
||||
BootstrapGround9SliceFromTileset(catalogAsset, ref dirty);
|
||||
|
||||
// (4) platformShort ← AirGround_Type1.png 의 Sprite → Tile 자동 생성
|
||||
if (catalogAsset.platformShort == null)
|
||||
{
|
||||
var t = EnsureSingleSpriteTile($"{RESOURCES_MAP_PATH}/AirGround_Type1.png", $"{TILES_AUTO_PATH}/Platform_Short.asset");
|
||||
if (t != null) { catalogAsset.platformShort = t; dirty = true; Debug.Log("[Bootstrap] platformShort ← Platform_Short.asset (AirGround_Type1.png)"); }
|
||||
}
|
||||
|
||||
// (5) platformLong ← AirGround_Type2.png 의 Sprite → Tile 자동 생성
|
||||
if (catalogAsset.platformLong == null)
|
||||
{
|
||||
var t = EnsureSingleSpriteTile($"{RESOURCES_MAP_PATH}/AirGround_Type2.png", $"{TILES_AUTO_PATH}/Platform_Long.asset");
|
||||
if (t != null) { catalogAsset.platformLong = t; dirty = true; Debug.Log("[Bootstrap] platformLong ← Platform_Long.asset (AirGround_Type2.png)"); }
|
||||
}
|
||||
|
||||
// (6) monsters 리스트 — 비어있을 때 Enemy.prefab 자동 append
|
||||
if (catalogAsset.monsters == null || catalogAsset.monsters.Count == 0)
|
||||
{
|
||||
var p = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/Enemy.prefab");
|
||||
if (p != null)
|
||||
{
|
||||
if (catalogAsset.monsters == null) catalogAsset.monsters = new System.Collections.Generic.List<GameObject>();
|
||||
catalogAsset.monsters.Add(p);
|
||||
dirty = true;
|
||||
Debug.Log("[Bootstrap] monsters[0] ← Enemy.prefab");
|
||||
}
|
||||
}
|
||||
|
||||
// (7) bossPrefab = null 유지 (보스 미정의 시 spawn skip · MapApplier 처리)
|
||||
|
||||
if (dirty) EditorUtility.SetDirty(catalogAsset);
|
||||
|
||||
// 2. SpawnPointConfig (1) — 기본값 SO
|
||||
CreateAssetIfMissing<SpawnPointConfig>($"{RESOURCES_MAP_PATH}/SpawnPointConfig_Default.asset");
|
||||
|
||||
// 3. ChunkTemplate 3 (Intro·Mid·BossPre)
|
||||
CreateChunkTemplate("Intro", ChunkTemplate.ChunkRole.Intro, 0.6f, 0.5f);
|
||||
CreateChunkTemplate("Mid", ChunkTemplate.ChunkRole.Mid, 1.2f, 1.0f);
|
||||
CreateChunkTemplate("BossPre", ChunkTemplate.ChunkRole.BossPre, 0.8f, 1.5f);
|
||||
|
||||
// 4. PlatformPattern (기본 1)
|
||||
CreateAssetIfMissing<PlatformPattern>($"{RESOURCES_MAP_PATH}/PlatformPattern_Default.asset");
|
||||
|
||||
// 5. 5 stage MapGenerationConfig (기획 SOT 정합 — Stage1~5·마을)
|
||||
CreateStageConfig("Stage0_Village", 80, 0.3f, 0.3f);
|
||||
CreateStageConfig("Stage1_DuskVillageOutskirts", 120, 0.4f, 0.5f);
|
||||
CreateStageConfig("Stage2_AbandonedMountainTemple", 140, 0.5f, 0.55f);
|
||||
CreateStageConfig("Stage3_BoneRockValley", 160, 0.55f, 0.6f);
|
||||
CreateStageConfig("Stage4_AbandonedHouseBasement", 160, 0.6f, 0.65f);
|
||||
CreateStageConfig("Stage5_GraveyardDepths", 180, 0.65f, 0.7f);
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
Debug.Log("[MapAssetBootstrap] Placeholder asset 생성 + Catalog 자동 link 완료 (PD 2026-05-19 단순화 6 항목).\n" +
|
||||
"PD: Bootstrap 1회 실행 후 즉시 Generate·Apply 가능.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PD 2026-05-19 — ground_Tileset.png (spriteMode=Multiple) 의 23 sub-sprite 자동 link.
|
||||
/// AssetDatabase.LoadAllAssetsAtPath → Sprite[] → name parsing → Tile asset 생성 → Catalog 9 slot + variant 채움.
|
||||
/// sub-sprite name 형식: ground_Tileset_<idx>_<role> (예: ground_Tileset_7_Center → role=Center).
|
||||
/// </summary>
|
||||
static void BootstrapGround9SliceFromTileset(MapResourceCatalog catalog, ref bool dirty)
|
||||
{
|
||||
const string tilesetPath = RESOURCES_MAP_PATH + "/ground_Tileset.png";
|
||||
if (!File.Exists(tilesetPath))
|
||||
{
|
||||
Debug.LogWarning($"[Bootstrap] ground_Tileset.png 미발견 — {tilesetPath}");
|
||||
return;
|
||||
}
|
||||
|
||||
var allAssets = AssetDatabase.LoadAllAssetsAtPath(tilesetPath);
|
||||
var spriteByRole = new System.Collections.Generic.Dictionary<string, Sprite>();
|
||||
foreach (var a in allAssets)
|
||||
{
|
||||
if (a is Sprite spr)
|
||||
{
|
||||
// ground_Tileset_<idx>_<role> → role 추출 (_ 2회 split 후 나머지 결합)
|
||||
var parts = spr.name.Split('_');
|
||||
if (parts.Length >= 4)
|
||||
{
|
||||
string role = string.Join("_", parts, 3, parts.Length - 3);
|
||||
spriteByRole[role] = spr;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (spriteByRole.Count == 0)
|
||||
{
|
||||
Debug.LogWarning($"[Bootstrap] ground_Tileset.png sub-sprite 미발견 — Reimport 필요 (spriteMode=Multiple)");
|
||||
return;
|
||||
}
|
||||
|
||||
// 9 slot 자동 link
|
||||
if (catalog.groundTopLeft == null) { var t = CreateTileFromSprite(spriteByRole, "TopLeft"); if (t != null) { catalog.groundTopLeft = t; dirty = true; } }
|
||||
if (catalog.groundTopRight == null) { var t = CreateTileFromSprite(spriteByRole, "TopRight"); if (t != null) { catalog.groundTopRight = t; dirty = true; } }
|
||||
if (catalog.groundTop == null) { var t = CreateTileFromSprite(spriteByRole, "Top_A"); if (t != null) { catalog.groundTop = t; dirty = true; } }
|
||||
if (catalog.groundLeft == null) { var t = CreateTileFromSprite(spriteByRole, "Left"); if (t != null) { catalog.groundLeft = t; dirty = true; } }
|
||||
if (catalog.groundCenter == null) { var t = CreateTileFromSprite(spriteByRole, "Center"); if (t != null) { catalog.groundCenter = t; dirty = true; } }
|
||||
if (catalog.groundRight == null) { var t = CreateTileFromSprite(spriteByRole, "Right"); if (t != null) { catalog.groundRight = t; dirty = true; } }
|
||||
if (catalog.groundBottomLeft == null) { var t = CreateTileFromSprite(spriteByRole, "BottomLeft"); if (t != null) { catalog.groundBottomLeft = t; dirty = true; } }
|
||||
if (catalog.groundBottom == null) { var t = CreateTileFromSprite(spriteByRole, "Bottom_A"); if (t != null) { catalog.groundBottom = t; dirty = true; } }
|
||||
if (catalog.groundBottomRight == null) { var t = CreateTileFromSprite(spriteByRole, "BottomRight"); if (t != null) { catalog.groundBottomRight = t; dirty = true; } }
|
||||
|
||||
// Top variant random (Top_A·Top_B·Top_C)
|
||||
if (catalog.groundTopVariants == null || catalog.groundTopVariants.Length == 0)
|
||||
{
|
||||
var arr = new TileBase[3];
|
||||
arr[0] = CreateTileFromSprite(spriteByRole, "Top_A");
|
||||
arr[1] = CreateTileFromSprite(spriteByRole, "Top_B");
|
||||
arr[2] = CreateTileFromSprite(spriteByRole, "Top_C");
|
||||
if (arr[0] != null || arr[1] != null || arr[2] != null)
|
||||
{
|
||||
catalog.groundTopVariants = arr;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Bottom variant random (Bottom_A·Bottom_B·Bottom_C)
|
||||
if (catalog.groundBottomVariants == null || catalog.groundBottomVariants.Length == 0)
|
||||
{
|
||||
var arr = new TileBase[3];
|
||||
arr[0] = CreateTileFromSprite(spriteByRole, "Bottom_A");
|
||||
arr[1] = CreateTileFromSprite(spriteByRole, "Bottom_B");
|
||||
arr[2] = CreateTileFromSprite(spriteByRole, "Bottom_C");
|
||||
if (arr[0] != null || arr[1] != null || arr[2] != null)
|
||||
{
|
||||
catalog.groundBottomVariants = arr;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log($"[Bootstrap] ground_Tileset 9-slice link 완료 — role count={spriteByRole.Count}, variant Top={catalog.groundTopVariants?.Length ?? 0}, Bottom={catalog.groundBottomVariants?.Length ?? 0}");
|
||||
}
|
||||
|
||||
/// <summary>role 기반 Tile asset 생성 (Tiles/Auto/Ground_<role>.asset).</summary>
|
||||
static TileBase CreateTileFromSprite(System.Collections.Generic.Dictionary<string, Sprite> spriteByRole, string role)
|
||||
{
|
||||
if (!spriteByRole.TryGetValue(role, out var spr) || spr == null) return null;
|
||||
string tilePath = $"{TILES_AUTO_PATH}/Ground_{role}.asset";
|
||||
var existing = AssetDatabase.LoadAssetAtPath<TileBase>(tilePath);
|
||||
if (existing is Tile et)
|
||||
{
|
||||
if (et.sprite != spr || et.colliderType != Tile.ColliderType.Sprite)
|
||||
{
|
||||
et.sprite = spr;
|
||||
et.colliderType = Tile.ColliderType.Sprite;
|
||||
EditorUtility.SetDirty(et);
|
||||
}
|
||||
return et;
|
||||
}
|
||||
var tile = ScriptableObject.CreateInstance<Tile>();
|
||||
tile.sprite = spr;
|
||||
tile.colliderType = Tile.ColliderType.Sprite;
|
||||
AssetDatabase.CreateAsset(tile, tilePath);
|
||||
return tile;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PNG 의 spriteMode 를 Single·FullRect 로 정정 후 Sprite 를 로드, Tile asset 자동 생성·갱신.
|
||||
/// PD 자산 (AirGround_Type1·AirGround_Type2) 이 spriteMode=Multiple 인 경우 자동 정정.
|
||||
/// (ground.png 단일 link 폐기 — BootstrapGround9SliceFromTileset 영역 대체.)
|
||||
/// </summary>
|
||||
static TileBase EnsureSingleSpriteTile(string pngPath, string tilePath)
|
||||
{
|
||||
// 1. PNG 존재 검증
|
||||
if (!File.Exists(pngPath))
|
||||
{
|
||||
Debug.LogWarning($"[Bootstrap] PNG 미발견 — {pngPath}");
|
||||
return null;
|
||||
}
|
||||
|
||||
// 2. TextureImporter 검사 — spriteMode=Single·FullRect 강제 (TextureImporterSettings 영역)
|
||||
var importer = AssetImporter.GetAtPath(pngPath) as TextureImporter;
|
||||
if (importer != null)
|
||||
{
|
||||
var settings = new TextureImporterSettings();
|
||||
importer.ReadTextureSettings(settings);
|
||||
bool importerDirty = false;
|
||||
if (settings.textureType != TextureImporterType.Sprite)
|
||||
{
|
||||
settings.textureType = TextureImporterType.Sprite;
|
||||
importerDirty = true;
|
||||
}
|
||||
if (settings.spriteMode != (int)SpriteImportMode.Single)
|
||||
{
|
||||
settings.spriteMode = (int)SpriteImportMode.Single;
|
||||
importerDirty = true;
|
||||
}
|
||||
if (settings.spriteMeshType != SpriteMeshType.FullRect)
|
||||
{
|
||||
settings.spriteMeshType = SpriteMeshType.FullRect;
|
||||
importerDirty = true;
|
||||
}
|
||||
if (importerDirty)
|
||||
{
|
||||
importer.SetTextureSettings(settings);
|
||||
importer.SaveAndReimport();
|
||||
Debug.Log($"[Bootstrap] {pngPath} → textureType=Sprite · spriteMode=Single · FullRect 자동 정정");
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Sprite 로드
|
||||
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(pngPath);
|
||||
if (sprite == null)
|
||||
{
|
||||
Debug.LogWarning($"[Bootstrap] Sprite 로드 실패 — {pngPath}");
|
||||
return null;
|
||||
}
|
||||
|
||||
// 4. Tile asset 생성 또는 갱신 (m_ColliderType=Sprite)
|
||||
var existing = AssetDatabase.LoadAssetAtPath<TileBase>(tilePath);
|
||||
Tile tile;
|
||||
if (existing is Tile et)
|
||||
{
|
||||
tile = et;
|
||||
if (tile.sprite != sprite || tile.colliderType != Tile.ColliderType.Sprite)
|
||||
{
|
||||
tile.sprite = sprite;
|
||||
tile.colliderType = Tile.ColliderType.Sprite;
|
||||
EditorUtility.SetDirty(tile);
|
||||
Debug.Log($"[Bootstrap] Tile 갱신 — {tilePath}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tile = ScriptableObject.CreateInstance<Tile>();
|
||||
tile.sprite = sprite;
|
||||
tile.colliderType = Tile.ColliderType.Sprite;
|
||||
AssetDatabase.CreateAsset(tile, tilePath);
|
||||
Debug.Log($"[Bootstrap] Tile 생성 — {tilePath} (sprite={sprite.name} · m_ColliderType=Sprite)");
|
||||
}
|
||||
return tile;
|
||||
}
|
||||
|
||||
static void EnsureFolder(string path)
|
||||
{
|
||||
if (AssetDatabase.IsValidFolder(path)) return;
|
||||
string parent = Path.GetDirectoryName(path).Replace('\\', '/');
|
||||
string folderName = Path.GetFileName(path);
|
||||
if (!AssetDatabase.IsValidFolder(parent)) EnsureFolder(parent);
|
||||
AssetDatabase.CreateFolder(parent, folderName);
|
||||
}
|
||||
|
||||
static T CreateAssetIfMissing<T>(string path) where T : ScriptableObject
|
||||
{
|
||||
var existing = AssetDatabase.LoadAssetAtPath<T>(path);
|
||||
if (existing != null) return existing;
|
||||
var asset = ScriptableObject.CreateInstance<T>();
|
||||
AssetDatabase.CreateAsset(asset, path);
|
||||
Debug.Log($"[MapAssetBootstrap] Created {path}");
|
||||
return asset;
|
||||
}
|
||||
|
||||
static void CreateChunkTemplate(string name, ChunkTemplate.ChunkRole role, float platMul, float spawnMul)
|
||||
{
|
||||
string path = $"{RESOURCES_MAP_PATH}/Chunk_{name}.asset";
|
||||
if (AssetDatabase.LoadAssetAtPath<ChunkTemplate>(path) != null) return;
|
||||
var asset = ScriptableObject.CreateInstance<ChunkTemplate>();
|
||||
asset.role = role;
|
||||
asset.platformDensityMultiplier = platMul;
|
||||
asset.spawnDensityMultiplier = spawnMul;
|
||||
asset.chunkSizeTiles = 20;
|
||||
AssetDatabase.CreateAsset(asset, path);
|
||||
Debug.Log($"[MapAssetBootstrap] Created {path}");
|
||||
}
|
||||
|
||||
static void CreateStageConfig(string stageName, int length, float spawnDensity, float platformDensity)
|
||||
{
|
||||
string path = $"{RESOURCES_MAP_PATH}/MapConfig_{stageName}.asset";
|
||||
if (AssetDatabase.LoadAssetAtPath<MapGenerationConfig>(path) != null) return;
|
||||
|
||||
var asset = ScriptableObject.CreateInstance<MapGenerationConfig>();
|
||||
asset.lengthTiles = length;
|
||||
asset.spawnDensity = spawnDensity;
|
||||
asset.platformDensity = platformDensity;
|
||||
asset.minSpawnSpacingTiles = 12;
|
||||
asset.maxSpawnPerMap = 16;
|
||||
asset.minPlatformGapTiles = 3;
|
||||
asset.maxPlatformGapTiles = 10;
|
||||
asset.minPlatformWidthTiles = 2;
|
||||
asset.maxPlatformWidthTiles = 6;
|
||||
asset.minPlatformHeight = 2;
|
||||
asset.maxPlatformHeight = 10;
|
||||
asset.startMarginTiles = 4;
|
||||
asset.goalMarginTiles = 4;
|
||||
asset.chunkSizeTiles = 20;
|
||||
asset.introPlatformDensityMultiplier = 0.6f;
|
||||
asset.midPlatformDensityMultiplier = 1.2f;
|
||||
asset.bossPrePlatformDensityMultiplier = 0.8f;
|
||||
asset.groundBaseY = 0;
|
||||
asset.groundPerlinAmplitude = 2;
|
||||
asset.groundPerlinScale = 0.1f;
|
||||
asset.flyingEnemyRatio = 0.15f;
|
||||
asset.allowFloatingSpawnPoints = true;
|
||||
asset.respawnTimer = 5f;
|
||||
asset.respawnMaxCount = -1;
|
||||
asset.bossRoomEnabled = true;
|
||||
asset.bossRoomLengthTiles = 20;
|
||||
|
||||
var catalog = AssetDatabase.LoadAssetAtPath<MapResourceCatalog>($"{RESOURCES_MAP_PATH}/MapResourceCatalog.asset");
|
||||
if (catalog != null) asset.catalog = catalog;
|
||||
|
||||
AssetDatabase.CreateAsset(asset, path);
|
||||
Debug.Log($"[MapAssetBootstrap] Created {path}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b8f22133cb0f959499889bfd5dd6ac2b
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using EerieVillage.Map.Data;
|
||||
using EerieVillage.Map.Generation;
|
||||
using EerieVillage.Map.Runtime;
|
||||
|
||||
namespace EerieVillage.Map.EditorScripts
|
||||
{
|
||||
/// <summary>
|
||||
/// BT13-Dev-Map Phase 2-C — Unity Editor Window 영역 미리보기.
|
||||
/// spec §10 정합. PD 결정 §15-11 옵션 12종 모두 노출.
|
||||
/// 메뉴: EerieVillage/Map/Preview
|
||||
/// </summary>
|
||||
public class MapPreviewWindow : EditorWindow
|
||||
{
|
||||
[MenuItem("EerieVillage/Map/Preview")]
|
||||
public static void Open()
|
||||
{
|
||||
var w = GetWindow<MapPreviewWindow>("Map Preview");
|
||||
w.minSize = new Vector2(640, 480);
|
||||
w.Show();
|
||||
}
|
||||
|
||||
MapGenerationConfig config;
|
||||
MapBlueprint currentBlueprint;
|
||||
Vector2 previewScroll;
|
||||
Vector2 inspectorScroll;
|
||||
float zoom = 1f;
|
||||
bool showJumpReach = false;
|
||||
bool advancedOptionsExpanded = false;
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
EditorGUILayout.LabelField("BT13-Dev-Map Preview", EditorStyles.boldLabel);
|
||||
EditorGUILayout.Space(4);
|
||||
|
||||
// ─────────── Config 영역 ───────────
|
||||
EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
|
||||
config = (MapGenerationConfig)EditorGUILayout.ObjectField("Config", config,
|
||||
typeof(MapGenerationConfig), false);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.Space(2);
|
||||
|
||||
// ─────────── 옵션 12종 (§15-11 PD 결정 — 모두 노출) ───────────
|
||||
if (config != null)
|
||||
{
|
||||
inspectorScroll = EditorGUILayout.BeginScrollView(inspectorScroll, GUILayout.Height(220));
|
||||
using (new EditorGUI.IndentLevelScope())
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
// [1] 맵 길이 (Tile)
|
||||
config.lengthTiles = EditorGUILayout.IntSlider("Length (Tile)", config.lengthTiles, 20, 500);
|
||||
|
||||
EditorGUILayout.LabelField("거점 영역 (§15-5 OVERRIDE 공중 발판 허용)", EditorStyles.miniBoldLabel);
|
||||
// [2-4]
|
||||
config.spawnDensity = EditorGUILayout.Slider("Spawn Density", config.spawnDensity, 0f, 1f);
|
||||
config.minSpawnSpacingTiles = EditorGUILayout.IntSlider("Min Spawn Spacing", config.minSpawnSpacingTiles, 2, 30);
|
||||
config.maxSpawnPerMap = EditorGUILayout.IntSlider("Max Spawn Per Map", config.maxSpawnPerMap, 0, 32);
|
||||
config.allowFloatingSpawnPoints = EditorGUILayout.Toggle("Allow Floating Spawn (§15-5)", config.allowFloatingSpawnPoints);
|
||||
|
||||
EditorGUILayout.LabelField("발판 영역 (§6 룰·이중 점프 H_max 10.11m·D_max 11.56m·§15-2)", EditorStyles.miniBoldLabel);
|
||||
// [5-9]
|
||||
config.platformDensity = EditorGUILayout.Slider("Platform Density", config.platformDensity, 0f, 1f);
|
||||
config.minPlatformGapTiles = EditorGUILayout.IntSlider("Min Platform Gap (Tile)", config.minPlatformGapTiles, 1, 10);
|
||||
config.maxPlatformGapTiles = EditorGUILayout.IntSlider("Max Platform Gap (Tile)", config.maxPlatformGapTiles, config.minPlatformGapTiles, 12);
|
||||
config.minPlatformWidthTiles = EditorGUILayout.IntSlider("Min Platform Width (Tile)", config.minPlatformWidthTiles, 2, 8);
|
||||
config.maxPlatformWidthTiles = EditorGUILayout.IntSlider("Max Platform Width (Tile)", config.maxPlatformWidthTiles, config.minPlatformWidthTiles, 12);
|
||||
config.minPlatformHeight = EditorGUILayout.IntSlider("Min Platform Height (Tile)", config.minPlatformHeight, 1, 10);
|
||||
config.maxPlatformHeight = EditorGUILayout.IntSlider("Max Platform Height (Tile)", config.maxPlatformHeight, config.minPlatformHeight, 10);
|
||||
|
||||
EditorGUILayout.LabelField("Start·Goal (§15-6 좌측 고정)", EditorStyles.miniBoldLabel);
|
||||
// [10-11]
|
||||
config.startMarginTiles = EditorGUILayout.IntSlider("Start Margin (Tile)", config.startMarginTiles, 2, 20);
|
||||
config.goalMarginTiles = EditorGUILayout.IntSlider("Goal Margin (Tile)", config.goalMarginTiles, 2, 20);
|
||||
|
||||
EditorGUILayout.LabelField("Enemy 영역 (§15-8 OVERRIDE MonsterRandomizer)", EditorStyles.miniBoldLabel);
|
||||
config.flyingEnemyRatio = EditorGUILayout.Slider("Flying Enemy Ratio", config.flyingEnemyRatio, 0f, 1f);
|
||||
|
||||
EditorGUILayout.LabelField("Enemy 재-spawn (§15-7 OVERRIDE)", EditorStyles.miniBoldLabel);
|
||||
config.respawnTimer = EditorGUILayout.Slider("Respawn Timer (sec)", config.respawnTimer, 0f, 60f);
|
||||
config.respawnMaxCount = EditorGUILayout.IntSlider("Respawn Max Count (-1=unlimited)", config.respawnMaxCount, -1, 20);
|
||||
|
||||
EditorGUILayout.LabelField("Boss Room (§15-9 OVERRIDE)", EditorStyles.miniBoldLabel);
|
||||
config.bossRoomEnabled = EditorGUILayout.Toggle("Boss Room Enabled", config.bossRoomEnabled);
|
||||
config.bossRoomLengthTiles = EditorGUILayout.IntSlider("Boss Room Length (Tile)", config.bossRoomLengthTiles, 10, 50);
|
||||
|
||||
// Advanced 영역 (chunk·perlin — §15-3 기본 고정·EditorWindow 미노출이나 고급용 toggle)
|
||||
advancedOptionsExpanded = EditorGUILayout.Foldout(advancedOptionsExpanded, "Advanced (chunk·perlin — §15-3 기본 고정)");
|
||||
if (advancedOptionsExpanded)
|
||||
{
|
||||
config.chunkSizeTiles = EditorGUILayout.IntSlider("Chunk Size (Tile)", config.chunkSizeTiles, 5, 50);
|
||||
config.introPlatformDensityMultiplier = EditorGUILayout.Slider("Intro Density Mul", config.introPlatformDensityMultiplier, 0f, 2f);
|
||||
config.midPlatformDensityMultiplier = EditorGUILayout.Slider("Mid Density Mul", config.midPlatformDensityMultiplier, 0f, 2f);
|
||||
config.bossPrePlatformDensityMultiplier = EditorGUILayout.Slider("BossPre Density Mul", config.bossPrePlatformDensityMultiplier, 0f, 2f);
|
||||
config.groundBaseY = EditorGUILayout.IntSlider("Ground Base Y", config.groundBaseY, -10, 10);
|
||||
config.groundPerlinAmplitude = EditorGUILayout.IntSlider("Ground Perlin Amp", config.groundPerlinAmplitude, 0, 5);
|
||||
config.groundPerlinScale = EditorGUILayout.Slider("Ground Perlin Scale", config.groundPerlinScale, 0.01f, 0.5f);
|
||||
}
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
EditorUtility.SetDirty(config);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.HelpBox("MapGenerationConfig 영역 필수. Project 영역 SO 영역 영역 생성 후 Drag.", MessageType.Info);
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
|
||||
// ─────────── 액션 영역 ───────────
|
||||
using (new EditorGUI.DisabledScope(config == null))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Generate (랜덤)", GUILayout.Height(28), GUILayout.Width(120)))
|
||||
{
|
||||
currentBlueprint = MapGenerator.Generate(config);
|
||||
}
|
||||
using (new EditorGUI.DisabledScope(currentBlueprint == null))
|
||||
{
|
||||
if (GUILayout.Button("Apply to Scene", GUILayout.Height(28), GUILayout.Width(140)))
|
||||
{
|
||||
MapApplier.Apply(currentBlueprint, config);
|
||||
// Scene 영역 변경 — Undo 영역 외 (BT 영역 PD 직접 변경)
|
||||
}
|
||||
}
|
||||
if (GUILayout.Button("Clear Scene", GUILayout.Height(28), GUILayout.Width(120)))
|
||||
{
|
||||
MapApplier.Clear();
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
zoom = EditorGUILayout.Slider("Zoom", zoom, 0.2f, 3f);
|
||||
showJumpReach = EditorGUILayout.ToggleLeft("Show Jump Reach", showJumpReach, GUILayout.Width(160));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
|
||||
// ─────────── 미리보기 영역 ───────────
|
||||
if (currentBlueprint != null)
|
||||
{
|
||||
DrawPreviewCanvas();
|
||||
DrawBlueprintStats();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.HelpBox("Generate 영역 영역 미리보기.", MessageType.None);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawPreviewCanvas()
|
||||
{
|
||||
int mh = Mathf.Max(8, currentBlueprint.heightTiles + 8);
|
||||
float canvasW = currentBlueprint.lengthTiles * MapPreviewRenderer.TILE_PIXEL * zoom;
|
||||
float canvasH = mh * MapPreviewRenderer.TILE_PIXEL * zoom;
|
||||
|
||||
var viewRect = GUILayoutUtility.GetRect(position.width - 20, position.height - 360);
|
||||
previewScroll = GUI.BeginScrollView(viewRect, previewScroll, new Rect(0, 0, canvasW, canvasH));
|
||||
|
||||
// 배경
|
||||
EditorGUI.DrawRect(new Rect(0, 0, canvasW, canvasH), new Color(0.1f, 0.1f, 0.12f));
|
||||
|
||||
MapPreviewRenderer.Draw(currentBlueprint, zoom, Vector2.zero, showJumpReach);
|
||||
|
||||
GUI.EndScrollView();
|
||||
}
|
||||
|
||||
void DrawBlueprintStats()
|
||||
{
|
||||
var bp = currentBlueprint;
|
||||
EditorGUILayout.BeginHorizontal(EditorStyles.helpBox);
|
||||
EditorGUILayout.LabelField(
|
||||
$"seed={bp.generationSeed} length={bp.lengthTiles}T height={bp.heightTiles}T " +
|
||||
$"terrain={bp.terrain.Count} platforms={bp.platforms.Count} spawnPoints={bp.spawnPoints.Count}",
|
||||
EditorStyles.miniLabel);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8af192fa7e1b51145bdd764510b99fe2
|
||||
|
|
@ -0,0 +1,430 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Tilemaps;
|
||||
using EerieVillage.Map.Data;
|
||||
|
||||
namespace EerieVillage.Map.EditorScripts
|
||||
{
|
||||
/// <summary>
|
||||
/// BT13-Dev-Map — 맵 리소스 등록 EditorWindow (전면 재작성 2026-05-19).
|
||||
/// PD 지시 (2026-05-19): 기존 A~F 섹션 전부 폐기. 신규 4 섹션:
|
||||
/// A. 배경 이미지 등록 (Sprite ObjectField + Preview + Set/Clear)
|
||||
/// B. 지면 타일 9방향 (3x3 grid · Sprite 드래그 시 Tile 자동 생성)
|
||||
/// C. 공중 발판 2종 (platformShort·platformLong · Sprite 드래그 시 Tile 자동 생성)
|
||||
/// D. 게임 오브젝트 (Player·Monster List ReorderableList·Boss)
|
||||
/// 모든 weight·tags·이름 입력 제거.
|
||||
/// 이전 본문 백업: 공유/개발팀_백업/EerieVillage/BT13-Dev-Map_20260519/MapResourceRegistryWindow.bak_20260519_0050.cs
|
||||
/// 메뉴: EerieVillage/Map/Resource Registry
|
||||
/// </summary>
|
||||
public class MapResourceRegistryWindow : EditorWindow
|
||||
{
|
||||
const string CATALOG_PATH = "Assets/Resources/Map/MapResourceCatalog.asset";
|
||||
const string TILES_AUTO_PATH = "Assets/Tiles/Auto";
|
||||
|
||||
MapResourceCatalog _catalog;
|
||||
Vector2 _scrollPos;
|
||||
SerializedObject _serialized;
|
||||
ReorderableList _monsterList;
|
||||
|
||||
[MenuItem("EerieVillage/Map/Resource Registry")]
|
||||
public static void Open()
|
||||
{
|
||||
var window = GetWindow<MapResourceRegistryWindow>("Map Resource Registry");
|
||||
window.minSize = new Vector2(520, 700);
|
||||
window.Show();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
LoadCatalog();
|
||||
}
|
||||
|
||||
void LoadCatalog()
|
||||
{
|
||||
_catalog = AssetDatabase.LoadAssetAtPath<MapResourceCatalog>(CATALOG_PATH);
|
||||
if (_catalog != null)
|
||||
{
|
||||
_serialized = new SerializedObject(_catalog);
|
||||
SetupMonsterList();
|
||||
}
|
||||
else
|
||||
{
|
||||
_serialized = null;
|
||||
_monsterList = null;
|
||||
}
|
||||
}
|
||||
|
||||
void SetupMonsterList()
|
||||
{
|
||||
var monstersProp = _serialized.FindProperty("monsters");
|
||||
_monsterList = new ReorderableList(_serialized, monstersProp, true, true, true, true);
|
||||
_monsterList.drawHeaderCallback = rect =>
|
||||
{
|
||||
EditorGUI.LabelField(rect, "Monsters (random pick · 추가·삭제·재정렬 가능)");
|
||||
};
|
||||
_monsterList.drawElementCallback = (rect, index, active, focused) =>
|
||||
{
|
||||
var element = monstersProp.GetArrayElementAtIndex(index);
|
||||
rect.y += 2;
|
||||
rect.height = EditorGUIUtility.singleLineHeight;
|
||||
EditorGUI.PropertyField(rect, element, new GUIContent($"[{index}]"));
|
||||
};
|
||||
_monsterList.elementHeight = EditorGUIUtility.singleLineHeight + 6;
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
_scrollPos = EditorGUILayout.BeginScrollView(_scrollPos);
|
||||
|
||||
DrawHeader();
|
||||
|
||||
if (_catalog == null)
|
||||
{
|
||||
EditorGUILayout.HelpBox(
|
||||
"MapResourceCatalog 미발견.\n" +
|
||||
"Assets/Resources/Map/MapResourceCatalog.asset 가 존재하지 않습니다.\n" +
|
||||
"메뉴: EerieVillage/Map/Bootstrap Placeholder Assets 1회 실행으로 자동 생성.",
|
||||
MessageType.Warning);
|
||||
|
||||
if (GUILayout.Button("Bootstrap 메뉴 실행 (MapAssetBootstrap)", GUILayout.Height(28)))
|
||||
{
|
||||
EditorApplication.ExecuteMenuItem("EerieVillage/Map/Bootstrap Placeholder Assets");
|
||||
LoadCatalog();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Catalog 다시 로드", GUILayout.Height(24)))
|
||||
{
|
||||
LoadCatalog();
|
||||
}
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
return;
|
||||
}
|
||||
|
||||
_serialized.Update();
|
||||
|
||||
DrawSectionA_BackgroundSprite();
|
||||
EditorGUILayout.Space(12);
|
||||
|
||||
DrawSectionB_GroundTiles9Grid();
|
||||
EditorGUILayout.Space(12);
|
||||
|
||||
DrawSectionC_AirPlatforms();
|
||||
EditorGUILayout.Space(12);
|
||||
|
||||
DrawSectionD_GameObjects();
|
||||
EditorGUILayout.Space(8);
|
||||
|
||||
DrawFooter();
|
||||
|
||||
_serialized.ApplyModifiedProperties();
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
void DrawHeader()
|
||||
{
|
||||
EditorGUILayout.LabelField("Map Resource Registry", EditorStyles.boldLabel);
|
||||
EditorGUILayout.LabelField(
|
||||
"PD 가 4 섹션 (배경 이미지·지면 9방향·공중 발판 2종·게임 오브젝트) 등록.",
|
||||
EditorStyles.miniLabel);
|
||||
EditorGUILayout.LabelField(
|
||||
$"Catalog: {(_catalog == null ? "<미발견>" : CATALOG_PATH)}",
|
||||
EditorStyles.miniLabel);
|
||||
EditorGUILayout.Space(6);
|
||||
}
|
||||
|
||||
void DrawFooter()
|
||||
{
|
||||
EditorGUILayout.Space(4);
|
||||
if (GUILayout.Button("Catalog 다시 로드 (Refresh)", GUILayout.Height(22)))
|
||||
{
|
||||
LoadCatalog();
|
||||
}
|
||||
if (GUILayout.Button("Catalog Inspector 에서 보기", GUILayout.Height(22)))
|
||||
{
|
||||
Selection.activeObject = _catalog;
|
||||
EditorGUIUtility.PingObject(_catalog);
|
||||
}
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// A. 배경 이미지 등록
|
||||
// ====================================================================
|
||||
void DrawSectionA_BackgroundSprite()
|
||||
{
|
||||
EditorGUILayout.LabelField("A. 배경 이미지 등록", EditorStyles.boldLabel);
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.HelpBox(
|
||||
"맵 최하위 레이어에 SpriteRenderer.drawMode=Tiled · sortingOrder=-1000 으로 반복 배치.",
|
||||
MessageType.Info);
|
||||
|
||||
var newSprite = (Sprite)EditorGUILayout.ObjectField(
|
||||
"Background Sprite", _catalog.backgroundSprite, typeof(Sprite), false);
|
||||
if (newSprite != _catalog.backgroundSprite)
|
||||
{
|
||||
Undo.RecordObject(_catalog, "Set backgroundSprite");
|
||||
_catalog.backgroundSprite = newSprite;
|
||||
EditorUtility.SetDirty(_catalog);
|
||||
AssetDatabase.SaveAssets();
|
||||
Debug.Log($"[MapResourceRegistry] backgroundSprite ← {(newSprite == null ? "null" : newSprite.name)}");
|
||||
}
|
||||
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
if (GUILayout.Button("Clear", GUILayout.Width(80)))
|
||||
{
|
||||
Undo.RecordObject(_catalog, "Clear backgroundSprite");
|
||||
_catalog.backgroundSprite = null;
|
||||
EditorUtility.SetDirty(_catalog);
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
}
|
||||
|
||||
if (_catalog.backgroundSprite != null)
|
||||
{
|
||||
var tex = _catalog.backgroundSprite.texture;
|
||||
if (tex != null)
|
||||
{
|
||||
EditorGUILayout.Space(2);
|
||||
using (new EditorGUILayout.HorizontalScope(GUI.skin.box))
|
||||
{
|
||||
var previewRect = GUILayoutUtility.GetRect(120, 60, GUILayout.Width(120), GUILayout.Height(60));
|
||||
EditorGUI.DrawPreviewTexture(previewRect, tex, null, ScaleMode.ScaleToFit);
|
||||
using (new EditorGUILayout.VerticalScope())
|
||||
{
|
||||
EditorGUILayout.LabelField($"name: {_catalog.backgroundSprite.name}");
|
||||
var r = _catalog.backgroundSprite.rect;
|
||||
EditorGUILayout.LabelField($"size: {r.width:F0} × {r.height:F0} px");
|
||||
EditorGUILayout.LabelField($"PPU: {_catalog.backgroundSprite.pixelsPerUnit:F0}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// B. 지면 타일 9방향 (3x3 grid)
|
||||
// ====================================================================
|
||||
void DrawSectionB_GroundTiles9Grid()
|
||||
{
|
||||
EditorGUILayout.LabelField("B. 지면 타일 등록 (9방향 3x3 grid)", EditorStyles.boldLabel);
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.HelpBox(
|
||||
"각 슬롯에 Sprite 드래그 → Tile asset 자동 생성 (Assets/Tiles/Auto/Ground_<position>.asset · m_ColliderType=Sprite) + Catalog 자동 link.\n" +
|
||||
"이번 임시 작업 — 센터(Center) 1종만 사용. 향후 9-slice 자동 분기 후속 안건.",
|
||||
MessageType.Info);
|
||||
|
||||
// Row 1
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
DrawGroundSlot("TopLeft", "groundTopLeft");
|
||||
DrawGroundSlot("Top", "groundTop");
|
||||
DrawGroundSlot("TopRight", "groundTopRight");
|
||||
}
|
||||
// Row 2
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
DrawGroundSlot("Left", "groundLeft");
|
||||
DrawGroundSlot("Center", "groundCenter");
|
||||
DrawGroundSlot("Right", "groundRight");
|
||||
}
|
||||
// Row 3
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
DrawGroundSlot("BottomLeft", "groundBottomLeft");
|
||||
DrawGroundSlot("Bottom", "groundBottom");
|
||||
DrawGroundSlot("BottomRight", "groundBottomRight");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawGroundSlot(string label, string propName)
|
||||
{
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box, GUILayout.Width(155)))
|
||||
{
|
||||
EditorGUILayout.LabelField(label, EditorStyles.miniBoldLabel);
|
||||
var prop = _serialized.FindProperty(propName);
|
||||
TileBase current = prop.objectReferenceValue as TileBase;
|
||||
DrawSpriteOrTileSlot(prop, $"Ground_{label}", current);
|
||||
}
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// C. 공중 발판 2종
|
||||
// ====================================================================
|
||||
void DrawSectionC_AirPlatforms()
|
||||
{
|
||||
EditorGUILayout.LabelField("C. 공중 발판 등록 (2종)", EditorStyles.boldLabel);
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.HelpBox(
|
||||
"platformShort = 짧은 발판 (AirGround_Type1 권장) · platformLong = 넓고 긴 발판 (AirGround_Type2 권장).\n" +
|
||||
"Sprite 드래그 시 Tile asset 자동 생성 + Catalog link.",
|
||||
MessageType.Info);
|
||||
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.LabelField("platformShort", EditorStyles.miniBoldLabel);
|
||||
var prop = _serialized.FindProperty("platformShort");
|
||||
DrawSpriteOrTileSlot(prop, "Platform_Short", prop.objectReferenceValue as TileBase);
|
||||
}
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.LabelField("platformLong", EditorStyles.miniBoldLabel);
|
||||
var prop = _serialized.FindProperty("platformLong");
|
||||
DrawSpriteOrTileSlot(prop, "Platform_Long", prop.objectReferenceValue as TileBase);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// D. 게임 오브젝트 (Player·Monsters·Boss)
|
||||
// ====================================================================
|
||||
void DrawSectionD_GameObjects()
|
||||
{
|
||||
EditorGUILayout.LabelField("D. 게임 오브젝트 등록", EditorStyles.boldLabel);
|
||||
|
||||
// Player
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.LabelField("Player Prefab", EditorStyles.miniBoldLabel);
|
||||
var prop = _serialized.FindProperty("playerPrefab");
|
||||
EditorGUILayout.PropertyField(prop, GUIContent.none);
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
if (GUILayout.Button("Clear", GUILayout.Width(80)))
|
||||
{
|
||||
prop.objectReferenceValue = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
|
||||
// Monsters (ReorderableList)
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
if (_monsterList != null)
|
||||
{
|
||||
_monsterList.DoLayoutList();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.HelpBox("monster list 초기화 실패 — Catalog 다시 로드.", MessageType.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
|
||||
// Boss
|
||||
using (new EditorGUILayout.VerticalScope(GUI.skin.box))
|
||||
{
|
||||
EditorGUILayout.LabelField("Boss Prefab", EditorStyles.miniBoldLabel);
|
||||
var prop = _serialized.FindProperty("bossPrefab");
|
||||
EditorGUILayout.PropertyField(prop, GUIContent.none);
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
if (GUILayout.Button("Clear", GUILayout.Width(80)))
|
||||
{
|
||||
prop.objectReferenceValue = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// 공통 — Sprite 드래그 시 Tile asset 자동 생성·갱신
|
||||
// ====================================================================
|
||||
/// <summary>
|
||||
/// 슬롯에 Sprite 또는 TileBase 드래그 가능.
|
||||
/// - Sprite 드래그: Assets/Tiles/Auto/{tileBaseName}.asset 자동 생성 (m_ColliderType=Sprite) + Catalog link.
|
||||
/// - TileBase 직접 드래그: 그대로 link.
|
||||
/// - null: link 해제.
|
||||
/// </summary>
|
||||
void DrawSpriteOrTileSlot(SerializedProperty prop, string tileBaseName, TileBase currentTile)
|
||||
{
|
||||
// 현재 Tile 의 sprite 노출 — Sprite 드래그를 우선 받음
|
||||
Sprite currentSprite = null;
|
||||
if (currentTile is Tile t) currentSprite = t.sprite;
|
||||
|
||||
// ObjectField — Sprite·Tile 모두 받기 위해 Object 받기
|
||||
var dropped = EditorGUILayout.ObjectField(
|
||||
"Sprite", currentSprite, typeof(Sprite), false) as Sprite;
|
||||
|
||||
if (dropped != currentSprite)
|
||||
{
|
||||
if (dropped == null)
|
||||
{
|
||||
// 슬롯 비우기
|
||||
prop.objectReferenceValue = null;
|
||||
_serialized.ApplyModifiedProperties();
|
||||
Debug.Log($"[MapResourceRegistry] {prop.name} ← null");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Sprite 드래그 → Tile 자동 생성·갱신
|
||||
EnsureFolder(TILES_AUTO_PATH);
|
||||
string tilePath = $"{TILES_AUTO_PATH}/{tileBaseName}.asset";
|
||||
var existing = AssetDatabase.LoadAssetAtPath<TileBase>(tilePath);
|
||||
Tile tile;
|
||||
if (existing is Tile et)
|
||||
{
|
||||
tile = et;
|
||||
tile.sprite = dropped;
|
||||
tile.colliderType = Tile.ColliderType.Sprite;
|
||||
EditorUtility.SetDirty(tile);
|
||||
Debug.Log($"[MapResourceRegistry] Tile 갱신 — {tilePath} (sprite={dropped.name})");
|
||||
}
|
||||
else
|
||||
{
|
||||
tile = ScriptableObject.CreateInstance<Tile>();
|
||||
tile.sprite = dropped;
|
||||
tile.colliderType = Tile.ColliderType.Sprite;
|
||||
AssetDatabase.CreateAsset(tile, tilePath);
|
||||
Debug.Log($"[MapResourceRegistry] Tile 생성 — {tilePath} (sprite={dropped.name} · m_ColliderType=Sprite)");
|
||||
}
|
||||
AssetDatabase.SaveAssets();
|
||||
prop.objectReferenceValue = tile;
|
||||
_serialized.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
|
||||
// 현재 link 상태 노출
|
||||
if (currentTile != null)
|
||||
{
|
||||
EditorGUILayout.LabelField($"Tile: {currentTile.name}", EditorStyles.miniLabel);
|
||||
if (currentSprite != null && currentSprite.texture != null)
|
||||
{
|
||||
var rect = GUILayoutUtility.GetRect(140, 60, GUILayout.Width(140), GUILayout.Height(60));
|
||||
EditorGUI.DrawPreviewTexture(rect, currentSprite.texture, null, ScaleMode.ScaleToFit);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var oldColor = GUI.color;
|
||||
GUI.color = new Color(1f, 0.6f, 0.4f);
|
||||
EditorGUILayout.LabelField("X 미등록", EditorStyles.miniLabel);
|
||||
GUI.color = oldColor;
|
||||
}
|
||||
}
|
||||
|
||||
static void EnsureFolder(string path)
|
||||
{
|
||||
if (AssetDatabase.IsValidFolder(path)) return;
|
||||
string parent = Path.GetDirectoryName(path).Replace('\\', '/');
|
||||
string folderName = Path.GetFileName(path);
|
||||
if (!AssetDatabase.IsValidFolder(parent)) EnsureFolder(parent);
|
||||
AssetDatabase.CreateFolder(parent, folderName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 959286392398d9f4ca38afac320b80e3
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2bf7857344093c04b861f49566bc4a9b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3d4b1fcd183f35d47af7452f4a7c9f65
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 71d65d1bcd3a34b48b993b5f524cd162
|
||||
guid: b3376486bb2c8c949ba7051b0d8c3993
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f98c7f0acd24324408d00e1b68eb92c2
|
||||
guid: a724a123bacdcd14fad9a46bb880cb79
|
||||
timeCreated: 1530790022
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f4a1ccd71d0aa4281b3a09082d9e8ece
|
||||
guid: c4cce04d15fdeee4cbc25720fa9c5a0e
|
||||
timeCreated: 18446744011573954816
|
||||
NativeFormatImporter:
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 7
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
@ -32,7 +32,8 @@ Material:
|
|||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses: []
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
|
|
@ -110,3 +111,4 @@ Material:
|
|||
- _Color: {r: 0.12452827, g: 0.12452827, b: 0.12452827, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 568971491d5f1f541a463e58c9393f66
|
||||
guid: 54c77e311a4dbac40a539e90f7f45c63
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cc1d9384bbe28f94787973c74a9bfb36
|
||||
guid: e62f635b344a48149baeec3dac1bfdad
|
||||
timeCreated: 1528273568
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: eb64212c555b96f43a876677e2424687
|
||||
guid: f2726103b70025b43a3248be14180582
|
||||
timeCreated: 1531814411
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f4aaf12f04296854bb4155970327d299
|
||||
guid: 8a839cdf53474f9498ec7539297f60f0
|
||||
timeCreated: 1514470998
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e8de63b6192bf714dbe93bbb1131c2c7
|
||||
guid: 5fe6f3a1b9c954a40a2757cf0576b53a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0256370d00cc5034e98d15467ed59ba5
|
||||
guid: c7c053ae2ee016d47b36cb2c5a02545c
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 192cd2224047f8c439068909fa5fbad5
|
||||
guid: 48781f006801bc440a29a19b5930f026
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7bd36063264fe3b4faa6aa3d59e7f988
|
||||
guid: eb3212f39aff044439821bf25e7a6cb0
|
||||
ModelImporter:
|
||||
serializedVersion: 22
|
||||
fileIDToRecycleName:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3a0abbc3c740e7545be9e366ccc47a27
|
||||
guid: f208267c71d13aa4c89ab54fe0e7b880
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b5dce77a4189c7044aaeb41c5050fa77
|
||||
guid: 76b664c8253e2b8439d5b56c899a1841
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 822248faf0ca5c04c86b962496cb40c7
|
||||
guid: 0c35c3f584e4f224db4fbc724689e3a9
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dd18a4ee3af3a3244bffb246f8f20e63
|
||||
guid: 204316d44beb8e246ab1b41b542c60a6
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 63159ad6ffca56c448548dbed4985af6
|
||||
guid: d34ddb7aa40d3ab40886f91e59238458
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2b02ff58d507c6a478f8b1a00964a56d
|
||||
guid: 13acc5a3e4343474295f4cbc5f7cf84a
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8533bfb72be08ec44943f29d970570a5
|
||||
guid: f20a6c24791cfa94a9cbc4f7235ab710
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4bd566bde80d4c2438d179872ef27526
|
||||
guid: 403adfa6763d612449337563621bf462
|
||||
timeCreated: 1529553333
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c89bef1bada1e49b7b72a50a8bcdf91b
|
||||
guid: 14dd1e3bc5663d3439cd41cd89b941e8
|
||||
timeCreated: 1543829330
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1746d72c8cbcebf4ebe6ab93898e2f61
|
||||
guid: 09ca3a077aed26b42b55e3af69e7d624
|
||||
timeCreated: 1505817642
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d9a770fddc0276740b642075488dc8ac
|
||||
guid: 8daa0d135e4dcf445be89345ed832ff3
|
||||
timeCreated: 1505817734
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b4e1e739d65ec7f41bc99511a1f33bcf
|
||||
guid: 002c71b1c4548be4ab6f3c123489de9d
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c7edf7d59da10604f9da581f1029c4ca
|
||||
guid: 637e3045b302ee144b84712125555bee
|
||||
timeCreated: 1464828100
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 37f08e2d42111ba418a19802ba084f06
|
||||
guid: ed4ed2dbc2c273342b63e32ce3f2f463
|
||||
timeCreated: 1531121692
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 92de6f65b757cf64fbfdc94f0c25cd7f
|
||||
guid: bf9365d83e8d9fe4797e67e9eee922cb
|
||||
timeCreated: 1464828248
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 835aab56838460d4180eb7bc9a9b3f0e
|
||||
guid: f30d1d3eb70a2e74c933028f946661c7
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b78a20086966d6c4fa19c43a4674af8a
|
||||
guid: 5121d0b73224fca4fa65f26a25c51a15
|
||||
timeCreated: 1522674666
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 410a79895a0febf44b657b8fa74d4922
|
||||
guid: 0029283e12adaed4ea5d699668468dae
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1c4f4f096dda2cf4d8cb01d2c1f5f706
|
||||
guid: 8e5218b6af9a0c74db40c3b3bbf0ae43
|
||||
timeCreated: 1522045411
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 67e9c9d867f74544a80eda48f90816df
|
||||
guid: 2d871282f89e8154d9159060b1a2855e
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 85e4677c5b37d524f9aa1eaf5dd4a1b7
|
||||
guid: c76c86ab585e3964d82112679da70749
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f0e51d78cba9a154f9d97efb4b55654c
|
||||
guid: ac4c2737f4939534ea4d3485a7000a16
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0b512af7d1c07bc4dae89d450c8ef27f
|
||||
guid: 6db8c43078efa2e41afd950bfd6228dd
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e68b3737527537f46a9b90892f32ddf7
|
||||
guid: 210a1368f0b99d249940f838f8662247
|
||||
timeCreated: 1464828643
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b2e3075485469244c8c2313d89c34e61
|
||||
guid: 8d55bfccd3b57404e82eab0684dd24be
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 776a57311c77b0c439ac400795a24a27
|
||||
guid: d9d05bf7f12236b4597cd5ca5238dc87
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 457b9ceb7f1a16b49a6791da0b2856e4
|
||||
guid: 5685af46c34bd284a9d751166f428af3
|
||||
timeCreated: 1464829120
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f4e89cbfb3be69745b85300bb2b462e7
|
||||
guid: e9ed381e84a17ad49b2a7a1852bf55f7
|
||||
timeCreated: 1441666605
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7d521297609a99b418f36421dbfbb98c
|
||||
guid: 4cff45e8937d23246b5c4be0ac68f1a0
|
||||
timeCreated: 1531201401
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9f0ddaad882237c4fa867fa695a45db1
|
||||
guid: 1da0ea3fee22aaa4499f0420c0921582
|
||||
timeCreated: 1534230711
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6d8be8aeddf0d1b47849eb4e991c6ae9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f2719d217b2eec74d98264192c5e9fbb
|
||||
guid: c40021a6ebfe412488bf228f0765415f
|
||||
timeCreated: 1464829130
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8623353218eae894189266caf1535fb4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 61474e4c9a4145445b7a5150eac96717
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cc92956ec8fad9b4c8da6746e2748afa
|
||||
guid: ad636a248aab5e541bc9885b6a3a9413
|
||||
timeCreated: 1440568938
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b84aa919c49ac494eac6bfc0c791a24c
|
||||
guid: 08d70fa15cfa0864a9cd5b9b4a7a5dc1
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 776677ab3818fb249adaca05f4e04545
|
||||
guid: ecd4093aec112df4589e36b928727ade
|
||||
timeCreated: 1471532950
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fdfe835ba6884a24e8c47b7c8b0b7a55
|
||||
guid: 31ddf8d4c74e8ec498dc1ca37b089dfc
|
||||
timeCreated: 1463388114
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 151e4fe2c46111e4ead55f057bdb2b66
|
||||
guid: c5599b82c4b894e449961adf317bbf4a
|
||||
timeCreated: 1552654306
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 55ed672b4453aeb429e17cdb1ec07b1f
|
||||
guid: 38be5283ff48800488dee68bf90c754b
|
||||
timeCreated: 1506335341
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 339de626205bebb4ebee1420cca2a728
|
||||
guid: f0930b93cdbfe2944a07e2c9d3ebd55a
|
||||
timeCreated: 1522674425
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 460addb3f248de24eb165c5e1513d342
|
||||
guid: 808dc378f5295d44d8f155c6c5d6b19b
|
||||
timeCreated: 1528879841
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7675222f32c048d4da09233a28424c0e
|
||||
guid: 1328f5b564de22440846b98a80e3dcd9
|
||||
timeCreated: 1441608340
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d90b75babcb739a48926ea25834806a4
|
||||
guid: db3b1f56bee4ea341a97da86bab3adf9
|
||||
timeCreated: 1435048583
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 59eb7e9ee3013e24d83c99315b180338
|
||||
guid: b6900799cfdf9dc4a9b1277aab808170
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 19cb2eefc0f013446af57c106690ebb2
|
||||
guid: 436ea8a713b3fa44ca68bf44bf761906
|
||||
timeCreated: 1521613432
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 143393cf14b49c84495ce4b041979228
|
||||
guid: 574f77b4fe6e08d4b8002af4735ccce7
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9fd5ed76f3a2b5a44b80507ef637e92b
|
||||
guid: f810c51413988aa4789b90a7cab48651
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 024bce68c9f9c72428ebdecdc97a0fd6
|
||||
guid: 3b9252067bdd41d4bbb98f82cb1b788d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d8d1e5fa6afc8774e8b15b4d64c4bb33
|
||||
guid: 6fee0b6b80dd9e141bca9d9fcf4690c3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bbef64c5e7b6cdb4e8a54fba33e67180
|
||||
guid: 4d9ae9a6b7469204f86f0b1308509eb6
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 18483de19c384234db28ddf753dd5c0d
|
||||
guid: 11c9da044bf820844b51a8302a88f9d2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c1c917793988ab244a798a294b9bc9b7
|
||||
guid: 0799503af0bdc1e43a3458c48b4ed59d
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d1d7f97475c6314408022bef586f5de7
|
||||
guid: ec4cde1789ee3cd449d95b33dde9fb75
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4353d61d0f3b78746bc215f0db8cc961
|
||||
guid: 87ffc67e8b561ca48b2e5efc7b537fce
|
||||
ModelImporter:
|
||||
serializedVersion: 22200
|
||||
internalIDToNameTable:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 58c94ea5674ceeb408440c697ec8bc1f
|
||||
guid: d3376e2097eb96d4fbdebf1f89c5570a
|
||||
timeCreated: 1543062534
|
||||
licenseType: Store
|
||||
ModelImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a90dec2bfa297664b9dc73f25115dee7
|
||||
guid: 074c87dba9258034d9c9e5629e41a9a6
|
||||
timeCreated: 1516965496
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cec52caea64bcb049858f7bb75aa8308
|
||||
guid: 5d917d521004bda488da935e50070312
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 00dbd483fe464984885726f213277fe6
|
||||
guid: f1c3d9c062304b446b44e43383b47824
|
||||
timeCreated: 1543829334
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 04a9c26f07f68f644977fc3c509e6389
|
||||
guid: 5ba4e937c3865264bacfbd1b90b2e9f3
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e21dde067362ceb409fd29faa2f6ff5f
|
||||
guid: 360e829eb9566524aa0538881501071f
|
||||
timeCreated: 1464828109
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f6b1b13d1b38afa4da8448116e0e563b
|
||||
guid: bd3308189704dc849841e7e09f9638e9
|
||||
timeCreated: 1531896412
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5d44ea4e18b650a4888b42a3c6cacf15
|
||||
guid: 3b45278c19e83b0449cad91e2273594a
|
||||
timeCreated: 1531896342
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 69c4a6898925c474c847db66695e96e6
|
||||
guid: 8758ddf60ab3af64fa2a4524e5ac5cf5
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1f256e8a66ea42c4ea6aa1c16a11c9e7
|
||||
guid: fafb9226afecf6a48937601f55777a42
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cfe985002915cc14d9f8a13a2f98f53f
|
||||
guid: 8a40fd793c45aaa4fb19c54d98ce6bdc
|
||||
timeCreated: 1506353551
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b51ee46f15552054686c64a0c57efb62
|
||||
guid: 7815aab3621b32243ab4b23f4090f9bf
|
||||
timeCreated: 1568635602
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9bbbb7232e15acc439e708daec1f8cda
|
||||
guid: 89f54c30511aaaa4dbf305fb39242e2a
|
||||
timeCreated: 1506353225
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 79f635bbab7e83847928045650ae3013
|
||||
guid: e7dc56b447340134196f13fc09a32c93
|
||||
timeCreated: 1528879545
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 06bcc7d614b027c4f92391ff62accedc
|
||||
guid: 07a250b60d7321549bc2430f68ed0f1f
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9ced0243694faa84a89b568344b3aada
|
||||
guid: 69a309ba58fd96743b56e185a49f3694
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 67c13c627b994174d914b6901d6696e9
|
||||
guid: 2c690d8e7277f14488f25a52b11faa52
|
||||
timeCreated: 1464827450
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b00107d46b0627a4bb303f4cb1bd2d60
|
||||
guid: bce9e4f1baf902440831e672fcc423ba
|
||||
timeCreated: 1464827779
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3834faa1335fb3941a824e384077d049
|
||||
guid: e89bea1c3289d0846a17f5d74e1787bb
|
||||
timeCreated: 1464827470
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b469d5ae92b18224db09c30832eb952c
|
||||
guid: 0ca607f096e3ff24aaea3a373f468868
|
||||
timeCreated: 1526548765
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f15657c4945f8e1498b1883d64206931
|
||||
guid: f384f89c71718174abd5899e63065a98
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bb7921820dd8ad444a16f22bbe68658b
|
||||
guid: 23767a9638f3d224b9ce36cba2b1c8ed
|
||||
timeCreated: 1531812331
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a4a404c5126761d44b95d25c52dfdc32
|
||||
guid: 4950fa6951e96ae4f8301d2f434aa0c1
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue