# 기존 파일 병합 가이드 이 문서는 기존 WorldStalkerEditor 모듈 파일에 병합해야 하는 변경사항을 설명합니다. ## 개요 Asset Export to JSON 기능은 기존 파일에 대한 최소한의 수정만 필요합니다: - **WorldStalkerEditor.h**: private 메서드 선언 2개 추가 - **WorldStalkerEditor.cpp**: include 지시문 추가 및 메뉴 등록 구현 ## 파일: WorldStalkerEditor.h ### 변경 위치 18-20줄 (기존 private 멤버 변수 다음) ### 추가할 변경사항 ```cpp private: void RegisterMenuExtensions(); void AddToolbarMenuEntry(class FMenuBuilder& MenuBuilder); ``` ### 완전한 수정 섹션 ```cpp class FWorldStalkerEditorModule : public IModuleInterface { public: virtual void StartupModule() override; virtual void ShutdownModule() override; private: // 이 두 줄을 추가하세요: void RegisterMenuExtensions(); void AddToolbarMenuEntry(class FMenuBuilder& MenuBuilder); TSharedPtr PluginCommands; TSharedPtr DataTableListener; TSharedPtr ObjectSaveEventListener; }; ``` **참고**: `AddToolbarMenuEntry` 메서드는 하위 호환성을 위해 유지되지만 실제로는 사용되지 않습니다. --- ## 파일: WorldStalkerEditor.cpp ### 변경 1: Include 지시문 추가 **위치**: 4줄 (기존 include 다음) **이 줄을 추가**: ```cpp #include "Utility/AssetExporterToJSON.h" ``` **완전한 Include 섹션**: ```cpp #include "WorldStalkerEditor.h" #include "DataTable/DataTableNoticeListener.h" #include "Asset/ObjectSaveEventListener.h" #include "Utility/AssetExporterToJSON.h" // 이 줄을 추가하세요 #include "ToolMenus.h" ``` ### 변경 2: StartupModule에서 메뉴 확장 등록 **위치**: `StartupModule()` 메서드 내부 (기존 초기화 다음) **이 줄들을 추가**: ```cpp // Register editor menu extensions UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FWorldStalkerEditorModule::RegisterMenuExtensions)); ``` **완전한 StartupModule 메서드**: ```cpp void FWorldStalkerEditorModule::StartupModule() { DataTableListener = MakeShared(); ObjectSaveEventListener = MakeShared(); // 이 두 줄을 추가하세요: // Register editor menu extensions UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FWorldStalkerEditorModule::RegisterMenuExtensions)); } ``` ### 변경 3: ShutdownModule에서 정리 **위치**: `ShutdownModule()` 메서드 내부 (기존 정리 코드 다음) **이 줄들을 추가**: ```cpp // Unregister all tool menus UToolMenus::UnRegisterStartupCallback(this); UToolMenus::UnregisterOwner(this); ``` **완전한 ShutdownModule 메서드**: ```cpp void FWorldStalkerEditorModule::ShutdownModule() { DataTableListener.Reset(); ObjectSaveEventListener.Reset(); // 이 두 줄을 추가하세요: // Unregister all tool menus UToolMenus::UnRegisterStartupCallback(this); UToolMenus::UnregisterOwner(this); } ``` ### 변경 4: 새 메서드 구현 추가 **위치**: `ShutdownModule()` 메서드 다음 (`#undef LOCTEXT_NAMESPACE` 전) **이 두 메서드 전체를 추가**: ```cpp void FWorldStalkerEditorModule::RegisterMenuExtensions() { UToolMenu* ToolsMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Tools"); if (!ToolsMenu) { return; } FToolMenuSection& Section = ToolsMenu->FindOrAddSection("WorldStalkerTools"); Section.Label = LOCTEXT("WorldStalkerToolsSection", "WorldStalker"); Section.AddMenuEntry( "ExportAssetsToJSON", LOCTEXT("ExportAssetsToJSON", "Export Assets to JSON"), LOCTEXT("ExportAssetsToJSONTooltip", "Export DataTable, Blueprint, AnimMontage, and CurveTable assets to JSON format for LLM analysis"), FSlateIcon(FAppStyle::GetAppStyleSetName(), "LevelEditor.Tabs.StatsViewer"), FUIAction(FExecuteAction::CreateStatic(&FAssetExporterToJSON::ExportAssetsToJSON)) ); } void FWorldStalkerEditorModule::AddToolbarMenuEntry(FMenuBuilder& MenuBuilder) { // This method is no longer used but kept for backward compatibility } ``` --- ## 빌드 설정 `WorldStalkerEditor.Build.cs`에 다음 의존성이 포함되어 있는지 확인하세요: ```csharp PublicDependencyModuleNames.AddRange(new string[] { "AssetRegistry", "Json", "JsonUtilities" }); PrivateDependencyModuleNames.AddRange(new string[] { "UnrealEd", "Engine", "Slate", "SlateCore", "ToolMenus", "DeveloperSettings" }); ``` **참고**: 이러한 의존성의 대부분은 이미 모듈에 존재할 가능성이 높습니다. 누락된 것만 추가하세요. --- ## 변경사항 요약 ### WorldStalkerEditor.h - **추가된 줄**: 메서드 선언 2개 - **목적**: 메뉴 등록 메서드 선언 ### WorldStalkerEditor.cpp - **추가된 줄**: - include 지시문 1줄 - StartupModule()에 2줄 - ShutdownModule()에 2줄 - 메서드 구현 2개 전체 (~24줄) - **총**: ~29줄 추가 - **목적**: Tools 메뉴 통합 구현 --- ## 병합 후 테스트 1. WorldStalkerEditor 모듈 리빌드 2. 언리얼 에디터 실행 3. `툴 → WorldStalker → Export Assets to JSON` 메뉴로 이동 4. `편집 → 프로젝트 설정 → 플러그인 → Asset Export to JSON`에서 설정 구성 5. 익스포트 실행 후 `Content/Exports/`에 JSON 파일이 생성되었는지 확인 --- ## 롤백 방법 이 기능을 제거해야 하는 경우: 1. 새로 추가된 4개 파일 삭제: - `AssetExportSettings.h` - `AssetExportSettings.cpp` - `AssetExporterToJSON.h` - `AssetExporterToJSON.cpp` 2. `WorldStalkerEditor.h`에서 변경사항 제거: - 두 개의 메서드 선언 삭제 3. `WorldStalkerEditor.cpp`에서 변경사항 제거: - `#include "Utility/AssetExporterToJSON.h"` 줄 제거 - StartupModule()에서 UToolMenus 등록 제거 - ShutdownModule()에서 UToolMenus 정리 제거 - 두 개의 메서드 구현 삭제 4. 모듈 리빌드 --- ## 연락처 변경사항 병합에 대한 질문: - 작성자: jinilkim@oneunivrs.com - 프로젝트: WorldStalker (DungeonStalkers) - 모듈: WorldStalkerEditor