3.4 KiB
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:
- Create
NewTypePrefabSetup.csimplementingIPrefabSetup - Register in
CSVToSOImporter.RegisterPrefabSetups() - 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
- Designer edits CSV:
GameData/Monster.csv - Imports data:
Tools > Data > Import All CSV - Importer:
- Reads CSV rows
- Creates Monster101.asset (SO)
- Clones MonsterTemplate.prefab
- Calls MonsterPrefabSetup.SetupPrefab()
- Saves as Monster101.prefab
- MonsterPrefabSetup:
- Links SO to MonsterDataComponent
- Applies FBX model
- Sets Animator controller
- Result: Complete prefab ready to use!
Troubleshooting
"No prefab setup found for [Type]"
- Create
TypePrefabSetup.csimplementingIPrefabSetup - Register it in
RegisterPrefabSetups()
"No template found for [Type]"
- Create
[Type]Template.prefabusingTools > 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