Files
Northbound/GENERIC_IMPORTER.md
dal4segno 2593b6dd37 데이터 파이프라인 개선 및 포탈 로직 생성
csv import 시 자동으로 완전한 프리팹이 생성될 수 있도록 함.
2026-02-01 00:29:22 +09:00

3.4 KiB

Generic CSV Importer System

Overview

The CSV importer now works with any data type, not just monsters! Each data type has its own prefab setup logic.

How It Works

CSV File (any type)
    ↓ Importer
ScriptableObject (data)
    ↓ Prefab Setup
Prefab (with components, models, etc.)

Architecture

1. IPrefabSetup Interface

public interface IPrefabSetup
{
    string GetTemplateName();           // Which template to use
    void SetupPrefab(GameObject prefab, ScriptableObject data);  // How to setup
}

2. Prefab Setup Handlers

Each data type has its own setup class:

MonsterPrefabSetup.cs

  • Handles MonsterData
  • Applies FBX models
  • Sets Animator controllers
  • Updates MonsterDataComponent

To add new types:

  1. Create NewTypePrefabSetup.cs implementing IPrefabSetup
  2. Register in CSVToSOImporter.RegisterPrefabSetups()
  3. Done!

3. Templates

Each data type has its own template:

Assets/Data/Templates/
├── MonsterTemplate.prefab      → For monsters
├── TowerTemplate.prefab         → For towers (to create)
└── PlayerTemplate.prefab        → For players (to create)

Templates define:

  • Required components
  • Component defaults
  • Layer settings
  • etc.

Adding New Data Types

Step 1: Create Template

// TemplateCreator.cs
Tools > Data > Create [TypeName] Template

Step 2: Create Setup Handler

// TowerPrefabSetup.cs
using UnityEditor;
using UnityEngine;

namespace Northbound.Editor
{
    public class TowerPrefabSetup : IPrefabSetup
    {
        public string GetTemplateName()
        {
            return "TowerTemplate";
        }

        public void SetupPrefab(GameObject prefab, ScriptableObject data)
        {
            // Your custom logic here
            // e.g., add models, apply stats, etc.
            Debug.Log($"[TowerPrefabSetup] Setting up {data.name}");
        }
    }
}

Step 3: Register Handler

// CSVToSOImporter.cs - RegisterPrefabSetups()
prefabSetups["Tower"] = new TowerPrefabSetup();

Step 4: Create CSV

GameData/Tower.csv
id,name,cost,...
101,ArrowTower,50,...

Step 5: Import

Tools > Data > Import All CSV

Done! Prefabs auto-generated for Towers.

Benefits

Generic: Works for ANY data type Extensible: Easy to add new types Type-Safe: Each type has its own logic Maintainable: No monster-specific code in importer Automated: CSV → SO → Prefab in one click

Example: Complete Flow for Monster

  1. Designer edits CSV: GameData/Monster.csv
  2. Imports data: Tools > Data > Import All CSV
  3. Importer:
    • Reads CSV rows
    • Creates Monster101.asset (SO)
    • Clones MonsterTemplate.prefab
    • Calls MonsterPrefabSetup.SetupPrefab()
    • Saves as Monster101.prefab
  4. MonsterPrefabSetup:
    • Links SO to MonsterDataComponent
    • Applies FBX model
    • Sets Animator controller
  5. Result: Complete prefab ready to use!

Troubleshooting

"No prefab setup found for [Type]"

  • Create TypePrefabSetup.cs implementing IPrefabSetup
  • Register it in RegisterPrefabSetups()

"No template found for [Type]"

  • Create [Type]Template.prefab using Tools > Data > Create Template
  • Ensure name matches GetTemplateName() return value

Prefabs not updating

  • Check that your setup logic is in SetupPrefab()
  • Verify SO fields are being read correctly