Features: - Export DataTable, Blueprint, AnimMontage, CurveTable to JSON - INI-based configuration via UDeveloperSettings - Comprehensive Blueprint EventGraph extraction - Enhanced AnimMontage with CustomProperties from Notifies - Project Settings integration (Edit -> Project Settings -> Plugins) - Tools menu integration (Tools -> WorldStalker -> Export Assets to JSON) Files added: - AssetExportSettings.h/cpp - UDeveloperSettings configuration class - AssetExporterToJSON.h/cpp - Core export implementation - README.md - Comprehensive feature documentation - MERGE_INSTRUCTIONS.md - Integration guide for existing files Unreal Engine 5.5.4 compatible
9.8 KiB
Asset Export to JSON - Unreal Engine Editor Extension
Overview
This editor extension provides a comprehensive asset export system that converts Unreal Engine assets to JSON format for LLM-based combat balance analysis. The feature extracts detailed data from various asset types to create text-based documentation that can be analyzed by AI systems.
Purpose: Enable comprehensive combat balance analysis by providing structured, text-based representations of game assets suitable for Large Language Model (LLM) processing.
Supported Asset Types:
- DataTable - Complete row and column data
- Blueprint - Variables, functions, components, event graphs with node connections
- AnimMontage - Sections, notifies, custom properties, slot animations
- CurveTable - Key-value curve data (RichCurves and SimpleCurves)
Features
Configuration-Based Export
- Project Settings Integration: Configure export paths in
Edit → Project Settings → Plugins → Asset Export to JSON - Persistent Configuration: Settings saved to
Config/DefaultEditor.inifor team sharing via SVN/Git - Multi-Folder Support: Export from multiple folder paths with single click
- Asset Type Filtering: Enable/disable specific asset types via settings
Comprehensive Data Extraction
Blueprint Export
- Variables with types and default values
- Functions with inputs/outputs
- Component hierarchy
- Event Graphs: Complete node graph with:
- Node types, titles, positions, comments
- Pin types, directions, default values
- Connection graph between pins
- Node-specific properties
AnimMontage Export
- Sections with start/end times
- Slot animation tracks with segments
- Notify Events: Complete notify data including:
- Notify type and trigger times
- Custom properties from notify classes
- Blend in/out settings
- Track indices and sync markers
CurveTable Export
- Support for both RichCurves and SimpleCurves
- Key data with time, value, tangent information
- Curve interpolation modes
Output Management
- Timestamped Exports: Optional timestamped subfolders for export history
- Type-Separated Files: Separate JSON files per asset type (DataTable.json, Blueprint.json, etc.)
- Pretty-Printed JSON: Human-readable formatting with indentation
- Duplicate Detection: Prevents duplicate exports when folders overlap
Installation
1. File Structure
Copy the following files to your project:
New Files (copy to Source/WorldStalkerEditor/Utility/):
AssetExportSettings.h
AssetExportSettings.cpp
AssetExporterToJSON.h
AssetExporterToJSON.cpp
Modified Files (merge changes manually):
WorldStalkerEditor.h- See MERGE_INSTRUCTIONS.mdWorldStalkerEditor.cpp- See MERGE_INSTRUCTIONS.md
2. Build Configuration
Add to your WorldStalkerEditor.Build.cs:
PublicDependencyModuleNames.AddRange(new string[] {
"AssetRegistry",
"Json",
"JsonUtilities"
});
PrivateDependencyModuleNames.AddRange(new string[] {
"UnrealEd",
"Engine",
"Slate",
"SlateCore",
"ToolMenus",
"DeveloperSettings"
});
3. Rebuild Project
# Generate Visual Studio project files
GenerateVSProjectFile.bat
# Build the editor module
# Or rebuild from Visual Studio
Configuration
Step 1: Open Project Settings
Navigate to: Edit → Project Settings → Plugins → Asset Export to JSON
Step 2: Configure Export Paths
Export Folder Paths (Array):
- Add folder paths relative to
/Game/content directory - Example paths:
Blueprints/EnemyBlueprints/CharactersBlueprints/AbilitiesDataTables
- Use the
+button to add new paths - Use the
-button to remove paths
Default Paths (automatically configured):
Blueprints/Enemy
Blueprints/Characters
Blueprints/Abilities
DataTables
Step 3: Configure Output Settings
Output Directory:
- Default:
Exports(relative to Content folder) - Set custom path if desired
Create Timestamped Folder:
- Enabled: Creates subfolder like
Export_2025_01_15_143022 - Disabled: Overwrites files in output directory
Step 4: Select Asset Types
Enable or disable export for specific asset types:
- ☑ Export DataTables
- ☑ Export Blueprints
- ☑ Export AnimMontages
- ☑ Export CurveTables
Usage
Quick Export
- Open Unreal Editor
- Navigate to:
Tools → WorldStalker → Export Assets to JSON - Wait for export to complete (notification dialog will appear)
Export Output
Files are saved to: Content/Exports/ (or configured output directory)
Output Structure (with timestamped folder):
Content/
└── Exports/
└── Export_2025_01_15_143022/
├── DataTable.json
├── Blueprint.json
├── AnimMontage.json
└── CurveTable.json
Output Format Examples
DataTable.json
[
{
"AssetName": "DT_CharacterStats",
"AssetPath": "/Game/DataTables/DT_CharacterStats",
"RowCount": 10,
"Columns": ["Name", "Health", "Attack", "Defense"],
"Rows": {
"Warrior": {
"Name": "Warrior",
"Health": "1000",
"Attack": "150",
"Defense": "100"
}
}
}
]
Blueprint.json
[
{
"AssetName": "BP_Enemy_Goblin",
"AssetPath": "/Game/Blueprints/Enemy/BP_Enemy_Goblin",
"ParentClass": "WSCharacterBase",
"Variables": [
{
"Name": "MaxHealth",
"Type": "float",
"DefaultValue": "500.0"
}
],
"EventGraphs": [
{
"GraphName": "EventGraph",
"Nodes": [
{
"NodeTitle": "Event BeginPlay",
"NodeClass": "K2Node_Event",
"Pins": [...]
}
],
"Connections": [
{
"SourceNode": "Event BeginPlay",
"SourcePin": "then",
"TargetNode": "Set Max Health",
"TargetPin": "execute"
}
]
}
]
}
]
AnimMontage.json
[
{
"AssetName": "AM_Attack_Combo",
"AssetPath": "/Game/Animations/AM_Attack_Combo",
"SequenceLength": 2.5,
"Sections": [
{
"SectionName": "Combo1",
"StartTime": 0.0,
"EndTime": 0.8
}
],
"Notifies": [
{
"NotifyName": "DamageNotify",
"TriggerTime": 0.5,
"NotifyType": "AnimNotify",
"CustomProperties": {
"DamageMultiplier": "1.5",
"HitboxSize": "100.0"
}
}
],
"SlotAnimTracks": [...]
}
]
Troubleshooting
No Output Files Generated
Problem: Export completes but no JSON files are created Solution: Check that export paths contain assets of the enabled types
Duplicate Assets in Output
Problem: Same asset appears multiple times in JSON Solution: This is now prevented by duplicate detection - check for overlapping folder paths in settings
Build Errors After Integration
Problem: Compilation errors about missing headers
Solution: Ensure all dependencies are added to .Build.cs file (see Installation section)
Export Hangs on Large Projects
Problem: Export takes very long time Solution: Reduce number of export paths or disable asset types not needed
Settings Not Persisting
Problem: Configuration resets after editor restart
Solution: Check that Config/DefaultEditor.ini is writable and not locked
Technical Details
Unreal Engine Version
- Tested on: Unreal Engine 5.5.4 (Custom Build)
- API Compatibility: Uses UE 5.5+ CurveTable API (GetRichCurveRowMap/GetSimpleCurveRowMap)
Module Dependencies
- AssetRegistry - Asset discovery and filtering
- Json/JsonUtilities - JSON serialization
- UnrealEd - Editor integration
- ToolMenus - Menu extension system
- DeveloperSettings - Project settings integration
Performance Characteristics
- Recursive Search: Searches all subfolders of configured paths
- Memory Usage: Loads assets one at a time to minimize memory footprint
- Export Speed: ~10-50 assets per second depending on asset complexity
Blueprint Event Graph Extraction
The system traverses the Blueprint graph structure to extract:
- All nodes from
UbergraphPages(event graphs) - Node metadata (class, title, position, comments)
- Pin information (type, direction, default values)
- Connection graph between pins (LinkedTo relationships)
- Property values from graph nodes
AnimMontage Custom Property Extraction
Custom properties are extracted from Notify objects by:
- Iterating through all
AnimNotifyEvententries - Reflecting on Notify object class properties
- Filtering for editable properties (
CPF_Editflag) - Serializing property values to JSON
Known Limitations
- Blueprint Visual Script Logic: Exports node graph structure but not visual script bytecode execution flow
- Binary Assets: Cannot export binary data (meshes, textures, audio)
- Complex Property Types: Some complex UObject properties may export as object references only
- Large Blueprints: Very large blueprints with thousands of nodes may take significant time to export
Development History
Initial Release: INI-based configuration system with comprehensive asset extraction
Key Design Decisions:
- INI-based configuration chosen over checkbox UI for repeated use convenience
- UDeveloperSettings integration for team collaboration via version control
- Duplicate detection prevents redundant exports from overlapping folder paths
- Pretty-printed JSON for human readability and LLM processing
Support
For issues, questions, or feature requests:
- Check this README and MERGE_INSTRUCTIONS.md
- Review Output Log in Unreal Editor for error messages
- Contact: jinilkim@actionsquare.com
License
Copyright Epic Games, Inc. All Rights Reserved. Part of the WorldStalker (DungeonStalkers) project.