diff --git a/Assets/External/EasyMotionRecorder/Prefabs/EasyMotionRecorder.prefab b/Assets/External/EasyMotionRecorder/Prefabs/EasyMotionRecorder.prefab
index 14b5a65b..3b94b8af 100644
--- a/Assets/External/EasyMotionRecorder/Prefabs/EasyMotionRecorder.prefab
+++ b/Assets/External/EasyMotionRecorder/Prefabs/EasyMotionRecorder.prefab
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:53a5995d27dbde94885193ff1ddd2869a1bca24985e4d2387aa2a66bdda159a3
-size 3774
+oid sha256:284ac40198db1d76fc63f9e3762abbb215a12ce13eadbd8f6c094b0e4a3a43a9
+size 3890
diff --git a/Assets/External/EasyMotionRecorder/Scripts/Editor/FBXExporter.cs b/Assets/External/EasyMotionRecorder/Scripts/Editor/FBXExporter.cs
new file mode 100644
index 00000000..a7af219c
--- /dev/null
+++ b/Assets/External/EasyMotionRecorder/Scripts/Editor/FBXExporter.cs
@@ -0,0 +1,324 @@
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Collections.Generic;
+using Entum;
+
+namespace EasyMotionRecorder
+{
+ ///
+ /// FBX 애니메이션 내보내기 도구
+ /// Unity의 제한으로 인해 직접적인 FBX 내보내기는 어려우므로
+ /// .anim 파일을 생성하고 외부 도구로 변환하는 방법을 제공합니다.
+ ///
+ public class FBXExporter : EditorWindow
+ {
+ private HumanoidPoses targetPoses;
+ private string outputPath = "Assets/Resources/Motion";
+ private string fileName = "";
+ private bool includeHumanoid = true;
+ private bool includeGeneric = true;
+ private bool includeFacial = false;
+ private bool useBinaryFormat = true; // Binary 형식 사용 여부
+
+ [MenuItem("Tools/EasyMotionRecorder/FBX Exporter")]
+ public static void ShowWindow()
+ {
+ GetWindow("FBX Exporter");
+ }
+
+ private void OnGUI()
+ {
+ GUILayout.Label("FBX 애니메이션 내보내기", EditorStyles.boldLabel);
+
+ EditorGUILayout.Space();
+
+ // 타겟 HumanoidPoses 선택
+ targetPoses = (HumanoidPoses)EditorGUILayout.ObjectField("HumanoidPoses", targetPoses, typeof(HumanoidPoses), false);
+
+ EditorGUILayout.Space();
+
+ // 출력 설정
+ GUILayout.Label("출력 설정", EditorStyles.boldLabel);
+ outputPath = EditorGUILayout.TextField("출력 경로", outputPath);
+ fileName = EditorGUILayout.TextField("파일명 (확장자 제외)", fileName);
+
+ EditorGUILayout.Space();
+
+ // 내보내기 옵션
+ GUILayout.Label("내보내기 옵션", EditorStyles.boldLabel);
+ includeHumanoid = EditorGUILayout.Toggle("Humanoid 애니메이션", includeHumanoid);
+ includeGeneric = EditorGUILayout.Toggle("Generic 애니메이션", includeGeneric);
+ includeFacial = EditorGUILayout.Toggle("페이스 애니메이션", includeFacial);
+
+ EditorGUILayout.Space();
+
+ // FBX 내보내기 옵션
+ GUILayout.Label("FBX 내보내기 옵션", EditorStyles.boldLabel);
+ useBinaryFormat = EditorGUILayout.Toggle("Binary 형식 사용", useBinaryFormat);
+ EditorGUILayout.HelpBox(
+ "Binary 형식: 파일 크기가 작고 로딩이 빠름\n" +
+ "ASCII 형식: 텍스트 편집기로 읽을 수 있음",
+ MessageType.Info);
+
+ EditorGUILayout.Space();
+
+ // 버튼들
+ if (GUILayout.Button("경로 선택"))
+ {
+ string selectedPath = EditorUtility.OpenFolderPanel("출력 경로 선택", "Assets", "");
+ if (!string.IsNullOrEmpty(selectedPath))
+ {
+ // Unity 프로젝트 내 경로로 변환
+ if (selectedPath.StartsWith(Application.dataPath))
+ {
+ outputPath = "Assets" + selectedPath.Substring(Application.dataPath.Length);
+ }
+ else
+ {
+ outputPath = selectedPath;
+ }
+ }
+ }
+
+ EditorGUILayout.Space();
+
+ // 내보내기 버튼들
+ GUI.enabled = targetPoses != null && !string.IsNullOrEmpty(fileName);
+
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("애니메이션 파일 내보내기 (.anim)"))
+ {
+ ExportAnimations();
+ }
+ if (GUILayout.Button("FBX 파일 내보내기 (.fbx)"))
+ {
+ ExportFBX();
+ }
+ EditorGUILayout.EndHorizontal();
+
+ GUI.enabled = true;
+
+ EditorGUILayout.Space();
+
+ // 정보 표시
+ if (targetPoses != null)
+ {
+ GUILayout.Label("데이터 정보", EditorStyles.boldLabel);
+ EditorGUILayout.LabelField("포즈 수", targetPoses.Poses.Count.ToString());
+ if (targetPoses.Poses.Count > 0)
+ {
+ EditorGUILayout.LabelField("총 시간", $"{targetPoses.Poses[targetPoses.Poses.Count - 1].Time:F2}초");
+ EditorGUILayout.LabelField("아바타 이름", targetPoses.AvatarName);
+ }
+ }
+
+ EditorGUILayout.Space();
+
+ // FBX 변환 가이드
+ GUILayout.Label("FBX 변환 가이드", EditorStyles.boldLabel);
+ EditorGUILayout.HelpBox(
+ "Unity에서는 직접적인 FBX 내보내기가 제한적입니다.\n" +
+ "다음 방법들을 사용하여 .anim 파일을 FBX로 변환할 수 있습니다:\n\n" +
+ "1. Unity Asset Store의 FBX Exporter 패키지\n" +
+ "2. Autodesk FBX SDK 사용\n" +
+ "3. Blender나 Maya에서 .anim 파일을 FBX로 변환\n" +
+ "4. 외부 FBX 변환 도구 사용",
+ MessageType.Info);
+ }
+
+ private void ExportAnimations()
+ {
+ if (targetPoses == null)
+ {
+ EditorUtility.DisplayDialog("오류", "HumanoidPoses를 선택해주세요.", "확인");
+ return;
+ }
+
+ if (string.IsNullOrEmpty(fileName))
+ {
+ EditorUtility.DisplayDialog("오류", "파일명을 입력해주세요.", "확인");
+ return;
+ }
+
+ // 디렉토리 생성
+ if (!Directory.Exists(outputPath))
+ {
+ Directory.CreateDirectory(outputPath);
+ AssetDatabase.Refresh();
+ }
+
+ List exportedFiles = new List();
+
+ try
+ {
+ // Humanoid 애니메이션 내보내기
+ if (includeHumanoid)
+ {
+ string humanoidPath = Path.Combine(outputPath, $"{fileName}_Humanoid.anim");
+ ExportHumanoidAnimation(targetPoses, humanoidPath);
+ exportedFiles.Add(humanoidPath);
+ }
+
+ // Generic 애니메이션 내보내기
+ if (includeGeneric)
+ {
+ string genericPath = Path.Combine(outputPath, $"{fileName}_Generic.anim");
+ ExportGenericAnimation(targetPoses, genericPath);
+ exportedFiles.Add(genericPath);
+ }
+
+ // 페이스 애니메이션 내보내기 (구현 예정)
+ if (includeFacial)
+ {
+ Debug.LogWarning("페이스 애니메이션 내보내기는 아직 구현되지 않았습니다.");
+ }
+
+ AssetDatabase.Refresh();
+
+ // 결과 표시
+ string message = $"애니메이션 내보내기 완료!\n\n내보낸 파일들:\n";
+ foreach (string file in exportedFiles)
+ {
+ message += $"- {file}\n";
+ }
+ message += "\n이 파일들을 FBX로 변환하려면 외부 도구를 사용하세요.";
+
+ EditorUtility.DisplayDialog("완료", message, "확인");
+
+ // 프로젝트 창에서 파일 선택
+ if (exportedFiles.Count > 0)
+ {
+ string firstFile = exportedFiles[0];
+ if (File.Exists(firstFile))
+ {
+ Object obj = AssetDatabase.LoadAssetAtPath