From 86cd3e9671126a50c25f3f1525344f40cf66559d Mon Sep 17 00:00:00 2001 From: "qsxft258@gmail.com" Date: Sun, 2 Nov 2025 19:16:46 +0900 Subject: [PATCH] =?UTF-8?q?Fix=20=20:=20=EC=A0=84=EB=B0=98=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A0=95=EB=A6=AC,=20=EB=AA=A8=EC=85=98?= =?UTF-8?q?=20=EC=97=90=EC=85=8B=ED=8C=8C=EC=9D=BC=20=EB=88=8C=EB=9F=AC?= =?UTF-8?q?=EB=8F=84=20=EB=9E=99=20=EC=95=88=EA=B1=B8=EB=A6=AC=EA=B2=8C=20?= =?UTF-8?q?=ED=8C=A8=EC=B9=98,=20=EB=AA=A8=EC=BA=A1=20ok=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EB=A6=AC=EB=84=A4=EC=9D=B4=EB=A8=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 4 +- .../Scripts/Editor/HumanoidPosesEditor.cs | 112 +- Assets/Motion/New Material.mat | 1179 ----------------- .../AnimationTools.meta} | 2 +- .../HumanPoseClipApplier.cs | 2 +- .../HumanPoseClipApplier.cs.meta | 0 .../HumanPoseClipCreator.cs | 2 +- .../HumanPoseClipCreator.cs.meta | 0 .../PoseRecorderWindow.cs | 2 +- .../PoseRecorderWindow.cs.meta | 0 .../{ => AnimationTools}/PoseRotationBaker.cs | 2 +- .../PoseRotationBaker.cs.meta | 0 .../BoneTools.meta} | 3 +- .../BoneRendererContextMenu.cs | 0 .../BoneRendererContextMenu.cs.meta | 0 .../BoneTools}/FindUnusedBones.cs | 2 +- .../BoneTools}/FindUnusedBones.cs.meta | 0 .../{ => BoneTools}/HumanBoneRenamer.cs | 2 +- .../{ => BoneTools}/HumanBoneRenamer.cs.meta | 0 .../Editor/MotionCaptureFileRenamer.cs | 691 ---------- .../Editor/StreamingleTools.meta} | 6 +- .../StreamingleAvatarExport.cs | 2 +- .../StreamingleAvatarExport.cs.meta | 0 .../StreamingleControllerSetupToolAdvanced.cs | 0 ...amingleControllerSetupToolAdvanced.cs.meta | 0 Assets/Scripts/Editor/TimelineTools.meta | 8 + .../TimelineBindingTransferWindow.cs | 2 +- .../TimelineBindingTransferWindow.cs.meta | 0 Assets/Scripts/Editor/Utilities.meta | 8 + .../MaterialAndTextureCollectorWindow.cs | 2 +- .../MaterialAndTextureCollectorWindow.cs.meta | 0 .../{ => Utilities}/MaterialObjectSelector.cs | 2 +- .../MaterialObjectSelector.cs.meta | 0 .../Utilities/MotionCaptureFileRenamer.cs | 466 +++++++ .../MotionCaptureFileRenamer.cs.meta | 0 .../NilotoonMaterialMatcapSetter.cs | 2 +- .../NilotoonMaterialMatcapSetter.cs.meta | 0 .../Editor/{ => Utilities}/RecompileScript.cs | 2 +- .../{ => Utilities}/RecompileScript.cs.meta | 0 .../Editor/HumanPoseClipEditor.cs | 64 - .../Editor/HumanPoseClipEditor.cs.meta | 11 - .../Camera Composition/Camera Composition.zip | 3 - .../{Scripts => }/CameraComposition.asmdef | 0 .../CameraComposition.asmdef.meta | 0 .../Camera Composition/CameraComposition.pdf | 3 - .../CameraComposition.pdf.meta | 14 - .../Camera Composition/Changelog.txt | 3 - .../Camera Composition/Changelog.txt.meta | 14 - .../{Scripts => }/CompositionOverlay.cs | 0 .../{Scripts => }/CompositionOverlay.cs.meta | 0 .../{Scripts => }/Editor.meta | 0 .../{Scripts => }/Editor/CameraComposition.cs | 0 .../Editor/CameraComposition.cs.meta | 0 .../Camera Composition/README.txt | 3 - .../Camera Composition/README.txt.meta | 14 - .../{Scripts => }/Resources.meta | 0 .../{Scripts => }/Resources/Overlays.meta | 0 .../Resources/Overlays/overlays.cross.png | 0 .../Overlays/overlays.cross.png.meta | 0 .../Resources/Overlays/overlays.diagonal.png | 0 .../Overlays/overlays.diagonal.png.meta | 0 .../Overlays/overlays.goldenratio.png | 0 .../Overlays/overlays.goldenratio.png.meta | 0 .../Overlays/overlays.goldenspiral.png | 0 .../Overlays/overlays.goldenspiral.png.meta | 0 .../Overlays/overlays.ruleofthirds.png | 0 .../Overlays/overlays.ruleofthirds.png.meta | 0 .../{Scripts => }/Resources/Prefabs.meta | 0 .../Prefabs/Camera Composition.prefab | 0 .../Prefabs/Camera Composition.prefab.meta | 0 .../YAMO_Scripts/RenameHumanoidBones.cs | 1082 --------------- .../YAMO_Scripts/RenameHumanoidBones.cs.meta | 2 - 72 files changed, 584 insertions(+), 3132 deletions(-) delete mode 100644 Assets/Motion/New Material.mat rename Assets/Scripts/{YAMO_Scripts/Camera Composition/Scripts.meta => Editor/AnimationTools.meta} (77%) rename Assets/Scripts/Editor/{ => AnimationTools}/HumanPoseClipApplier.cs (98%) rename Assets/Scripts/Editor/{ => AnimationTools}/HumanPoseClipApplier.cs.meta (100%) rename Assets/Scripts/Editor/{ => AnimationTools}/HumanPoseClipCreator.cs (98%) rename Assets/Scripts/Editor/{ => AnimationTools}/HumanPoseClipCreator.cs.meta (100%) rename Assets/Scripts/Editor/{ => AnimationTools}/PoseRecorderWindow.cs (99%) rename Assets/Scripts/Editor/{ => AnimationTools}/PoseRecorderWindow.cs.meta (100%) rename Assets/Scripts/Editor/{ => AnimationTools}/PoseRotationBaker.cs (99%) rename Assets/Scripts/Editor/{ => AnimationTools}/PoseRotationBaker.cs.meta (100%) rename Assets/Scripts/{YAMO_Scripts/Camera Composition/Camera Composition.zip.meta => Editor/BoneTools.meta} (67%) rename Assets/Scripts/Editor/{ => BoneTools}/BoneRendererContextMenu.cs (100%) rename Assets/Scripts/Editor/{ => BoneTools}/BoneRendererContextMenu.cs.meta (100%) rename Assets/Scripts/{YAMO_Scripts => Editor/BoneTools}/FindUnusedBones.cs (98%) rename Assets/Scripts/{YAMO_Scripts => Editor/BoneTools}/FindUnusedBones.cs.meta (100%) rename Assets/Scripts/Editor/{ => BoneTools}/HumanBoneRenamer.cs (99%) rename Assets/Scripts/Editor/{ => BoneTools}/HumanBoneRenamer.cs.meta (100%) delete mode 100644 Assets/Scripts/Editor/MotionCaptureFileRenamer.cs rename Assets/{Motion/New Material.mat.meta => Scripts/Editor/StreamingleTools.meta} (52%) rename Assets/Scripts/{Streamingle/StreamingleAvatarExport/Editor => Editor/StreamingleTools}/StreamingleAvatarExport.cs (99%) rename Assets/Scripts/{Streamingle/StreamingleAvatarExport/Editor => Editor/StreamingleTools}/StreamingleAvatarExport.cs.meta (100%) rename Assets/Scripts/Editor/{ => StreamingleTools}/StreamingleControllerSetupToolAdvanced.cs (100%) rename Assets/Scripts/Editor/{ => StreamingleTools}/StreamingleControllerSetupToolAdvanced.cs.meta (100%) create mode 100644 Assets/Scripts/Editor/TimelineTools.meta rename Assets/Scripts/Editor/{ => TimelineTools}/TimelineBindingTransferWindow.cs (99%) rename Assets/Scripts/Editor/{ => TimelineTools}/TimelineBindingTransferWindow.cs.meta (100%) create mode 100644 Assets/Scripts/Editor/Utilities.meta rename Assets/Scripts/{YAMO_Scripts => Editor/Utilities}/MaterialAndTextureCollectorWindow.cs (99%) rename Assets/Scripts/{YAMO_Scripts => Editor/Utilities}/MaterialAndTextureCollectorWindow.cs.meta (100%) rename Assets/Scripts/Editor/{ => Utilities}/MaterialObjectSelector.cs (97%) rename Assets/Scripts/Editor/{ => Utilities}/MaterialObjectSelector.cs.meta (100%) create mode 100644 Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs rename Assets/Scripts/Editor/{ => Utilities}/MotionCaptureFileRenamer.cs.meta (100%) rename Assets/Scripts/{YAMO_Scripts => Editor/Utilities}/NilotoonMaterialMatcapSetter.cs (99%) rename Assets/Scripts/{YAMO_Scripts => Editor/Utilities}/NilotoonMaterialMatcapSetter.cs.meta (100%) rename Assets/Scripts/Editor/{ => Utilities}/RecompileScript.cs (86%) rename Assets/Scripts/Editor/{ => Utilities}/RecompileScript.cs.meta (100%) delete mode 100644 Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs delete mode 100644 Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs.meta delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/CameraComposition.asmdef (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/CameraComposition.asmdef.meta (100%) delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf.meta delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt.meta rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/CompositionOverlay.cs (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/CompositionOverlay.cs.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Editor.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Editor/CameraComposition.cs (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Editor/CameraComposition.cs.meta (100%) delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt delete mode 100644 Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt.meta rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.cross.png (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.cross.png.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.diagonal.png (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.diagonal.png.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.goldenratio.png (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.goldenratio.png.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.goldenspiral.png (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.goldenspiral.png.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.ruleofthirds.png (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Overlays/overlays.ruleofthirds.png.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Prefabs.meta (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Prefabs/Camera Composition.prefab (100%) rename Assets/Scripts/YAMO_Scripts/Camera Composition/{Scripts => }/Resources/Prefabs/Camera Composition.prefab.meta (100%) delete mode 100644 Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs delete mode 100644 Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs.meta diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 66025190..65652afe 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ba9449c9c2e07b62359219416e91b071f5359a62787d3bc71dcb9c73901e9e7 -size 737 +oid sha256:b07ae2b319863ddc6bfb2a32b2c5e6cdeaf8f50ee34d3c0a59eb3870649e26fd +size 1643 diff --git a/Assets/External/EasyMotionRecorder/Scripts/Editor/HumanoidPosesEditor.cs b/Assets/External/EasyMotionRecorder/Scripts/Editor/HumanoidPosesEditor.cs index 3f780e8e..3f59195b 100644 --- a/Assets/External/EasyMotionRecorder/Scripts/Editor/HumanoidPosesEditor.cs +++ b/Assets/External/EasyMotionRecorder/Scripts/Editor/HumanoidPosesEditor.cs @@ -14,11 +14,20 @@ namespace Entum private bool _showBoneData = false; private bool _showMuscleData = false; private bool _showIKData = false; - + // 프레임 탐색 private int _currentFrameIndex = 0; private Vector2 _scrollPosition; - + + // 성능 최적화: 에디터 초기화 플래그 + private bool _isInitialized = false; + + // 캐싱된 데이터 (매번 접근하지 않도록) + private int _cachedPoseCount = -1; + private float _cachedTotalTime = -1f; + private int _cachedBoneCount = -1; + private int _cachedMuscleCount = -1; + // UI 스타일 private GUIStyle _cardStyle; private GUIStyle _headerStyle; @@ -35,36 +44,45 @@ namespace Entum private void OnEnable() { - Repaint(); + // 캐시 초기화 + _cachedPoseCount = -1; + _cachedTotalTime = -1f; + _cachedBoneCount = -1; + _cachedMuscleCount = -1; + _isInitialized = false; } private void InitializeStyles() { + if (_isInitialized) return; // 이미 초기화되었으면 스킵 + // 카드 스타일 _cardStyle = new GUIStyle(); _cardStyle.normal.background = CreateTexture(2, 2, new Color(0.15f, 0.15f, 0.15f, 1f)); _cardStyle.padding = new RectOffset(15, 15, 10, 10); _cardStyle.margin = new RectOffset(0, 0, 5, 5); - + // 헤더 스타일 _headerStyle = new GUIStyle(EditorStyles.boldLabel); _headerStyle.fontSize = 14; _headerStyle.normal.textColor = Color.white; _headerStyle.margin = new RectOffset(0, 0, 5, 10); - + // 정보 스타일 _infoStyle = new GUIStyle(EditorStyles.label); _infoStyle.normal.textColor = new Color(0.8f, 0.8f, 0.8f); _infoStyle.fontSize = 11; - + // 버튼 스타일 _buttonStyle = new GUIStyle(EditorStyles.miniButton); _buttonStyle.fontSize = 11; _buttonStyle.padding = new RectOffset(8, 8, 4, 4); - + // 섹션 스타일 _sectionStyle = new GUIStyle(); _sectionStyle.margin = new RectOffset(0, 0, 8, 8); + + _isInitialized = true; } private Texture2D CreateTexture(int width, int height, Color color) @@ -127,13 +145,18 @@ namespace Entum private void DrawDataStatusCard(HumanoidPoses humanoidPoses) { EditorGUILayout.BeginVertical(_cardStyle); - + EditorGUILayout.LabelField("📊 데이터 상태", _headerStyle); - - if (humanoidPoses.Poses != null && humanoidPoses.Poses.Count > 0) + + // Summary 데이터 우선 사용 + int poseCount = (humanoidPoses.Summary != null && humanoidPoses.Summary.TotalPoses > 0) + ? humanoidPoses.Summary.TotalPoses + : (humanoidPoses.Poses != null ? humanoidPoses.Poses.Count : 0); + + if (poseCount > 0) { - EditorGUILayout.LabelField($"✅ {humanoidPoses.Poses.Count}개의 포즈 데이터 로드됨", _infoStyle); - + EditorGUILayout.LabelField($"✅ {poseCount}개의 포즈 데이터 로드됨", _infoStyle); + // T-포즈 상태 표시 EditorGUILayout.Space(3); if (humanoidPoses.HasTPoseData) @@ -144,28 +167,28 @@ namespace Entum { EditorGUILayout.LabelField($"🎯 T-포즈: ❌ 없음", _infoStyle); } - + EditorGUILayout.Space(5); - + // 명확한 토글 버튼 EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("데이터 탐색:", _infoStyle, GUILayout.Width(80)); - + var oldColor = GUI.backgroundColor; GUI.backgroundColor = _showData ? _successColor : _secondaryColor; - + if (GUILayout.Button(_showData ? "🔽 숨기기" : "🔼 보기", GUILayout.Width(80))) { _showData = !_showData; } - + GUI.backgroundColor = oldColor; EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.LabelField("❌ 데이터가 없습니다", _infoStyle); - + // T-포즈 상태 표시 (데이터가 없어도) EditorGUILayout.Space(3); if (humanoidPoses.HasTPoseData) @@ -177,43 +200,61 @@ namespace Entum EditorGUILayout.LabelField($"🎯 T-포즈: ❌ 없음", _infoStyle); } } - + EditorGUILayout.EndVertical(); } private void DrawBasicInfoCard(HumanoidPoses humanoidPoses) { EditorGUILayout.BeginVertical(_cardStyle); - + EditorGUILayout.LabelField("📈 기본 정보", _headerStyle); - - if (humanoidPoses.Poses != null && humanoidPoses.Poses.Count > 0) + + // Summary 데이터가 있으면 우선 사용 (성능 최적화) + if (humanoidPoses.Summary != null && humanoidPoses.Summary.TotalPoses > 0) { + DrawInfoRow("🎭 총 포즈 수", humanoidPoses.Summary.TotalPoses.ToString()); + DrawInfoRow("⏱️ 총 시간", $"{humanoidPoses.Summary.TotalTime:F2}초"); + DrawInfoRow("🦴 본 수", humanoidPoses.Summary.TotalBones.ToString()); + DrawInfoRow("💪 근육 수", humanoidPoses.Summary.TotalMuscles.ToString()); + DrawInfoRow("🎬 평균 FPS", $"{humanoidPoses.Summary.AverageFPS:F1}"); + + float fileSize = EstimateFileSizeFromSummary(humanoidPoses.Summary); + DrawInfoRow("💾 예상 크기", $"{fileSize:F1}KB"); + + // T-포즈 정보 추가 + DrawInfoRow("🎯 T-포즈", humanoidPoses.HasTPoseData ? "✅ 포함" : "❌ 없음"); + } + else if (humanoidPoses.Poses != null && humanoidPoses.Poses.Count > 0) + { + // Summary가 없으면 직접 계산 (느림 - 경고 표시) + EditorGUILayout.HelpBox("⚠️ Summary 데이터가 없어서 직접 계산 중입니다. 성능이 느릴 수 있습니다.", MessageType.Warning); + var firstPose = humanoidPoses.Poses[0]; var lastPose = humanoidPoses.Poses[humanoidPoses.Poses.Count - 1]; - + DrawInfoRow("🎭 총 포즈 수", humanoidPoses.Poses.Count.ToString()); DrawInfoRow("⏱️ 총 시간", $"{lastPose.Time:F2}초"); DrawInfoRow("🦴 본 수", firstPose.HumanoidBones.Count.ToString()); DrawInfoRow("💪 근육 수", firstPose.Muscles.Length.ToString()); - + float avgFPS = humanoidPoses.Poses.Count / lastPose.Time; DrawInfoRow("🎬 평균 FPS", $"{avgFPS:F1}"); - + float fileSize = EstimateFileSize(humanoidPoses); DrawInfoRow("💾 예상 크기", $"{fileSize:F1}KB"); - + // T-포즈 정보 추가 DrawInfoRow("🎯 T-포즈", humanoidPoses.HasTPoseData ? "✅ 포함" : "❌ 없음"); } else { EditorGUILayout.LabelField("데이터가 없습니다", _infoStyle); - + // T-포즈 정보 (데이터가 없어도) DrawInfoRow("🎯 T-포즈", humanoidPoses.HasTPoseData ? "✅ 포함" : "❌ 없음"); } - + EditorGUILayout.EndVertical(); } @@ -567,15 +608,26 @@ namespace Entum private float EstimateFileSize(HumanoidPoses humanoidPoses) { if (humanoidPoses.Poses == null || humanoidPoses.Poses.Count == 0) return 0; - + var firstPose = humanoidPoses.Poses[0]; int poseSize = 4 * 3 + 4 * 4 + 4 * 3 + 4 * 4 + 4 * 3 + 4 * 4 + 4 + 4 + 4; int boneSize = (4 * 3 + 4 * 4 + 50) * firstPose.HumanoidBones.Count; int muscleSize = 4 * firstPose.Muscles.Length; - + return (poseSize + boneSize + muscleSize) * humanoidPoses.Poses.Count / 1024f; } + private float EstimateFileSizeFromSummary(HumanoidPoses.SummaryInfo summary) + { + if (summary == null || summary.TotalPoses == 0) return 0; + + int poseSize = 4 * 3 + 4 * 4 + 4 * 3 + 4 * 4 + 4 * 3 + 4 * 4 + 4 + 4 + 4; + int boneSize = (4 * 3 + 4 * 4 + 50) * summary.TotalBones; + int muscleSize = 4 * summary.TotalMuscles; + + return (poseSize + boneSize + muscleSize) * summary.TotalPoses / 1024f; + } + private long EstimateMemoryUsage(HumanoidPoses humanoidPoses) { if (humanoidPoses.Poses == null || humanoidPoses.Poses.Count == 0) return 0; diff --git a/Assets/Motion/New Material.mat b/Assets/Motion/New Material.mat deleted file mode 100644 index cfc08a7c..00000000 --- a/Assets/Motion/New Material.mat +++ /dev/null @@ -1,1179 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-4885042081608654130 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion - version: 10 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: New Material - m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - - _RECEIVE_URP_SHADOW - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _AlphaOverrideTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer10MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer10Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer1MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer1Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer2MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer2Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer3MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer3Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer4MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer4Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer5MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer5Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer6MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer6Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer7MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer7Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer8MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer8Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer9MaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMapStackingLayer9Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _CharacterAreaColorFillTexture: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DepthTexRimLightAndShadowWidthTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DepthTexRimLightMaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DissolveThresholdMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DynamicEyePupilMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DynamicEyePupilMaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DynamicEyeWhiteMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DynamicRampLightingTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionAnimTintRampMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EnvironmentReflectionMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Face3DRimLightAndShadow_CheekRimLightMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Face3DRimLightAndShadow_CheekShadowMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Face3DRimLightAndShadow_NoseRimLightMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Face3DRimLightAndShadow_NoseShadowMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FaceMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FaceShadowGradientMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FaceShadowGradientMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _HairStrandSpecularTintMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapAdditiveMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapAdditiveMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapAlphaBlendMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapAlphaBlendMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapOcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MatCapOcclusionMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NiloToonSelfShadowIntensityMultiplierTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OutlineTintColorMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OutlineWidthTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OutlineZOffsetMaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OverrideOutlineColorTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OverrideShadowColorMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OverrideShadowColorTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _PerCharacterBaseMapOverrideMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _PerMaterialDissolvePatternMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _PerMaterialDissolveThresholdMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RampLightingSampleUvYTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RampLightingTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RampSpecularSampleUvYTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RampSpecularTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ScreenSpaceOutlineDepthSensitivityTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ScreenSpaceOutlineNormalsSensitivityTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ShadingGradeMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SkinMaskMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SmoothnessMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularColorTintMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecularMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ZOffsetMaskTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: - - _CharacterID: 0 - - _DissolveMode: 0 - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AdditionalLightCelShadeMidPoint: 0 - - _AdditionalLightCelShadeMidPointForFaceArea: 0 - - _AdditionalLightCelShadeSoftness: 0.05 - - _AdditionalLightCelShadeSoftnessForFaceArea: 0.15 - - _AdditionalLightDistanceAttenuationClamp: 2 - - _AdditionalLightIgnoreCelShade: 0.2 - - _AdditionalLightIgnoreCelShadeForFaceArea: 0.2 - - _AdditionalLightIgnoreOcclusion: 0.2 - - _AllowNiloToonBloomCharacterAreaOverride: 1 - - _AllowPerCharacterDissolve: 1 - - _AllowPerCharacterDitherFadeout: 1 - - _AllowRenderDepthOnlyOrDepthNormalsPass: 1 - - _AllowRenderExtraThickOutlinePass: 1 - - _AllowRenderMotionVectorsPass: 1 - - _AllowRenderNiloToonCharacterAreaColorFillPass: 1 - - _AllowRenderNiloToonCharacterAreaStencilBufferFillPass: 1 - - _AllowRenderNiloToonPrepassBufferPass: 1 - - _AllowRenderNiloToonSelfShadowPass: 1 - - _AllowRenderURPShadowCasterPass: 1 - - _AllowRenderURPUniversalForwardOnlyPass: 1 - - _AllowedNiloToonBloomOverrideStrength: 1 - - _AlphaClip: 0 - - _AlphaOverrideMode: 0 - - _AlphaOverrideStrength: 1 - - _AlphaOverrideTexInvertColor: 0 - - _AlphaOverrideTexUVIndex: 0 - - _AlphaOverrideTexValueOffset: 0 - - _AlphaOverrideTexValueScale: 1 - - _AlphaToMask: 0 - - _ApplyAlphaOverrideOnlyWhenFaceForwardIsPointingToCamera: 0 - - _ApplyAlphaOverrideOnlyWhenFaceForwardIsPointingToCameraRemapEnd: 1 - - _ApplyAlphaOverrideOnlyWhenFaceForwardIsPointingToCameraRemapMinMaxSlider: 1 - - _ApplyAlphaOverrideOnlyWhenFaceForwardIsPointingToCameraRemapStart: 0 - - _ApplyDepthTexRimLightFixDottedLineArtifacts: 1 - - _AsUnlit: 0 - - _BackFaceForceShadow: 0 - - _BaseMapBrightness: 1 - - _BaseMapStackingLayer10ApplytoFaces: 0 - - _BaseMapStackingLayer10ColorBlendMode: 0 - - _BaseMapStackingLayer10Enable: 0 - - _BaseMapStackingLayer10MaskInvertColor: 0 - - _BaseMapStackingLayer10MaskRemapEnd: 1 - - _BaseMapStackingLayer10MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer10MaskRemapStart: 0 - - _BaseMapStackingLayer10MaskTexAsIDMap: 0 - - _BaseMapStackingLayer10MaskTexExtractFromID: 255 - - _BaseMapStackingLayer10MaskUVIndex: 0 - - _BaseMapStackingLayer10MasterStrength: 1 - - _BaseMapStackingLayer10TexIgnoreAlpha: 0 - - _BaseMapStackingLayer10TexUVIndex: 0 - - _BaseMapStackingLayer10TexUVRotateSpeed: 0 - - _BaseMapStackingLayer10TexUVRotatedAngle: 0 - - _BaseMapStackingLayer1ApplytoFaces: 0 - - _BaseMapStackingLayer1ColorBlendMode: 0 - - _BaseMapStackingLayer1Enable: 0 - - _BaseMapStackingLayer1MaskInvertColor: 0 - - _BaseMapStackingLayer1MaskRemapEnd: 1 - - _BaseMapStackingLayer1MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer1MaskRemapStart: 0 - - _BaseMapStackingLayer1MaskTexAsIDMap: 0 - - _BaseMapStackingLayer1MaskTexExtractFromID: 255 - - _BaseMapStackingLayer1MaskUVIndex: 0 - - _BaseMapStackingLayer1MasterStrength: 1 - - _BaseMapStackingLayer1TexIgnoreAlpha: 0 - - _BaseMapStackingLayer1TexUVIndex: 0 - - _BaseMapStackingLayer1TexUVRotateSpeed: 0 - - _BaseMapStackingLayer1TexUVRotatedAngle: 0 - - _BaseMapStackingLayer2ApplytoFaces: 0 - - _BaseMapStackingLayer2ColorBlendMode: 0 - - _BaseMapStackingLayer2Enable: 0 - - _BaseMapStackingLayer2MaskInvertColor: 0 - - _BaseMapStackingLayer2MaskRemapEnd: 1 - - _BaseMapStackingLayer2MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer2MaskRemapStart: 0 - - _BaseMapStackingLayer2MaskTexAsIDMap: 0 - - _BaseMapStackingLayer2MaskTexExtractFromID: 255 - - _BaseMapStackingLayer2MaskUVIndex: 0 - - _BaseMapStackingLayer2MasterStrength: 1 - - _BaseMapStackingLayer2TexIgnoreAlpha: 0 - - _BaseMapStackingLayer2TexUVIndex: 0 - - _BaseMapStackingLayer2TexUVRotateSpeed: 0 - - _BaseMapStackingLayer2TexUVRotatedAngle: 0 - - _BaseMapStackingLayer3ApplytoFaces: 0 - - _BaseMapStackingLayer3ColorBlendMode: 0 - - _BaseMapStackingLayer3Enable: 0 - - _BaseMapStackingLayer3MaskInvertColor: 0 - - _BaseMapStackingLayer3MaskRemapEnd: 1 - - _BaseMapStackingLayer3MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer3MaskRemapStart: 0 - - _BaseMapStackingLayer3MaskTexAsIDMap: 0 - - _BaseMapStackingLayer3MaskTexExtractFromID: 255 - - _BaseMapStackingLayer3MaskUVIndex: 0 - - _BaseMapStackingLayer3MasterStrength: 1 - - _BaseMapStackingLayer3TexIgnoreAlpha: 0 - - _BaseMapStackingLayer3TexUVIndex: 0 - - _BaseMapStackingLayer3TexUVRotateSpeed: 0 - - _BaseMapStackingLayer3TexUVRotatedAngle: 0 - - _BaseMapStackingLayer4ApplytoFaces: 0 - - _BaseMapStackingLayer4ColorBlendMode: 0 - - _BaseMapStackingLayer4Enable: 0 - - _BaseMapStackingLayer4MaskInvertColor: 0 - - _BaseMapStackingLayer4MaskRemapEnd: 1 - - _BaseMapStackingLayer4MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer4MaskRemapStart: 0 - - _BaseMapStackingLayer4MaskTexAsIDMap: 0 - - _BaseMapStackingLayer4MaskTexExtractFromID: 255 - - _BaseMapStackingLayer4MaskUVIndex: 0 - - _BaseMapStackingLayer4MasterStrength: 1 - - _BaseMapStackingLayer4TexIgnoreAlpha: 0 - - _BaseMapStackingLayer4TexUVIndex: 0 - - _BaseMapStackingLayer4TexUVRotateSpeed: 0 - - _BaseMapStackingLayer4TexUVRotatedAngle: 0 - - _BaseMapStackingLayer5ApplytoFaces: 0 - - _BaseMapStackingLayer5ColorBlendMode: 0 - - _BaseMapStackingLayer5Enable: 0 - - _BaseMapStackingLayer5MaskInvertColor: 0 - - _BaseMapStackingLayer5MaskRemapEnd: 1 - - _BaseMapStackingLayer5MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer5MaskRemapStart: 0 - - _BaseMapStackingLayer5MaskTexAsIDMap: 0 - - _BaseMapStackingLayer5MaskTexExtractFromID: 255 - - _BaseMapStackingLayer5MaskUVIndex: 0 - - _BaseMapStackingLayer5MasterStrength: 1 - - _BaseMapStackingLayer5TexIgnoreAlpha: 0 - - _BaseMapStackingLayer5TexUVIndex: 0 - - _BaseMapStackingLayer5TexUVRotateSpeed: 0 - - _BaseMapStackingLayer5TexUVRotatedAngle: 0 - - _BaseMapStackingLayer6ApplytoFaces: 0 - - _BaseMapStackingLayer6ColorBlendMode: 0 - - _BaseMapStackingLayer6Enable: 0 - - _BaseMapStackingLayer6MaskInvertColor: 0 - - _BaseMapStackingLayer6MaskRemapEnd: 1 - - _BaseMapStackingLayer6MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer6MaskRemapStart: 0 - - _BaseMapStackingLayer6MaskTexAsIDMap: 0 - - _BaseMapStackingLayer6MaskTexExtractFromID: 255 - - _BaseMapStackingLayer6MaskUVIndex: 0 - - _BaseMapStackingLayer6MasterStrength: 1 - - _BaseMapStackingLayer6TexIgnoreAlpha: 0 - - _BaseMapStackingLayer6TexUVIndex: 0 - - _BaseMapStackingLayer6TexUVRotateSpeed: 0 - - _BaseMapStackingLayer6TexUVRotatedAngle: 0 - - _BaseMapStackingLayer7ApplytoFaces: 0 - - _BaseMapStackingLayer7ColorBlendMode: 0 - - _BaseMapStackingLayer7Enable: 0 - - _BaseMapStackingLayer7MaskInvertColor: 0 - - _BaseMapStackingLayer7MaskRemapEnd: 1 - - _BaseMapStackingLayer7MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer7MaskRemapStart: 0 - - _BaseMapStackingLayer7MaskTexAsIDMap: 0 - - _BaseMapStackingLayer7MaskTexExtractFromID: 255 - - _BaseMapStackingLayer7MaskUVIndex: 0 - - _BaseMapStackingLayer7MasterStrength: 1 - - _BaseMapStackingLayer7TexIgnoreAlpha: 0 - - _BaseMapStackingLayer7TexUVIndex: 0 - - _BaseMapStackingLayer7TexUVRotateSpeed: 0 - - _BaseMapStackingLayer7TexUVRotatedAngle: 0 - - _BaseMapStackingLayer8ApplytoFaces: 0 - - _BaseMapStackingLayer8ColorBlendMode: 0 - - _BaseMapStackingLayer8Enable: 0 - - _BaseMapStackingLayer8MaskInvertColor: 0 - - _BaseMapStackingLayer8MaskRemapEnd: 1 - - _BaseMapStackingLayer8MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer8MaskRemapStart: 0 - - _BaseMapStackingLayer8MaskTexAsIDMap: 0 - - _BaseMapStackingLayer8MaskTexExtractFromID: 255 - - _BaseMapStackingLayer8MaskUVIndex: 0 - - _BaseMapStackingLayer8MasterStrength: 1 - - _BaseMapStackingLayer8TexIgnoreAlpha: 0 - - _BaseMapStackingLayer8TexUVIndex: 0 - - _BaseMapStackingLayer8TexUVRotateSpeed: 0 - - _BaseMapStackingLayer8TexUVRotatedAngle: 0 - - _BaseMapStackingLayer9ApplytoFaces: 0 - - _BaseMapStackingLayer9ColorBlendMode: 0 - - _BaseMapStackingLayer9Enable: 0 - - _BaseMapStackingLayer9MaskInvertColor: 0 - - _BaseMapStackingLayer9MaskRemapEnd: 1 - - _BaseMapStackingLayer9MaskRemapMinMaxSlider: 1 - - _BaseMapStackingLayer9MaskRemapStart: 0 - - _BaseMapStackingLayer9MaskTexAsIDMap: 0 - - _BaseMapStackingLayer9MaskTexExtractFromID: 255 - - _BaseMapStackingLayer9MaskUVIndex: 0 - - _BaseMapStackingLayer9MasterStrength: 1 - - _BaseMapStackingLayer9TexIgnoreAlpha: 0 - - _BaseMapStackingLayer9TexUVIndex: 0 - - _BaseMapStackingLayer9TexUVRotateSpeed: 0 - - _BaseMapStackingLayer9TexUVRotatedAngle: 0 - - _BaseMapUVIndex: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BlendOp: 0 - - _BumpMapApplytoFaces: 0 - - _BumpMapUVIndex: 0 - - _BumpScale: 1 - - _CelShadeMidPoint: 0 - - _CelShadeMidPointForFaceArea: -0.3 - - _CelShadeSoftness: 0.05 - - _CelShadeSoftnessForFaceArea: 0.15 - - _CharacterAreaColorFillEnabled: 0 - - _CharacterAreaColorFillRendersBlockedArea: 0 - - _CharacterAreaColorFillRendersVisibleArea: 0 - - _CharacterAreaColorFillTextureUVIndex: 5 - - _CharacterBoundRadius: 1.25 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _ColorMask: 15 - - _ColorRenderStatesGroup: 0 - - _ColorRenderStatesGroupPreset: 0 - - _ControlledByNiloToonPerCharacterRenderController: 0 - - _Cull: 2 - - _CullNiloToonSelfShadowCaster: 1 - - _CullOutline: 1 - - _Cutoff: 0.5 - - _DebugFaceShadowGradientMap: 0 - - _DecalAlbedoApplyStrength: 1 - - _DecalGroup: 0 - - _DecalNormalApplyStrength: 1 - - _DecalOcclusionApplyStrength: 1 - - _DecalSmoothnessApplyStrength: 1 - - _DecalSpecularApplyStrength: 1 - - _DepthRenderStatesGroup: 0 - - _DepthTexRimLight3DFallbackMidPoint: 0.7 - - _DepthTexRimLight3DFallbackRemoveFlatPolygonRimLight: 1 - - _DepthTexRimLight3DFallbackSoftness: 0.02 - - _DepthTexRimLight3DRimMaskEnable: 0 - - _DepthTexRimLight3DRimMaskThreshold: 0.5 - - _DepthTexRimLightAndShadowReduceWidthWhenCameraIsClose: 1 - - _DepthTexRimLightAndShadowSafeViewDistance: 1 - - _DepthTexRimLightAndShadowWidthExtraMultiplier: 1 - - _DepthTexRimLightAndShadowWidthMultiplier: 0.5 - - _DepthTexRimLightBlockByShadow: 0 - - _DepthTexRimLightFadeoutRange: 1 - - _DepthTexRimLightFixDottedLineArtifactsExtendMultiplier: 0.1 - - _DepthTexRimLightIgnoreLightDir: 0 - - _DepthTexRimLightIntensity: 1.5 - - _DepthTexRimLightMaskTexInvertColor: 0 - - _DepthTexRimLightMinimumThresholdOffsetForFace: 0.5 - - _DepthTexRimLightMixWithBaseMapColor: 0.5 - - _DepthTexRimLightThresholdOffset: 0 - - _DepthTexRimLightUsage: 1 - - _DepthTexRimLightWidthClampForFace: 0.5 - - _DepthTexRimLightWidthMultiplier: 1 - - _DepthTexShadowBrightness: 0.85 - - _DepthTexShadowBrightnessForFace: 1 - - _DepthTexShadowColorStyleForFacePreset: 0 - - _DepthTexShadowColorStyleForNonFacePreset: 0 - - _DepthTexShadowFadeoutRange: 1 - - _DepthTexShadowFixedDirectionForFace: 0 - - _DepthTexShadowThresholdOffset: 0 - - _DepthTexShadowUsage: 1 - - _DepthTexShadowWidthMultiplier: 1 - - _DetailAlbedoMapScale: 1 - - _DetailAlbedoWhitePoint: 0.5 - - _DetailMaskInvertColor: 0 - - _DetailNormalMapScale: 1 - - _DetailUseSecondUv: 0 - - _DissolveAmount: 0 - - _DissolveBorderRange: 0.02 - - _DissolveNoiseStrength: 1 - - _DissolvePatternMapPreset: 0 - - _DissolveThresholdMapPreset: 0 - - _DissolveThresholdMapTilingX: 1 - - _DissolveThresholdMapTilingY: 1 - - _DitherFadeoutAmount: 0 - - _DitherFadeoutNormalScaleFix: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _DynamicEyeFinalBrightness: 2 - - _DynamicEyePupilDepthScale: 0.4 - - _DynamicEyePupilMaskSoftness: 0.216 - - _DynamicEyePupilSize: -0.384 - - _DynamicEyeSize: 2.2 - - _EditFinalOutputAlphaEnable: 0 - - _EmissionAnimTintRampMapSpeed: 1 - - _EmissionIntensity: 1 - - _EmissionMapUseSingleChannelOnly: 0 - - _EmissionMaskMapInvertColor: 0 - - _EmissionMaskMapRemapEnd: 1 - - _EmissionMaskMapRemapMinMaxSlider: 1 - - _EmissionMaskMapRemapStart: 0 - - _EnableDynamicEyeFeature: 0 - - _EnableEmissionAnimTintRampMap: 0 - - _EnableFace3DRimLightAndShadow: 0 - - _EnableNiloToonSelfShadowMapping: 1 - - _EnableNiloToonSelfShadowMappingDepthBias: 0 - - _EnableNiloToonSelfShadowMappingNormalBias: 0 - - _EnablePerMaterialDissolve: 0 - - _EnableRendering: 1 - - _EnableShadowColor: 1 - - _EnableUVEditGroup: 0 - - _EnvironmentReflectionApplyAddBlending: 0 - - _EnvironmentReflectionApplyReplaceBlending: 1 - - _EnvironmentReflectionApplytoFaces: 0 - - _EnvironmentReflectionBrightness: 1 - - _EnvironmentReflectionFresnelEffect: 0 - - _EnvironmentReflectionFresnelPower: 1 - - _EnvironmentReflectionFresnelRemapEnd: 1 - - _EnvironmentReflectionFresnelRemapMinMaxSlider: 1 - - _EnvironmentReflectionFresnelRemapStart: 0 - - _EnvironmentReflectionMaskMapInvertColor: 0 - - _EnvironmentReflectionMaskMapRemapEnd: 1 - - _EnvironmentReflectionMaskMapRemapMinMaxSlider: 1 - - _EnvironmentReflectionMaskMapRemapStart: 0 - - _EnvironmentReflectionShouldApplyToFaceArea: 0 - - _EnvironmentReflectionSmoothnessMultiplier: 1 - - _EnvironmentReflectionTintAlbedo: 1 - - _EnvironmentReflectionUsage: 1 - - _EnvironmentReflections: 1 - - _ExtraThickOutlineEnabled: 0 - - _ExtraThickOutlineMaxFinalWidth: 100 - - _ExtraThickOutlineWidth: 4 - - _ExtraThickOutlineWriteIntoDepthTexture: 0 - - _ExtraThickOutlineZOffset: -0.1 - - _ExtraThickOutlineZWrite: 0 - - _Face3DRimLightAndShadow_CheekRimLightIntensity: 1 - - _Face3DRimLightAndShadow_CheekRimLightSoftness: 0.1 - - _Face3DRimLightAndShadow_CheekRimLightThreshold: 0.7 - - _Face3DRimLightAndShadow_CheekShadowIntensity: 1 - - _Face3DRimLightAndShadow_CheekShadowSoftness: 0.1 - - _Face3DRimLightAndShadow_CheekShadowThreshold: 0.7 - - _Face3DRimLightAndShadow_NoseRimLightIntensity: 1 - - _Face3DRimLightAndShadow_NoseShadowIntensity: 1 - - _FaceAreaCameraDepthTextureZWriteOffset: 0.04 - - _FaceMaskMapInvertColor: 0 - - _FaceMaskMapRemapEnd: 1 - - _FaceMaskMapRemapMinMaxSlider: 1 - - _FaceMaskMapRemapStart: 0 - - _FaceShadowBrightness: 1 - - _FaceShadowGradientIntensity: 1 - - _FaceShadowGradientMapFaceMidPoint: 0.5 - - _FaceShadowGradientMapInvertColor: 0 - - _FaceShadowGradientMapPreset: 0 - - _FaceShadowGradientMapUVIndex: 0 - - _FaceShadowGradientMapUVxInvert: 1 - - _FaceShadowGradientMaskMapInvertColor: 0 - - _FaceShadowGradientMaskMapUVIndex: 0 - - _FaceShadowGradientOffset: 0.1 - - _FaceShadowGradientResultSoftness: 0.005 - - _FaceShadowGradientThresholdMax: 1 - - _FaceShadowGradientThresholdMin: 0 - - _FaceShadowGradientThresholdMinMax: 1 - - _FixFaceNormalAmount: 1 - - _FixFaceNormalAmountPerMaterial: 1 - - _FixFaceNormalUseFlattenOrProxySphereMethod: 0 - - _ForceFinalOutputAlphaEqualsOne: 0 - - _GGXDirectSpecularSmoothnessMultiplier: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _HairStrandSpecularMainExponent: 256 - - _HairStrandSpecularMainIntensity: 1 - - _HairStrandSpecularMixWithBaseMapColor: 0.5 - - _HairStrandSpecularOverallIntensity: 1 - - _HairStrandSpecularSecondExponent: 128 - - _HairStrandSpecularSecondIntensity: 1 - - _HairStrandSpecularShapeFrequency: 750 - - _HairStrandSpecularShapePositionOffset: 0 - - _HairStrandSpecularShapeShift: 0.015 - - _HairStrandSpecularTintMapUsage: 1 - - _HairStrandSpecularUVDirection: 0 - - _HairStrandSpecularUVIndex: 0 - - _IgnoreDefaultMainLightFaceShadow: 1 - - _IndirectLightFlatten: 1 - - _IsFace: 0 - - _IsSkin: 0 - - _LightingStyleDirectionalLightRenderFacePreset: 0 - - _LightingStyleFaceOverrideGroup: 0 - - _LightingStyleGroup: 0 - - _LitToShadowTransitionAreaHueOffset: 0.01 - - _LitToShadowTransitionAreaIntensity: 1 - - _LitToShadowTransitionAreaSaturationBoost: 0.5 - - _LitToShadowTransitionAreaValueMul: 1 - - _MainLightIgnoreCelShade: 0 - - _MainLightIgnoreCelShadeForFaceArea: 0 - - _MainLightNonSkinDiffuseNormalMapStrength: 1 - - _MainLightSkinDiffuseNormalMapStrength: 1 - - _MatCapAdditiveApplytoFaces: 0 - - _MatCapAdditiveExtractBrightArea: 0 - - _MatCapAdditiveIntensity: 1 - - _MatCapAdditiveMapAlphaAsMask: 0 - - _MatCapAdditiveMaskMapInvertColor: 0 - - _MatCapAdditiveMaskMapRemapEnd: 1 - - _MatCapAdditiveMaskMapRemapMinMaxSlider: 1 - - _MatCapAdditiveMaskMapRemapStart: 0 - - _MatCapAdditiveMixWithBaseMapColor: 0.5 - - _MatCapAdditivePreset: 0 - - _MatCapAdditiveUvScale: 1 - - _MatCapAlphaBlendMapAlphaAsMask: 0 - - _MatCapAlphaBlendMaskMapInvertColor: 0 - - _MatCapAlphaBlendMaskMapRemapEnd: 1 - - _MatCapAlphaBlendMaskMapRemapMinMaxSlider: 1 - - _MatCapAlphaBlendMaskMapRemapStart: 0 - - _MatCapAlphaBlendPreset: 0 - - _MatCapAlphaBlendUsage: 1 - - _MatCapAlphaBlendUvScale: 1 - - _MatCapOcclusionIntensity: 1 - - _MatCapOcclusionMapAlphaAsMask: 0 - - _MatCapOcclusionMapRemapEnd: 1 - - _MatCapOcclusionMapRemapMinMaxSlider: 1 - - _MatCapOcclusionMapRemapStart: 0 - - _MatCapOcclusionMaskMapInvert: 0 - - _MatCapOcclusionMaskMapRemapEnd: 1 - - _MatCapOcclusionMaskMapRemapMinMaxSlider: 1 - - _MatCapOcclusionMaskMapRemapStart: 0 - - _MatCapOcclusionPreset: 0 - - _MatCapOcclusionUvScale: 1 - - _Metallic: 0 - - _MultiplyBRPColor: 0 - - _MultiplyBaseColorToEmissionColor: 0 - - _MultiplyBaseColorToSpecularColor: 0.5 - - _MultiplyLightColorToEmissionColor: 0 - - _NiloToonSelfShadowIntensity: 1 - - _NiloToonSelfShadowIntensityForFace: 0 - - _NiloToonSelfShadowIntensityForNonFace: 1 - - _NiloToonSelfShadowMappingDepthBias: 0 - - _NiloToonSelfShadowMappingNormalBias: 0 - - _OcclusionMapApplytoFaces: 0 - - _OcclusionMapInvertColor: 0 - - _OcclusionMapStylePreset: 0 - - _OcclusionMapUVIndex: 0 - - _OcclusionRemapEnd: 1 - - _OcclusionRemapMinMaxSlider: 1 - - _OcclusionRemapStart: 0 - - _OcclusionStrength: 1 - - _OutlineApplyAutoWidthAdjustment: 1 - - _OutlineBaseZOffset: 0 - - _OutlineUniformLengthInViewSpace: 0 - - _OutlineUseBakedSmoothNormal: 1 - - _OutlineUsePreLightingReplaceColor: 0 - - _OutlineUseReplaceColor: 0 - - _OutlineWidth: 0.5 - - _OutlineWidthExtraMultiplier: 1 - - _OutlineZOffset: 0.0001 - - _OutlineZOffsetForFaceArea: 0.02 - - _OutlineZOffsetMaskRemapEnd: 1 - - _OutlineZOffsetMaskRemapMinMaxSlider: 1 - - _OutlineZOffsetMaskRemapStart: 0 - - _OutlineZOffsetMaskTexFromVertexColorInvertColor: 0 - - _OutlineZOffsetMaskTexInvertColor: 0 - - _OverrideAdditionalLightCelShadeParamForFaceArea: 1 - - _OverrideByFaceShadowTintColor: 1 - - _OverrideBySkinShadowTintColor: 1 - - _OverrideCelShadeParamForFaceArea: 1 - - _OverrideOutlineColorByTexIntensity: 1 - - _OverrideOutlineColorTexIgnoreAlphaChannel: 0 - - _OverrideShadowColorByTexIntensity: 1 - - _OverrideShadowColorByTexMode: 0 - - _OverrideShadowColorMaskMapInvertColor: 0 - - _OverrideShadowColorTexIgnoreAlphaChannel: 0 - - _Parallax: 0.005 - - _ParallaxApplyToUVIndex: 0 - - _ParallaxMapEnable: 0 - - _ParallaxSampleUVIndex: 0 - - _PassOnOffGroup: 0 - - _PerCharEffectDesaturatePercentage: 0 - - _PerCharEffectRimSharpnessPower: 4 - - _PerCharReceiveAverageURPShadowMap: 1 - - _PerCharReceiveNiloToonSelfShadowMap: 1 - - _PerCharReceiveStandardURPShadowMap: 1 - - _PerCharZOffset: 0 - - _PerCharacterBaseMapOverrideAmount: 0 - - _PerCharacterBaseMapOverrideBlendMode: 0 - - _PerCharacterBaseMapOverrideUVIndex: 0 - - _PerCharacterEffectGroup: 0 - - _PerCharacterOutlineWidthMultiply: 1 - - _PerCharacterRenderOutline: 1 - - _PerMaterialDissolveCutoff: -1 - - _PerMaterialDissolveEdgeWidth: 0.05 - - _PerMaterialDissolvePatternMapInvertColor: 0 - - _PerMaterialDissolvePatternMapStrength: 0.1 - - _PerMaterialDissolvePatternMapUVIndex: 0 - - _PerMaterialDissolvePatternMapUVTiling: 1 - - _PerMaterialDissolveThresholdMapInvertColor: 0 - - _PerMaterialDissolveThresholdMapUVIndex: 0 - - _PerMaterialDissolveThresholdMapUVTiling: 1 - - _PerMaterialEnableDepthTextureRimLightAndShadow: 1 - - _PerspectiveRemovalAmount: 0 - - _PerspectiveRemovalEndHeight: 1 - - _PerspectiveRemovalRadius: 1 - - _PerspectiveRemovalStartHeight: 0 - - _PreMultiplyAlphaIntoRGBOutput: 0 - - _QueueOffset: 0 - - _RampLightTexMode: 1 - - _RampLightingFaceAreaRemoveEffect: 1 - - _RampLightingNdotLRemapEnd: 1 - - _RampLightingNdotLRemapMinMaxSlider: 1 - - _RampLightingNdotLRemapStart: 0 - - _RampLightingSampleUvYTexInvertColor: 0 - - _RampLightingTexSampleUvY: 0.5 - - _RampLightingUvYRemapEnd: 1 - - _RampLightingUvYRemapMinMaxSlider: 1 - - _RampLightingUvYRemapStart: 0 - - _RampSpecularTexSampleUvY: 0.5 - - _RampSpecularWhitePoint: 0.5 - - _ReceiveEnvironmentReflection: 0 - - _ReceiveSelfShadowMappingPosOffset: 0 - - _ReceiveSelfShadowMappingPosOffsetForFaceArea: 1 - - _ReceiveShadows: 1 - - _ReceiveURPAdditionalLightShadowMapping: 1 - - _ReceiveURPAdditionalLightShadowMappingAmount: 1 - - _ReceiveURPAdditionalLightShadowMappingAmountForFace: 1 - - _ReceiveURPAdditionalLightShadowMappingAmountForNonFace: 1 - - _ReceiveURPShadowMapping: 1 - - _ReceiveURPShadowMappingAmount: 1 - - _ReceiveURPShadowMappingAmountForFace: 1 - - _ReceiveURPShadowMappingAmountForNonFace: 1 - - _RenderCharacter: 1 - - _RenderFaceGroup: 0 - - _RenderFacePreset: 0 - - _RenderOutline: 1 - - _RenderScreenSpaceOutline: 0 - - _RenderScreenSpaceOutlineV2: 0 - - _ScreenSpaceOutlineDepthSensitivity: 1 - - _ScreenSpaceOutlineDepthSensitivityIfFace: 1 - - _ScreenSpaceOutlineDepthSensitivityTexRemapEnd: 1 - - _ScreenSpaceOutlineDepthSensitivityTexRemapMinMaxSlider: 1 - - _ScreenSpaceOutlineDepthSensitivityTexRemapStart: 0 - - _ScreenSpaceOutlineNormalsSensitivity: 1 - - _ScreenSpaceOutlineNormalsSensitivityIfFace: 1 - - _ScreenSpaceOutlineNormalsSensitivityTexRemapEnd: 1 - - _ScreenSpaceOutlineNormalsSensitivityTexRemapMinMaxSlider: 1 - - _ScreenSpaceOutlineNormalsSensitivityTexRemapStart: 0 - - _ScreenSpaceOutlineUseReplaceColor: 0 - - _ScreenSpaceOutlineWidth: 1 - - _ScreenSpaceOutlineWidthIfFace: 0 - - _SelfShadowAreaHSVStrength: 1 - - _SelfShadowAreaHueOffset: 0 - - _SelfShadowAreaSaturationBoost: 0.2 - - _SelfShadowAreaValueMul: 0.7 - - _ShadingGradeMapApplyRange: 1 - - _ShadingGradeMapInvertColor: 0 - - _ShadingGradeMapMidPointOffset: 0 - - _ShadingGradeMapRemapEnd: 1 - - _ShadingGradeMapRemapMinMaxSlider: 1 - - _ShadingGradeMapRemapStart: 0 - - _ShadingGradeMapStrength: 1 - - _SkinFaceShadowColorPreset: 0 - - _SkinMaskMapAsIDMap: 0 - - _SkinMaskMapExtractFromID: 255 - - _SkinMaskMapInvertColor: 0 - - _SkinMaskMapRemapEnd: 1 - - _SkinMaskMapRemapMinMaxSlider: 1 - - _SkinMaskMapRemapStart: 0 - - _SkinShadowBrightness: 1 - - _Smoothness: 0.5 - - _SmoothnessGroup: 0 - - _SmoothnessMapInputIsRoughnessMap: 0 - - _SmoothnessMapRemapEnd: 1 - - _SmoothnessMapRemapMinMaxSlider: 1 - - _SmoothnessMapRemapStart: 0 - - _SmoothnessTextureChannel: 0 - - _SpecularApplytoFaces: 0 - - _SpecularAreaRemapMidPoint: 0.1 - - _SpecularAreaRemapRange: 0.05 - - _SpecularAreaRemapUsage: 0 - - _SpecularColorTintMapUsage: 1 - - _SpecularColorTintMapUseSecondUv: 0 - - _SpecularHighlights: 1 - - _SpecularIntensity: 1 - - _SpecularMapAsIDMap: 0 - - _SpecularMapExtractFromID: 255 - - _SpecularMapInvertColor: 0 - - _SpecularMapRemapEnd: 1 - - _SpecularMapRemapMinMaxSlider: 1 - - _SpecularMapRemapStart: 0 - - _SpecularMapUVIndex: 0 - - _SpecularReactToLightDirMode: 0 - - _SpecularShowInShadowArea: 0 - - _SpecularUseReplaceBlending: 0 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _StencilComp: 0 - - _StencilGroup: 0 - - _StencilPass: 0 - - _StencilPreset: 0 - - _StencilRef: 0 - - _SupportClothDynamics: 0 - - _Surface: 0 - - _SurfaceTypePreset: 0 - - _UIDisplayMode: 100 - - _UV0RotateSpeed: 0 - - _UV0RotatedAngle: 0 - - _UV1RotateSpeed: 0 - - _UV1RotatedAngle: 0 - - _UV2RotateSpeed: 0 - - _UV2RotatedAngle: 0 - - _UV3RotateSpeed: 0 - - _UV3RotatedAngle: 0 - - _UnityCameraDepthTextureWriteOutlineExtrudedPosition: 0 - - _UseAlphaOverrideTex: 0 - - _UseDepthTexRimLightAndShadowWidthMultiplierFromVertexColor: 0 - - _UseDepthTexRimLightAndShadowWidthTex: 0 - - _UseDepthTexRimLightMaskTex: 0 - - _UseDetailMap: 0 - - _UseEmission: 0 - - _UseFaceMaskMap: 0 - - _UseFaceShadowGradientMap: 0 - - _UseGGXDirectSpecular: 1 - - _UseHairStrandSpecularTintMap: 0 - - _UseKajiyaKaySpecular: 0 - - _UseMatCapAdditive: 0 - - _UseMatCapAlphaBlend: 0 - - _UseMatCapOcclusion: 0 - - _UseNiloToonSelfShadowIntensityMultiplierTex: 0 - - _UseNormalMap: 0 - - _UseOcclusion: 0 - - _UseOutlineTintColorMap: 0 - - _UseOutlineWidthMaskFromVertexColor: 0 - - _UseOutlineWidthTex: 0 - - _UseOutlineZOffsetMaskFromVertexColor: 0 - - _UseOutlineZOffsetTex: 0 - - _UseOverrideOutlineColorByTexture: 0 - - _UseOverrideShadowColorByTexture: 0 - - _UseRampLightingSampleUvYTex: 0 - - _UseRampLightingTex: 0 - - _UseRampSpecularSampleUvYTex: 0 - - _UseRampSpecularTex: 0 - - _UseShadingGradeMap: 0 - - _UseSkinMaskMap: 0 - - _UseSmoothnessMap: 0 - - _UseSpecular: 0 - - _UseSpecularColorTintMap: 0 - - _UseZOffsetMaskTex: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - - _ZOffset: 0 - - _ZOffsetEnable: 0 - - _ZOffsetMaskMapInvertColor: 0 - - _ZOffsetMultiplierForTraditionalOutlinePass: 1 - - _ZOffsetPreset: 0 - - _ZTest: 4 - - _ZWrite: 1 - m_Colors: - - _AlphaOverrideTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _BackFaceBaseMapReplaceColor: {r: 0, g: 0, b: 0, a: 0} - - _BackFaceTintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseColor2: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer10MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer10TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer10TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer10TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer10TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer1MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer1TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer1TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer1TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer1TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer2MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer2TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer2TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer2TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer2TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer3MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer3TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer3TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer3TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer3TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer4MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer4TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer4TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer4TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer4TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer5MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer5TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer5TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer5TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer5TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer6MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer6TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer6TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer6TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer6TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer7MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer7TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer7TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer7TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer7TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer8MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer8TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer8TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer8TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer8TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BaseMapStackingLayer9MaskTexChannel: {r: 0, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer9TexUVAnimSpeed: {r: 0, g: 0, b: 0, a: 0} - - _BaseMapStackingLayer9TexUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer9TexUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BaseMapStackingLayer9TintColor: {r: 1, g: 1, b: 1, a: 1} - - _BumpMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _BumpMapUVScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _CharacterAreaColorFillColor: {r: 1, g: 1, b: 1, a: 0.5} - - _CharacterAreaColorFillTextureUVScrollSpeed: {r: 0, g: 0, b: 0, a: 1} - - _CharacterAreaColorFillTextureUVTilingOffset: {r: 1, g: 1, b: 0, a: 0} - - _CharacterBoundCenterPosWS: {r: 0, g: 0, b: 0, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DepthTexRimLightAndShadowWidthMultiplierFromVertexColorChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _DepthTexRimLightAndShadowWidthTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _DepthTexRimLightMaskTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _DepthTexRimLightTintColor: {r: 1, g: 1, b: 1, a: 1} - - _DepthTexShadowTintColor: {r: 1, g: 1, b: 1, a: 1} - - _DepthTexShadowTintColorForFace: {r: 1, g: 0.85, b: 0.85, a: 1} - - _DetailMapsScaleTiling: {r: 1, g: 1, b: 0, a: 0} - - _DetailMaskChannelMask: {r: 1, g: 0, b: 0, a: 0} - - _DissolveBorderTintColor: {r: 0, g: 4, b: 4, a: 1} - - _DynamicEyeFinalTintColor: {r: 1, g: 1, b: 1, a: 1} - - _DynamicEyePupilColor: {r: 1, g: 1, b: 1, a: 1} - - _DynamicEyePupilMaskTexChannelMask: {r: 0, g: 0, b: 0, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissionMapSingleChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _EmissionMapTilingXyOffsetZw: {r: 1, g: 1, b: 0, a: 0} - - _EmissionMapUVScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _EmissionMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _EnvironmentReflectionColor: {r: 1, g: 1, b: 1, a: 1} - - _EnvironmentReflectionMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _ExtraThickOutlineColor: {r: 1, g: 1, b: 1, a: 1} - - _ExtraThickOutlineViewSpacePosOffset: {r: 0, g: 0, b: 0, a: 1} - - _Face3DRimLightAndShadow_CheekRimLightMaskMapChannel: {r: 1, g: 0, b: 0, a: 0} - - _Face3DRimLightAndShadow_CheekRimLightTintColor: {r: 1, g: 1, b: 1, a: 1} - - _Face3DRimLightAndShadow_CheekShadowMaskMapChannel: {r: 1, g: 0, b: 0, a: 0} - - _Face3DRimLightAndShadow_CheekShadowTintColor: {r: 1, g: 1, b: 1, a: 1} - - _Face3DRimLightAndShadow_NoseRimLightMaskMapChannel: {r: 1, g: 0, b: 0, a: 0} - - _Face3DRimLightAndShadow_NoseRimLightTintColor: {r: 1, g: 1, b: 1, a: 1} - - _Face3DRimLightAndShadow_NoseShadowMaskMapChannel: {r: 1, g: 0, b: 0, a: 0} - - _Face3DRimLightAndShadow_NoseShadowTintColor: {r: 1, g: 1, b: 1, a: 1} - - _FaceForwardDirection: {r: 0, g: 0, b: 1, a: 1} - - _FaceMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowGradientMapChannel: {r: 1, g: 0, b: 0, a: 0} - - _FaceShadowGradientMapUVCenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _FaceShadowGradientMapUVScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _FaceShadowGradientMaskMapChannel: {r: 0, g: 1, b: 0, a: 0} - - _FaceShadowTintColor: {r: 1, g: 0.9, b: 0.9, a: 1} - - _FaceShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - - _FaceUpDirection: {r: 0, g: 1, b: 0, a: 1} - - _HairStrandSpecularMainColor: {r: 1, g: 1, b: 1, a: 1} - - _HairStrandSpecularSecondColor: {r: 1, g: 1, b: 1, a: 1} - - _HairStrandSpecularTintMapTilingXyOffsetZw: {r: 1, g: 1, b: 0, a: 0} - - _HeadBonePositionWS: {r: 0, g: 0, b: 0, a: 1} - - _LitToShadowTransitionAreaTintColor: {r: 1, g: 1, b: 1, a: 1} - - _LowSaturationFallbackColor: {r: 0.3764706, g: 0.4141177, b: 0.5019608, a: 0} - - _MatCapAdditiveColor: {r: 1, g: 1, b: 1, a: 1} - - _MatCapAdditiveMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _MatCapAlphaBlendMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _MatCapAlphaBlendTintColor: {r: 1, g: 1, b: 1, a: 1} - - _MatCapOcclusionMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _MatCapOcclusionMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _MatCapUVTiling: {r: 1, g: 1, b: 0, a: 0} - - _NiloToonSelfShadowMappingTintColor: {r: 1, g: 1, b: 1, a: 1} - - _OcclusionMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _OutlineOcclusionAreaTintColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlinePreLightingReplaceColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineTintColor: {r: 0.25, g: 0.25, b: 0.25, a: 1} - - _OutlineTintColorSkinAreaOverride: {r: 0.4, g: 0.2, b: 0.2, a: 1} - - _OutlineWidthMaskFromVertexColor: {r: 0, g: 1, b: 0, a: 0} - - _OutlineWidthTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _OutlineZOffsetMaskFromVertexColor: {r: 0, g: 1, b: 0, a: 0} - - _OutlineZOffsetMaskTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _OverrideOutlineColorTexTintColor: {r: 1, g: 1, b: 1, a: 1} - - _OverrideShadowColorMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _OverrideShadowColorTexTintColor: {r: 1, g: 1, b: 1, a: 1} - - _PerCharEffectAddColor: {r: 0, g: 0, b: 0, a: 1} - - _PerCharEffectLerpColor: {r: 1, g: 1, b: 0, a: 0} - - _PerCharEffectRimColor: {r: 0, g: 0, b: 0, a: 1} - - _PerCharEffectTintColor: {r: 1, g: 1, b: 1, a: 1} - - _PerCharacterBaseColorTint: {r: 1, g: 1, b: 1, a: 1} - - _PerCharacterBaseMapOverrideTilingOffset: {r: 1, g: 1, b: 0, a: 0} - - _PerCharacterBaseMapOverrideTintColor: {r: 1, g: 1, b: 1, a: 1} - - _PerCharacterBaseMapOverrideUVScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _PerCharacterOutlineColorLerp: {r: 1, g: 1, b: 1, a: 0} - - _PerCharacterOutlineColorTint: {r: 1, g: 1, b: 1, a: 1} - - _PerMaterialDissolveEdgeColor: {r: 16, g: 8, b: 0, a: 1} - - _PerMaterialDissolvePatternMapChannelMask: {r: 1, g: 0, b: 0, a: 0} - - _PerMaterialDissolveThresholdMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _RampLightingSampleUvYTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _ScreenSpaceOutlineDepthSensitivityTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _ScreenSpaceOutlineNormalsSensitivityTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _ScreenSpaceOutlineOcclusionAreaTintColor: {r: 1, g: 1, b: 1, a: 1} - - _ScreenSpaceOutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1} - - _ScreenSpaceOutlineTintColor: {r: 0.1, g: 0.1, b: 0.1, a: 1} - - _SelfShadowTintColor: {r: 1, g: 1, b: 1, a: 1} - - _ShadingGradeMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - - _SkinShadowTintColor: {r: 1, g: 0.8, b: 0.8, a: 1} - - _SkinShadowTintColor2: {r: 1, g: 1, b: 1, a: 1} - - _SmoothnessMapChannelMask: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} - - _SpecularColorTintMapTilingXyOffsetZw: {r: 1, g: 1, b: 0, a: 0} - - _SpecularMapChannelMask: {r: 0, g: 0, b: 1, a: 0} - - _URPShadowMappingTintColor: {r: 1, g: 1, b: 1, a: 1} - - _UV0CenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _UV0ScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _UV0ScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _UV1CenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _UV1ScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _UV1ScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _UV2CenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _UV2ScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _UV2ScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _UV3CenterPivotScalePos: {r: 1, g: 1, b: 0, a: 0} - - _UV3ScaleOffset: {r: 1, g: 1, b: 0, a: 0} - - _UV3ScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - - _ZOffsetMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - m_BuildTextureStacks: [] - m_AllowLocking: 1 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts.meta b/Assets/Scripts/Editor/AnimationTools.meta similarity index 77% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts.meta rename to Assets/Scripts/Editor/AnimationTools.meta index 8e9e090b..3b4cb8a4 100644 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts.meta +++ b/Assets/Scripts/Editor/AnimationTools.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3a53342f3b4a81240ada88d8ca085116 +guid: 20ac0b0b555cf8240a87cc7062d409b1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Editor/HumanPoseClipApplier.cs b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipApplier.cs similarity index 98% rename from Assets/Scripts/Editor/HumanPoseClipApplier.cs rename to Assets/Scripts/Editor/AnimationTools/HumanPoseClipApplier.cs index 5be1d580..781e5c3f 100644 --- a/Assets/Scripts/Editor/HumanPoseClipApplier.cs +++ b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipApplier.cs @@ -19,7 +19,7 @@ public class HumanPoseClipApplier : EditorWindow private string jsonPath; private bool useJsonFile = false; - [MenuItem("Tools/Animation/Apply Human Pose Clip")] + [MenuItem("Tools/Animation Tools/Human Pose Clip Applier")] public static void ShowWindow() { GetWindow("Human Pose Clip Applier"); diff --git a/Assets/Scripts/Editor/HumanPoseClipApplier.cs.meta b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipApplier.cs.meta similarity index 100% rename from Assets/Scripts/Editor/HumanPoseClipApplier.cs.meta rename to Assets/Scripts/Editor/AnimationTools/HumanPoseClipApplier.cs.meta diff --git a/Assets/Scripts/Editor/HumanPoseClipCreator.cs b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipCreator.cs similarity index 98% rename from Assets/Scripts/Editor/HumanPoseClipCreator.cs rename to Assets/Scripts/Editor/AnimationTools/HumanPoseClipCreator.cs index 0a9ae420..a5df5eab 100644 --- a/Assets/Scripts/Editor/HumanPoseClipCreator.cs +++ b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipCreator.cs @@ -9,7 +9,7 @@ public class HumanPoseClipCreator : EditorWindow private string assetName = "NewPoseClip"; private string savePath = "Assets/Resources"; - [MenuItem("Tools/Animation/Create Human Pose Clip")] + [MenuItem("Tools/Animation Tools/Human Pose Clip Creator")] public static void ShowWindow() { GetWindow("Human Pose Clip Creator"); diff --git a/Assets/Scripts/Editor/HumanPoseClipCreator.cs.meta b/Assets/Scripts/Editor/AnimationTools/HumanPoseClipCreator.cs.meta similarity index 100% rename from Assets/Scripts/Editor/HumanPoseClipCreator.cs.meta rename to Assets/Scripts/Editor/AnimationTools/HumanPoseClipCreator.cs.meta diff --git a/Assets/Scripts/Editor/PoseRecorderWindow.cs b/Assets/Scripts/Editor/AnimationTools/PoseRecorderWindow.cs similarity index 99% rename from Assets/Scripts/Editor/PoseRecorderWindow.cs rename to Assets/Scripts/Editor/AnimationTools/PoseRecorderWindow.cs index e7656485..c3d12560 100644 --- a/Assets/Scripts/Editor/PoseRecorderWindow.cs +++ b/Assets/Scripts/Editor/AnimationTools/PoseRecorderWindow.cs @@ -75,7 +75,7 @@ namespace Streamingle.Editor HumanBodyBones.RightLittleDistal }; - [MenuItem("Tools/Pose Recorder")] + [MenuItem("Tools/Animation Tools/Pose Recorder")] public static void ShowWindow() { GetWindow("포즈 기록기"); diff --git a/Assets/Scripts/Editor/PoseRecorderWindow.cs.meta b/Assets/Scripts/Editor/AnimationTools/PoseRecorderWindow.cs.meta similarity index 100% rename from Assets/Scripts/Editor/PoseRecorderWindow.cs.meta rename to Assets/Scripts/Editor/AnimationTools/PoseRecorderWindow.cs.meta diff --git a/Assets/Scripts/Editor/PoseRotationBaker.cs b/Assets/Scripts/Editor/AnimationTools/PoseRotationBaker.cs similarity index 99% rename from Assets/Scripts/Editor/PoseRotationBaker.cs rename to Assets/Scripts/Editor/AnimationTools/PoseRotationBaker.cs index 959bb228..2ad90feb 100644 --- a/Assets/Scripts/Editor/PoseRotationBaker.cs +++ b/Assets/Scripts/Editor/AnimationTools/PoseRotationBaker.cs @@ -22,7 +22,7 @@ namespace Streamingle.Editor // 미리보기 옵션 private bool showBoneInfo = true; - [MenuItem("Tools/Pose Rotation Baker")] + [MenuItem("Tools/Animation Tools/Pose Rotation Baker")] public static void ShowWindow() { GetWindow("포즈 로테이션 베이커"); diff --git a/Assets/Scripts/Editor/PoseRotationBaker.cs.meta b/Assets/Scripts/Editor/AnimationTools/PoseRotationBaker.cs.meta similarity index 100% rename from Assets/Scripts/Editor/PoseRotationBaker.cs.meta rename to Assets/Scripts/Editor/AnimationTools/PoseRotationBaker.cs.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip.meta b/Assets/Scripts/Editor/BoneTools.meta similarity index 67% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip.meta rename to Assets/Scripts/Editor/BoneTools.meta index 931f4987..3e47bef2 100644 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip.meta +++ b/Assets/Scripts/Editor/BoneTools.meta @@ -1,5 +1,6 @@ fileFormatVersion: 2 -guid: 7a76ec1c32272a242936808ac20449ad +guid: 5e26c5e61de10ef428871a3d3fdb4eb9 +folderAsset: yes DefaultImporter: externalObjects: {} userData: diff --git a/Assets/Scripts/Editor/BoneRendererContextMenu.cs b/Assets/Scripts/Editor/BoneTools/BoneRendererContextMenu.cs similarity index 100% rename from Assets/Scripts/Editor/BoneRendererContextMenu.cs rename to Assets/Scripts/Editor/BoneTools/BoneRendererContextMenu.cs diff --git a/Assets/Scripts/Editor/BoneRendererContextMenu.cs.meta b/Assets/Scripts/Editor/BoneTools/BoneRendererContextMenu.cs.meta similarity index 100% rename from Assets/Scripts/Editor/BoneRendererContextMenu.cs.meta rename to Assets/Scripts/Editor/BoneTools/BoneRendererContextMenu.cs.meta diff --git a/Assets/Scripts/YAMO_Scripts/FindUnusedBones.cs b/Assets/Scripts/Editor/BoneTools/FindUnusedBones.cs similarity index 98% rename from Assets/Scripts/YAMO_Scripts/FindUnusedBones.cs rename to Assets/Scripts/Editor/BoneTools/FindUnusedBones.cs index a53fa1a7..98218744 100644 --- a/Assets/Scripts/YAMO_Scripts/FindUnusedBones.cs +++ b/Assets/Scripts/Editor/BoneTools/FindUnusedBones.cs @@ -6,7 +6,7 @@ public class FindUnusedBones : EditorWindow { private List excludeStrings = new List(); // 제외할 문자열 리스트 - [MenuItem("Tools/Find Unused Bones")] + [MenuItem("Tools/Bone Tools/Find Unused Bones")] public static void ShowWindow() { GetWindow("Find Unused Bones"); diff --git a/Assets/Scripts/YAMO_Scripts/FindUnusedBones.cs.meta b/Assets/Scripts/Editor/BoneTools/FindUnusedBones.cs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/FindUnusedBones.cs.meta rename to Assets/Scripts/Editor/BoneTools/FindUnusedBones.cs.meta diff --git a/Assets/Scripts/Editor/HumanBoneRenamer.cs b/Assets/Scripts/Editor/BoneTools/HumanBoneRenamer.cs similarity index 99% rename from Assets/Scripts/Editor/HumanBoneRenamer.cs rename to Assets/Scripts/Editor/BoneTools/HumanBoneRenamer.cs index abf2b8e0..f98349b3 100644 --- a/Assets/Scripts/Editor/HumanBoneRenamer.cs +++ b/Assets/Scripts/Editor/BoneTools/HumanBoneRenamer.cs @@ -83,7 +83,7 @@ public class HumanBoneRenamer : EditorWindow { HumanBodyBones.RightLittleDistal, "RightLittleDistal" } }; - [MenuItem("Tools/Human Bone Renamer")] + [MenuItem("Tools/Bone Tools/Human Bone Renamer")] public static void ShowWindow() { GetWindow("Human Bone Renamer"); diff --git a/Assets/Scripts/Editor/HumanBoneRenamer.cs.meta b/Assets/Scripts/Editor/BoneTools/HumanBoneRenamer.cs.meta similarity index 100% rename from Assets/Scripts/Editor/HumanBoneRenamer.cs.meta rename to Assets/Scripts/Editor/BoneTools/HumanBoneRenamer.cs.meta diff --git a/Assets/Scripts/Editor/MotionCaptureFileRenamer.cs b/Assets/Scripts/Editor/MotionCaptureFileRenamer.cs deleted file mode 100644 index c76973d7..00000000 --- a/Assets/Scripts/Editor/MotionCaptureFileRenamer.cs +++ /dev/null @@ -1,691 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System; - -/// -/// 모션 캡쳐 파일 네이밍 편의성 툴 -/// - 선택한 파일들에 일괄적으로 접미사/접두사 추가 -/// - 번호 매기기, 날짜 스탬프 등 다양한 네이밍 패턴 지원 -/// -public class MotionCaptureFileRenamer : EditorWindow -{ - #region Nested Classes - [Serializable] - public class NamingPreset - { - public string presetName = "New Preset"; - public NamingMode mode = NamingMode.Suffix; - public string customText = ""; - public int startNumber = 1; - public int numberPadding = 3; - public bool includeDate = false; - public bool includeTime = false; - public string dateFormat = "yyyyMMdd"; - public string timeFormat = "HHmmss"; - public string separator = "_"; - } - - public enum NamingMode - { - Suffix, // 파일명 뒤에 추가 - Prefix, // 파일명 앞에 추가 - Replace, // 전체 이름 변경 - Sequential // 순차 번호 - } - #endregion - - #region Fields - private List selectedFiles = new List(); - private Vector2 scrollPosition; - - // Naming settings - private NamingMode namingMode = NamingMode.Suffix; - private string customText = "_ok"; - private int startNumber = 1; - private int numberPadding = 3; - private bool includeDate = false; - private bool includeTime = false; - private string dateFormat = "yyyyMMdd"; - private string timeFormat = "HHmmss"; - private string separator = "_"; - - // Preview - private bool showPreview = true; - private Dictionary previewNames = new Dictionary(); - - // Presets - private List presets = new List(); - private int selectedPresetIndex = -1; - private bool showPresetSection = false; - private string newPresetName = "My Preset"; - - // UI Style - private GUIStyle headerStyle; - private GUIStyle boxStyle; - private Color successColor = new Color(0.5f, 1f, 0.5f, 0.3f); - private Color warningColor = new Color(1f, 1f, 0.5f, 0.3f); - private Color errorColor = new Color(1f, 0.5f, 0.5f, 0.3f); - #endregion - - #region Window Initialization - [MenuItem("Tools/Motion Capture/File Renamer")] - public static void ShowWindow() - { - var window = GetWindow("MoCap File Renamer"); - window.minSize = new Vector2(450, 500); - } - - private void OnEnable() - { - LoadPresets(); - RefreshSelectedFiles(); - } - - private void OnDisable() - { - SavePresets(); - } - - private void InitializeStyles() - { - if (headerStyle == null) - { - headerStyle = new GUIStyle(EditorStyles.boldLabel) - { - fontSize = 14, - alignment = TextAnchor.MiddleLeft - }; - } - - if (boxStyle == null) - { - boxStyle = new GUIStyle(EditorStyles.helpBox) - { - padding = new RectOffset(10, 10, 10, 10) - }; - } - } - #endregion - - #region GUI - private void OnGUI() - { - InitializeStyles(); - - scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); - - DrawHeader(); - DrawFileSelectionSection(); - DrawNamingOptionsSection(); - DrawPreviewSection(); - DrawPresetsSection(); - DrawActionButtons(); - - EditorGUILayout.EndScrollView(); - } - - private void DrawHeader() - { - EditorGUILayout.Space(10); - EditorGUILayout.LabelField("Motion Capture File Renamer", headerStyle); - EditorGUILayout.LabelField("모션 캡쳐 파일 일괄 네이밍 도구", EditorStyles.miniLabel); - EditorGUILayout.Space(10); - EditorGUILayout.HelpBox("프로젝트 뷰에서 파일을 선택하거나 아래 영역에 드래그 앤 드롭하세요.", MessageType.Info); - EditorGUILayout.Space(5); - } - - private void DrawFileSelectionSection() - { - EditorGUILayout.BeginVertical(boxStyle); - EditorGUILayout.LabelField("📁 File Selection", EditorStyles.boldLabel); - EditorGUILayout.Space(5); - - // Drag and drop area - Rect dropArea = GUILayoutUtility.GetRect(0f, 50f, GUILayout.ExpandWidth(true)); - GUI.Box(dropArea, "Drag & Drop Files Here\n또는 'Load Selected Files' 버튼 클릭", EditorStyles.helpBox); - - HandleDragAndDrop(dropArea); - - EditorGUILayout.Space(5); - - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button("Load Selected Files", GUILayout.Height(30))) - { - RefreshSelectedFiles(); - } - if (GUILayout.Button("Clear", GUILayout.Width(80), GUILayout.Height(30))) - { - selectedFiles.Clear(); - previewNames.Clear(); - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Space(5); - EditorGUILayout.LabelField($"Selected Files: {selectedFiles.Count}", EditorStyles.miniLabel); - - if (selectedFiles.Count > 0) - { - EditorGUILayout.Space(5); - EditorGUILayout.LabelField("Current Files:", EditorStyles.miniBoldLabel); - - var rect = EditorGUILayout.BeginVertical(GUILayout.MaxHeight(100)); - scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, GUILayout.MaxHeight(100)); - - for (int i = 0; i < selectedFiles.Count; i++) - { - if (selectedFiles[i] != null) - { - EditorGUILayout.LabelField($"{i + 1}. {selectedFiles[i].name}", EditorStyles.miniLabel); - } - } - - EditorGUILayout.EndScrollView(); - EditorGUILayout.EndVertical(); - } - - EditorGUILayout.EndVertical(); - EditorGUILayout.Space(10); - } - - private void DrawNamingOptionsSection() - { - EditorGUILayout.BeginVertical(boxStyle); - EditorGUILayout.LabelField("⚙️ Naming Options", EditorStyles.boldLabel); - EditorGUILayout.Space(5); - - // Naming mode - namingMode = (NamingMode)EditorGUILayout.EnumPopup("Naming Mode", namingMode); - EditorGUILayout.Space(5); - - switch (namingMode) - { - case NamingMode.Suffix: - DrawSuffixOptions(); - break; - case NamingMode.Prefix: - DrawPrefixOptions(); - break; - case NamingMode.Replace: - DrawReplaceOptions(); - break; - case NamingMode.Sequential: - DrawSequentialOptions(); - break; - } - - EditorGUILayout.Space(5); - - // Common options - EditorGUILayout.LabelField("Additional Options", EditorStyles.miniBoldLabel); - separator = EditorGUILayout.TextField("Separator", separator); - includeDate = EditorGUILayout.Toggle("Include Date", includeDate); - if (includeDate) - { - EditorGUI.indentLevel++; - dateFormat = EditorGUILayout.TextField("Date Format", dateFormat); - EditorGUILayout.LabelField($"Example: {DateTime.Now.ToString(dateFormat)}", EditorStyles.miniLabel); - EditorGUI.indentLevel--; - } - - includeTime = EditorGUILayout.Toggle("Include Time", includeTime); - if (includeTime) - { - EditorGUI.indentLevel++; - timeFormat = EditorGUILayout.TextField("Time Format", timeFormat); - EditorGUILayout.LabelField($"Example: {DateTime.Now.ToString(timeFormat)}", EditorStyles.miniLabel); - EditorGUI.indentLevel--; - } - - EditorGUILayout.EndVertical(); - EditorGUILayout.Space(10); - } - - private void DrawSuffixOptions() - { - EditorGUILayout.HelpBox("파일명 뒤에 텍스트를 추가합니다.\n예: Animation.anim → Animation_ok.anim", MessageType.None); - customText = EditorGUILayout.TextField("Suffix Text", customText); - - EditorGUILayout.Space(5); - EditorGUILayout.LabelField("Quick Presets:", EditorStyles.miniBoldLabel); - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button("_ok")) customText = "_ok"; - if (GUILayout.Button("_final")) customText = "_final"; - if (GUILayout.Button("_test")) customText = "_test"; - if (GUILayout.Button("_backup")) customText = "_backup"; - EditorGUILayout.EndHorizontal(); - } - - private void DrawPrefixOptions() - { - EditorGUILayout.HelpBox("파일명 앞에 텍스트를 추가합니다.\n예: Animation.anim → Take001_Animation.anim", MessageType.None); - customText = EditorGUILayout.TextField("Prefix Text", customText); - - EditorGUILayout.Space(5); - EditorGUILayout.LabelField("Quick Presets:", EditorStyles.miniBoldLabel); - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button("Take001")) customText = "Take001"; - if (GUILayout.Button("MoCap")) customText = "MoCap"; - if (GUILayout.Button("Test")) customText = "Test"; - if (GUILayout.Button("WIP")) customText = "WIP"; - EditorGUILayout.EndHorizontal(); - } - - private void DrawReplaceOptions() - { - EditorGUILayout.HelpBox("파일명을 완전히 새로운 이름으로 변경합니다.\n(확장자는 유지됩니다)", MessageType.Warning); - customText = EditorGUILayout.TextField("New Base Name", customText); - - EditorGUILayout.Space(5); - bool autoNumber = EditorGUILayout.Toggle("Auto Number", true); - if (autoNumber) - { - EditorGUI.indentLevel++; - startNumber = EditorGUILayout.IntField("Start Number", startNumber); - numberPadding = EditorGUILayout.IntSlider("Number Padding", numberPadding, 1, 5); - EditorGUI.indentLevel--; - } - } - - private void DrawSequentialOptions() - { - EditorGUILayout.HelpBox("선택한 파일들에 순차적으로 번호를 부여합니다.\n예: Take001, Take002, Take003...", MessageType.None); - - customText = EditorGUILayout.TextField("Base Name", customText); - startNumber = EditorGUILayout.IntField("Start Number", startNumber); - numberPadding = EditorGUILayout.IntSlider("Number Padding", numberPadding, 1, 5); - - EditorGUILayout.Space(5); - EditorGUILayout.LabelField($"Example: {customText}{startNumber.ToString().PadLeft(numberPadding, '0')}", EditorStyles.miniLabel); - } - - private void DrawPreviewSection() - { - showPreview = EditorGUILayout.Foldout(showPreview, "🔍 Preview", true, EditorStyles.foldoutHeader); - - if (showPreview) - { - EditorGUILayout.BeginVertical(boxStyle); - - if (selectedFiles.Count == 0) - { - EditorGUILayout.HelpBox("파일을 먼저 선택하세요.", MessageType.Info); - } - else - { - if (GUILayout.Button("Generate Preview", GUILayout.Height(25))) - { - GeneratePreview(); - } - - if (previewNames.Count > 0) - { - EditorGUILayout.Space(5); - EditorGUILayout.LabelField("변경 예정:", EditorStyles.miniBoldLabel); - - EditorGUILayout.BeginVertical(EditorStyles.helpBox); - Vector2 previewScroll = EditorGUILayout.BeginScrollView(scrollPosition, GUILayout.MaxHeight(150)); - - foreach (var kvp in previewNames) - { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField(kvp.Key, GUILayout.Width(150)); - EditorGUILayout.LabelField("→", GUILayout.Width(20)); - EditorGUILayout.LabelField(kvp.Value, EditorStyles.boldLabel); - EditorGUILayout.EndHorizontal(); - } - - EditorGUILayout.EndScrollView(); - EditorGUILayout.EndVertical(); - } - } - - EditorGUILayout.EndVertical(); - } - - EditorGUILayout.Space(10); - } - - private void DrawPresetsSection() - { - showPresetSection = EditorGUILayout.Foldout(showPresetSection, "💾 Presets", true, EditorStyles.foldoutHeader); - - if (showPresetSection) - { - EditorGUILayout.BeginVertical(boxStyle); - - EditorGUILayout.BeginHorizontal(); - newPresetName = EditorGUILayout.TextField("Preset Name", newPresetName); - if (GUILayout.Button("Save Current", GUILayout.Width(100))) - { - SaveCurrentAsPreset(); - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Space(5); - - if (presets.Count > 0) - { - EditorGUILayout.LabelField("Saved Presets:", EditorStyles.miniBoldLabel); - - for (int i = 0; i < presets.Count; i++) - { - EditorGUILayout.BeginHorizontal(); - - if (GUILayout.Button(presets[i].presetName, GUILayout.Height(25))) - { - LoadPreset(i); - } - - if (GUILayout.Button("×", GUILayout.Width(25), GUILayout.Height(25))) - { - if (EditorUtility.DisplayDialog("Delete Preset", - $"'{presets[i].presetName}' 프리셋을 삭제하시겠습니까?", "Delete", "Cancel")) - { - presets.RemoveAt(i); - SavePresets(); - } - } - - EditorGUILayout.EndHorizontal(); - } - } - else - { - EditorGUILayout.HelpBox("저장된 프리셋이 없습니다.", MessageType.Info); - } - - EditorGUILayout.EndVertical(); - } - - EditorGUILayout.Space(10); - } - - private void DrawActionButtons() - { - EditorGUILayout.BeginVertical(boxStyle); - - GUI.enabled = selectedFiles.Count > 0; - - EditorGUILayout.BeginHorizontal(); - - if (GUILayout.Button("Apply Rename", GUILayout.Height(40))) - { - if (EditorUtility.DisplayDialog("Confirm Rename", - $"{selectedFiles.Count}개의 파일 이름을 변경하시겠습니까?\n\n이 작업은 Undo로 되돌릴 수 있습니다.", - "Rename", "Cancel")) - { - ApplyRename(); - } - } - - EditorGUILayout.EndHorizontal(); - - GUI.enabled = true; - - EditorGUILayout.EndVertical(); - } - #endregion - - #region File Selection - private void RefreshSelectedFiles() - { - selectedFiles.Clear(); - - var selected = Selection.objects; - foreach (var obj in selected) - { - string path = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(path) && !AssetDatabase.IsValidFolder(path)) - { - selectedFiles.Add(obj); - } - } - - previewNames.Clear(); - Debug.Log($"Loaded {selectedFiles.Count} files"); - } - - private void HandleDragAndDrop(Rect dropArea) - { - Event evt = Event.current; - - if (dropArea.Contains(evt.mousePosition)) - { - if (evt.type == EventType.DragUpdated) - { - DragAndDrop.visualMode = DragAndDropVisualMode.Copy; - evt.Use(); - } - else if (evt.type == EventType.DragPerform) - { - DragAndDrop.AcceptDrag(); - - foreach (var obj in DragAndDrop.objectReferences) - { - string path = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(path) && !AssetDatabase.IsValidFolder(path)) - { - if (!selectedFiles.Contains(obj)) - { - selectedFiles.Add(obj); - } - } - } - - evt.Use(); - } - } - } - #endregion - - #region Naming Logic - private void GeneratePreview() - { - previewNames.Clear(); - - for (int i = 0; i < selectedFiles.Count; i++) - { - var file = selectedFiles[i]; - if (file == null) continue; - - string originalName = file.name; - string newName = GenerateNewName(originalName, i); - - previewNames[originalName] = newName; - } - } - - private string GenerateNewName(string originalName, int index) - { - string baseName = originalName; - string result = ""; - - // Build timestamp if needed - string timestamp = ""; - if (includeDate) - { - timestamp += DateTime.Now.ToString(dateFormat); - } - if (includeTime) - { - if (!string.IsNullOrEmpty(timestamp)) - timestamp += separator; - timestamp += DateTime.Now.ToString(timeFormat); - } - - switch (namingMode) - { - case NamingMode.Suffix: - result = baseName + separator + customText; - if (!string.IsNullOrEmpty(timestamp)) - result += separator + timestamp; - break; - - case NamingMode.Prefix: - result = customText + separator + baseName; - if (!string.IsNullOrEmpty(timestamp)) - result += separator + timestamp; - break; - - case NamingMode.Replace: - string number = (startNumber + index).ToString().PadLeft(numberPadding, '0'); - result = customText + separator + number; - if (!string.IsNullOrEmpty(timestamp)) - result += separator + timestamp; - break; - - case NamingMode.Sequential: - string seqNumber = (startNumber + index).ToString().PadLeft(numberPadding, '0'); - result = customText + seqNumber; - if (!string.IsNullOrEmpty(timestamp)) - result += separator + timestamp; - break; - } - - // Remove invalid characters - result = string.Join("_", result.Split(Path.GetInvalidFileNameChars())); - - return result; - } - - private void ApplyRename() - { - if (selectedFiles.Count == 0) - { - EditorUtility.DisplayDialog("Error", "선택된 파일이 없습니다.", "OK"); - return; - } - - int successCount = 0; - int failCount = 0; - - AssetDatabase.StartAssetEditing(); - - try - { - for (int i = 0; i < selectedFiles.Count; i++) - { - var file = selectedFiles[i]; - if (file == null) continue; - - string assetPath = AssetDatabase.GetAssetPath(file); - string directory = Path.GetDirectoryName(assetPath); - string extension = Path.GetExtension(assetPath); - string oldName = file.name; - string newName = GenerateNewName(oldName, i); - string newPath = Path.Combine(directory, newName + extension); - - // Check if file already exists - if (File.Exists(newPath) && assetPath != newPath) - { - Debug.LogWarning($"File already exists: {newPath}. Skipping {oldName}."); - failCount++; - continue; - } - - // Rename asset - string error = AssetDatabase.RenameAsset(assetPath, newName); - - if (string.IsNullOrEmpty(error)) - { - Debug.Log($"Renamed: {oldName} → {newName}"); - successCount++; - } - else - { - Debug.LogError($"Failed to rename {oldName}: {error}"); - failCount++; - } - } - } - finally - { - AssetDatabase.StopAssetEditing(); - AssetDatabase.SaveAssets(); - AssetDatabase.Refresh(); - } - - string message = $"Rename completed!\n\nSuccess: {successCount}\nFailed: {failCount}"; - EditorUtility.DisplayDialog("Rename Result", message, "OK"); - - // Clear selection and preview - selectedFiles.Clear(); - previewNames.Clear(); - } - #endregion - - #region Presets - private void SaveCurrentAsPreset() - { - var preset = new NamingPreset - { - presetName = newPresetName, - mode = namingMode, - customText = customText, - startNumber = startNumber, - numberPadding = numberPadding, - includeDate = includeDate, - includeTime = includeTime, - dateFormat = dateFormat, - timeFormat = timeFormat, - separator = separator - }; - - presets.Add(preset); - SavePresets(); - - Debug.Log($"Preset saved: {newPresetName}"); - EditorUtility.DisplayDialog("Success", $"프리셋 '{newPresetName}'이(가) 저장되었습니다.", "OK"); - } - - private void LoadPreset(int index) - { - if (index < 0 || index >= presets.Count) return; - - var preset = presets[index]; - namingMode = preset.mode; - customText = preset.customText; - startNumber = preset.startNumber; - numberPadding = preset.numberPadding; - includeDate = preset.includeDate; - includeTime = preset.includeTime; - dateFormat = preset.dateFormat; - timeFormat = preset.timeFormat; - separator = preset.separator; - - Debug.Log($"Preset loaded: {preset.presetName}"); - } - - private void SavePresets() - { - string json = JsonUtility.ToJson(new PresetList { presets = presets }, true); - EditorPrefs.SetString("MotionCaptureFileRenamer_Presets", json); - } - - private void LoadPresets() - { - string json = EditorPrefs.GetString("MotionCaptureFileRenamer_Presets", ""); - if (!string.IsNullOrEmpty(json)) - { - try - { - var presetList = JsonUtility.FromJson(json); - presets = presetList.presets ?? new List(); - } - catch - { - presets = new List(); - } - } - } - - [Serializable] - private class PresetList - { - public List presets = new List(); - } - #endregion -} diff --git a/Assets/Motion/New Material.mat.meta b/Assets/Scripts/Editor/StreamingleTools.meta similarity index 52% rename from Assets/Motion/New Material.mat.meta rename to Assets/Scripts/Editor/StreamingleTools.meta index 983c8464..287d2701 100644 --- a/Assets/Motion/New Material.mat.meta +++ b/Assets/Scripts/Editor/StreamingleTools.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: 0085861f604b4b243ba02d059d2dd867 -NativeFormatImporter: +guid: 9bb84e74216a1f54cbeceefb27c95899 +folderAsset: yes +DefaultImporter: externalObjects: {} - mainObjectFileID: 2100000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs b/Assets/Scripts/Editor/StreamingleTools/StreamingleAvatarExport.cs similarity index 99% rename from Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs rename to Assets/Scripts/Editor/StreamingleTools/StreamingleAvatarExport.cs index 46708bb3..e45125ed 100644 --- a/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs +++ b/Assets/Scripts/Editor/StreamingleTools/StreamingleAvatarExport.cs @@ -20,7 +20,7 @@ public class StreamingleAvatarExporter : EditorWindow Color.magenta // Other }; - [MenuItem("Tools/Streamingle Avatar Exporter")] + [MenuItem("Tools/Streamingle/Avatar Exporter")] public static void ShowWindow() { GetWindow("Streamingle Exporter"); diff --git a/Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs.meta b/Assets/Scripts/Editor/StreamingleTools/StreamingleAvatarExport.cs.meta similarity index 100% rename from Assets/Scripts/Streamingle/StreamingleAvatarExport/Editor/StreamingleAvatarExport.cs.meta rename to Assets/Scripts/Editor/StreamingleTools/StreamingleAvatarExport.cs.meta diff --git a/Assets/Scripts/Editor/StreamingleControllerSetupToolAdvanced.cs b/Assets/Scripts/Editor/StreamingleTools/StreamingleControllerSetupToolAdvanced.cs similarity index 100% rename from Assets/Scripts/Editor/StreamingleControllerSetupToolAdvanced.cs rename to Assets/Scripts/Editor/StreamingleTools/StreamingleControllerSetupToolAdvanced.cs diff --git a/Assets/Scripts/Editor/StreamingleControllerSetupToolAdvanced.cs.meta b/Assets/Scripts/Editor/StreamingleTools/StreamingleControllerSetupToolAdvanced.cs.meta similarity index 100% rename from Assets/Scripts/Editor/StreamingleControllerSetupToolAdvanced.cs.meta rename to Assets/Scripts/Editor/StreamingleTools/StreamingleControllerSetupToolAdvanced.cs.meta diff --git a/Assets/Scripts/Editor/TimelineTools.meta b/Assets/Scripts/Editor/TimelineTools.meta new file mode 100644 index 00000000..1cf3fe6a --- /dev/null +++ b/Assets/Scripts/Editor/TimelineTools.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbab7799f67203d4c86443651fd45fc3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/TimelineBindingTransferWindow.cs b/Assets/Scripts/Editor/TimelineTools/TimelineBindingTransferWindow.cs similarity index 99% rename from Assets/Scripts/Editor/TimelineBindingTransferWindow.cs rename to Assets/Scripts/Editor/TimelineTools/TimelineBindingTransferWindow.cs index 17d90a8d..54fd23e6 100644 --- a/Assets/Scripts/Editor/TimelineBindingTransferWindow.cs +++ b/Assets/Scripts/Editor/TimelineTools/TimelineBindingTransferWindow.cs @@ -25,7 +25,7 @@ namespace Streamingle.Editor private List previewMappings = new List(); - [MenuItem("Tools/Timeline/Transfer Bindings")] + [MenuItem("Tools/Timeline Tools/Transfer Bindings")] public static void ShowWindow() { GetWindow("Timeline Binding Transfer"); diff --git a/Assets/Scripts/Editor/TimelineBindingTransferWindow.cs.meta b/Assets/Scripts/Editor/TimelineTools/TimelineBindingTransferWindow.cs.meta similarity index 100% rename from Assets/Scripts/Editor/TimelineBindingTransferWindow.cs.meta rename to Assets/Scripts/Editor/TimelineTools/TimelineBindingTransferWindow.cs.meta diff --git a/Assets/Scripts/Editor/Utilities.meta b/Assets/Scripts/Editor/Utilities.meta new file mode 100644 index 00000000..f4d8b94d --- /dev/null +++ b/Assets/Scripts/Editor/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8decd084ae90044ca3e5777d7ef5013 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/YAMO_Scripts/MaterialAndTextureCollectorWindow.cs b/Assets/Scripts/Editor/Utilities/MaterialAndTextureCollectorWindow.cs similarity index 99% rename from Assets/Scripts/YAMO_Scripts/MaterialAndTextureCollectorWindow.cs rename to Assets/Scripts/Editor/Utilities/MaterialAndTextureCollectorWindow.cs index a16150c1..97db4022 100644 --- a/Assets/Scripts/YAMO_Scripts/MaterialAndTextureCollectorWindow.cs +++ b/Assets/Scripts/Editor/Utilities/MaterialAndTextureCollectorWindow.cs @@ -17,7 +17,7 @@ public class MaterialAndTextureTool : EditorWindow private HashSet collectedTextures = new HashSet(); private Vector2 scroll; - [MenuItem("Tools/Material & Texture Tool")] + [MenuItem("Tools/Utilities/Material & Texture Tool")] public static void ShowWindow() { var window = GetWindow("MatTex Tool"); diff --git a/Assets/Scripts/YAMO_Scripts/MaterialAndTextureCollectorWindow.cs.meta b/Assets/Scripts/Editor/Utilities/MaterialAndTextureCollectorWindow.cs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/MaterialAndTextureCollectorWindow.cs.meta rename to Assets/Scripts/Editor/Utilities/MaterialAndTextureCollectorWindow.cs.meta diff --git a/Assets/Scripts/Editor/MaterialObjectSelector.cs b/Assets/Scripts/Editor/Utilities/MaterialObjectSelector.cs similarity index 97% rename from Assets/Scripts/Editor/MaterialObjectSelector.cs rename to Assets/Scripts/Editor/Utilities/MaterialObjectSelector.cs index c987242d..edd3df03 100644 --- a/Assets/Scripts/Editor/MaterialObjectSelector.cs +++ b/Assets/Scripts/Editor/Utilities/MaterialObjectSelector.cs @@ -5,7 +5,7 @@ using System.Linq; public class MaterialObjectSelector : EditorWindow { - [MenuItem("Tools/Select Objects Using Material")] + [MenuItem("Tools/Utilities/Select Objects Using Material")] public static void ShowWindow() { GetWindow("Material Object Selector"); diff --git a/Assets/Scripts/Editor/MaterialObjectSelector.cs.meta b/Assets/Scripts/Editor/Utilities/MaterialObjectSelector.cs.meta similarity index 100% rename from Assets/Scripts/Editor/MaterialObjectSelector.cs.meta rename to Assets/Scripts/Editor/Utilities/MaterialObjectSelector.cs.meta diff --git a/Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs b/Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs new file mode 100644 index 00000000..f71f8157 --- /dev/null +++ b/Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs @@ -0,0 +1,466 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System; + +/// +/// 모션 캡쳐 파일 네이밍 편의성 툴 +/// - 선택한 파일들에 일괄적으로 접미사/접두사 추가 +/// - 번호 매기기, 날짜 스탬프 등 다양한 네이밍 패턴 지원 +/// +public class MotionCaptureFileRenamer : EditorWindow +{ + #region Nested Classes + [Serializable] + public class NamingPreset + { + public string presetName = "New Preset"; + public NamingMode mode = NamingMode.Suffix; + public string customText = ""; + public int startNumber = 1; + public int numberPadding = 3; + public string separator = "_"; + } + + public enum NamingMode + { + Suffix, // 파일명 뒤에 추가 + Prefix, // 파일명 앞에 추가 + Replace, // 전체 이름 변경 + Sequential // 순차 번호 + } + #endregion + + #region Fields + private List selectedFiles = new List(); + private Vector2 scrollPosition; + private Vector2 fileListScrollPosition; + private Vector2 previewScrollPosition; + + // Naming settings + private NamingMode namingMode = NamingMode.Suffix; + private string customText = "_ok"; + private int startNumber = 1; + private int numberPadding = 3; + private string separator = "_"; + + // Presets + private List presets = new List(); + private int selectedPresetIndex = -1; + private bool showPresetSection = false; + private string newPresetName = "My Preset"; + + // UI Style + private GUIStyle headerStyle; + private GUIStyle boxStyle; + private Color successColor = new Color(0.5f, 1f, 0.5f, 0.3f); + private Color warningColor = new Color(1f, 1f, 0.5f, 0.3f); + private Color errorColor = new Color(1f, 0.5f, 0.5f, 0.3f); + #endregion + + #region Window Initialization + [MenuItem("Tools/Motion Capture Tools/File Renamer")] + public static void ShowWindow() + { + var window = GetWindow("MoCap File Renamer"); + window.minSize = new Vector2(450, 500); + } + + private void OnEnable() + { + LoadPresets(); + RefreshSelectedFiles(); + Selection.selectionChanged += OnSelectionChanged; + } + + private void OnDisable() + { + SavePresets(); + Selection.selectionChanged -= OnSelectionChanged; + } + + private void OnSelectionChanged() + { + RefreshSelectedFiles(); + Repaint(); + } + + private void InitializeStyles() + { + if (headerStyle == null) + { + headerStyle = new GUIStyle(EditorStyles.boldLabel) + { + fontSize = 14, + alignment = TextAnchor.MiddleLeft + }; + } + + if (boxStyle == null) + { + boxStyle = new GUIStyle(EditorStyles.helpBox) + { + padding = new RectOffset(10, 10, 10, 10) + }; + } + } + #endregion + + #region GUI + private void OnGUI() + { + InitializeStyles(); + + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + DrawHeader(); + DrawFileSelectionSection(); + DrawNamingOptionsSection(); + DrawPresetsSection(); + DrawActionButtons(); + + EditorGUILayout.EndScrollView(); + } + + private void DrawHeader() + { + EditorGUILayout.Space(5); + EditorGUILayout.LabelField("🎬 MoCap File Renamer", headerStyle); + EditorGUILayout.Space(5); + } + + private void DrawFileSelectionSection() + { + EditorGUILayout.BeginVertical(boxStyle); + + // 선택된 파일 수 표시 + GUIStyle countStyle = new GUIStyle(EditorStyles.boldLabel); + countStyle.fontSize = 13; + + if (selectedFiles.Count > 0) + { + countStyle.normal.textColor = new Color(0.3f, 0.8f, 0.3f); + EditorGUILayout.LabelField($"📁 {selectedFiles.Count} files selected", countStyle); + } + else + { + countStyle.normal.textColor = Color.gray; + EditorGUILayout.LabelField($"📁 No files selected", countStyle); + } + + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(5); + } + + private void DrawNamingOptionsSection() + { + EditorGUILayout.BeginVertical(boxStyle); + EditorGUILayout.LabelField("⚙️ Naming Options", EditorStyles.boldLabel); + EditorGUILayout.Space(5); + + // Naming mode + namingMode = (NamingMode)EditorGUILayout.EnumPopup("Mode", namingMode); + + switch (namingMode) + { + case NamingMode.Suffix: + customText = EditorGUILayout.TextField("Suffix", customText); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("_ok")) customText = "_ok"; + if (GUILayout.Button("_final")) customText = "_final"; + if (GUILayout.Button("_test")) customText = "_test"; + EditorGUILayout.EndHorizontal(); + break; + case NamingMode.Prefix: + customText = EditorGUILayout.TextField("Prefix", customText); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Take001")) customText = "Take001"; + if (GUILayout.Button("MoCap")) customText = "MoCap"; + if (GUILayout.Button("Test")) customText = "Test"; + EditorGUILayout.EndHorizontal(); + break; + case NamingMode.Replace: + customText = EditorGUILayout.TextField("New Name", customText); + startNumber = EditorGUILayout.IntField("Start Number", startNumber); + numberPadding = EditorGUILayout.IntSlider("Padding", numberPadding, 1, 5); + break; + case NamingMode.Sequential: + customText = EditorGUILayout.TextField("Base Name", customText); + startNumber = EditorGUILayout.IntField("Start Number", startNumber); + numberPadding = EditorGUILayout.IntSlider("Padding", numberPadding, 1, 5); + EditorGUILayout.LabelField($"Ex: {customText}{startNumber.ToString().PadLeft(numberPadding, '0')}", EditorStyles.miniLabel); + break; + } + + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(5); + } + + + private void DrawPresetsSection() + { + showPresetSection = EditorGUILayout.Foldout(showPresetSection, "💾 Presets", true, EditorStyles.foldoutHeader); + + if (showPresetSection) + { + EditorGUILayout.BeginVertical(boxStyle); + + if (presets.Count > 0) + { + for (int i = 0; i < presets.Count; i++) + { + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button(presets[i].presetName, GUILayout.Height(22))) + { + LoadPreset(i); + } + + if (GUILayout.Button("×", GUILayout.Width(25), GUILayout.Height(22))) + { + presets.RemoveAt(i); + SavePresets(); + } + + EditorGUILayout.EndHorizontal(); + } + + EditorGUILayout.Space(3); + } + + EditorGUILayout.BeginHorizontal(); + newPresetName = EditorGUILayout.TextField(newPresetName); + if (GUILayout.Button("Save", GUILayout.Width(60))) + { + SaveCurrentAsPreset(); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.EndVertical(); + } + + EditorGUILayout.Space(5); + } + + private void DrawActionButtons() + { + GUI.enabled = selectedFiles.Count > 0; + + GUI.backgroundColor = new Color(0.3f, 0.8f, 0.3f); + if (GUILayout.Button("✓ Apply Rename", GUILayout.Height(50))) + { + ApplyRename(); + } + GUI.backgroundColor = Color.white; + + GUI.enabled = true; + } + #endregion + + #region File Selection + private void RefreshSelectedFiles() + { + selectedFiles.Clear(); + + var selected = Selection.objects; + foreach (var obj in selected) + { + string path = AssetDatabase.GetAssetPath(obj); + if (!string.IsNullOrEmpty(path) && !AssetDatabase.IsValidFolder(path)) + { + selectedFiles.Add(obj); + } + } + } + + private void HandleDragAndDrop(Rect dropArea) + { + Event evt = Event.current; + + if (dropArea.Contains(evt.mousePosition)) + { + if (evt.type == EventType.DragUpdated) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + evt.Use(); + } + else if (evt.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + + foreach (var obj in DragAndDrop.objectReferences) + { + string path = AssetDatabase.GetAssetPath(obj); + if (!string.IsNullOrEmpty(path) && !AssetDatabase.IsValidFolder(path)) + { + if (!selectedFiles.Contains(obj)) + { + selectedFiles.Add(obj); + } + } + } + + evt.Use(); + } + } + } + #endregion + + #region Naming Logic + private string GenerateNewName(string originalName, int index) + { + string baseName = originalName; + string result = ""; + + switch (namingMode) + { + case NamingMode.Suffix: + result = baseName + separator + customText; + break; + + case NamingMode.Prefix: + result = customText + separator + baseName; + break; + + case NamingMode.Replace: + string number = (startNumber + index).ToString().PadLeft(numberPadding, '0'); + result = customText + separator + number; + break; + + case NamingMode.Sequential: + string seqNumber = (startNumber + index).ToString().PadLeft(numberPadding, '0'); + result = customText + seqNumber; + break; + } + + // Remove invalid characters + result = string.Join("_", result.Split(Path.GetInvalidFileNameChars())); + + return result; + } + + private void ApplyRename() + { + if (selectedFiles.Count == 0) return; + + int successCount = 0; + int failCount = 0; + + AssetDatabase.StartAssetEditing(); + + try + { + for (int i = 0; i < selectedFiles.Count; i++) + { + var file = selectedFiles[i]; + if (file == null) continue; + + string assetPath = AssetDatabase.GetAssetPath(file); + string directory = Path.GetDirectoryName(assetPath); + string extension = Path.GetExtension(assetPath); + string oldName = file.name; + string newName = GenerateNewName(oldName, i); + string newPath = Path.Combine(directory, newName + extension); + + // Check if file already exists + if (File.Exists(newPath) && assetPath != newPath) + { + Debug.LogWarning($"Skipped (exists): {oldName}"); + failCount++; + continue; + } + + // Rename asset + string error = AssetDatabase.RenameAsset(assetPath, newName); + + if (string.IsNullOrEmpty(error)) + { + Debug.Log($"✓ {oldName} → {newName}"); + successCount++; + } + else + { + Debug.LogError($"✗ {oldName}: {error}"); + failCount++; + } + } + } + finally + { + AssetDatabase.StopAssetEditing(); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + Debug.Log($"Rename Complete: {successCount} success, {failCount} failed"); + + // Clear selection + selectedFiles.Clear(); + } + #endregion + + #region Presets + private void SaveCurrentAsPreset() + { + var preset = new NamingPreset + { + presetName = newPresetName, + mode = namingMode, + customText = customText, + startNumber = startNumber, + numberPadding = numberPadding, + separator = separator + }; + + presets.Add(preset); + SavePresets(); + + Debug.Log($"Preset saved: {newPresetName}"); + } + + private void LoadPreset(int index) + { + if (index < 0 || index >= presets.Count) return; + + var preset = presets[index]; + namingMode = preset.mode; + customText = preset.customText; + startNumber = preset.startNumber; + numberPadding = preset.numberPadding; + separator = preset.separator; + + Debug.Log($"Preset loaded: {preset.presetName}"); + } + + private void SavePresets() + { + string json = JsonUtility.ToJson(new PresetList { presets = presets }, true); + EditorPrefs.SetString("MotionCaptureFileRenamer_Presets", json); + } + + private void LoadPresets() + { + string json = EditorPrefs.GetString("MotionCaptureFileRenamer_Presets", ""); + if (!string.IsNullOrEmpty(json)) + { + try + { + var presetList = JsonUtility.FromJson(json); + presets = presetList.presets ?? new List(); + } + catch + { + presets = new List(); + } + } + } + + [Serializable] + private class PresetList + { + public List presets = new List(); + } + #endregion +} diff --git a/Assets/Scripts/Editor/MotionCaptureFileRenamer.cs.meta b/Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs.meta similarity index 100% rename from Assets/Scripts/Editor/MotionCaptureFileRenamer.cs.meta rename to Assets/Scripts/Editor/Utilities/MotionCaptureFileRenamer.cs.meta diff --git a/Assets/Scripts/YAMO_Scripts/NilotoonMaterialMatcapSetter.cs b/Assets/Scripts/Editor/Utilities/NilotoonMaterialMatcapSetter.cs similarity index 99% rename from Assets/Scripts/YAMO_Scripts/NilotoonMaterialMatcapSetter.cs rename to Assets/Scripts/Editor/Utilities/NilotoonMaterialMatcapSetter.cs index 8bf8851e..16a04221 100644 --- a/Assets/Scripts/YAMO_Scripts/NilotoonMaterialMatcapSetter.cs +++ b/Assets/Scripts/Editor/Utilities/NilotoonMaterialMatcapSetter.cs @@ -42,7 +42,7 @@ namespace Bitd private Vector2 scrollPosObjects; // 오브젝트 목록 스크롤 위치 - [MenuItem("Bitd/닐로툰 매트캡 자동 인식기", false, 153)] + [MenuItem("Tools/Utilities/Nilotoon Material Matcap Setter")] public static void ShowWindow() { GetWindow("닐로툰 매트캡 자동 인식기"); diff --git a/Assets/Scripts/YAMO_Scripts/NilotoonMaterialMatcapSetter.cs.meta b/Assets/Scripts/Editor/Utilities/NilotoonMaterialMatcapSetter.cs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/NilotoonMaterialMatcapSetter.cs.meta rename to Assets/Scripts/Editor/Utilities/NilotoonMaterialMatcapSetter.cs.meta diff --git a/Assets/Scripts/Editor/RecompileScript.cs b/Assets/Scripts/Editor/Utilities/RecompileScript.cs similarity index 86% rename from Assets/Scripts/Editor/RecompileScript.cs rename to Assets/Scripts/Editor/Utilities/RecompileScript.cs index b4629467..55320084 100644 --- a/Assets/Scripts/Editor/RecompileScript.cs +++ b/Assets/Scripts/Editor/Utilities/RecompileScript.cs @@ -2,7 +2,7 @@ using UnityEditor; public class RecompileScript { - [MenuItem("Tools/Recompile")] + [MenuItem("Tools/Utilities/Recompile")] public static void Recompile() { // 현재의 에디터 애플리케이션의 상태를 강제로 리컴파일합니다. diff --git a/Assets/Scripts/Editor/RecompileScript.cs.meta b/Assets/Scripts/Editor/Utilities/RecompileScript.cs.meta similarity index 100% rename from Assets/Scripts/Editor/RecompileScript.cs.meta rename to Assets/Scripts/Editor/Utilities/RecompileScript.cs.meta diff --git a/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs b/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs deleted file mode 100644 index a1a98289..00000000 --- a/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs +++ /dev/null @@ -1,64 +0,0 @@ -using UnityEngine; -using UnityEditor; -using UniHumanoid; - -public class HumanPoseClipEditor : EditorWindow -{ - private Animator sourceAnimator; - private string savePath = "Assets/NewPose.pose"; - - [MenuItem("Tools/Human Pose Clip Creator")] - static void ShowWindow() - { - var window = GetWindow("포즈 생성기"); - window.minSize = new Vector2(300, 100); - } - - void OnGUI() - { - EditorGUILayout.Space(10); - EditorGUILayout.LabelField("휴머노이드 포즈 생성", EditorStyles.boldLabel); - EditorGUILayout.Space(10); - - sourceAnimator = EditorGUILayout.ObjectField("소스 애니메이터", - sourceAnimator, typeof(Animator), true) as Animator; - - savePath = EditorGUILayout.TextField("저장 경로", savePath); - - EditorGUILayout.Space(10); - - GUI.enabled = sourceAnimator != null; - if (GUILayout.Button("현재 포즈로 에셋 생성")) - { - CreatePoseClip(); - } - GUI.enabled = true; - } - - void CreatePoseClip() - { - if (!sourceAnimator.isHuman) - { - EditorUtility.DisplayDialog("오류", - "선택된 애니메이터가 휴머노이드가 아닙니다.", "확인"); - return; - } - - var clip = ScriptableObject.CreateInstance(); - var handler = new HumanPoseHandler(sourceAnimator.avatar, sourceAnimator.transform); - var pose = new HumanPose(); - - handler.GetHumanPose(ref pose); - clip.ApplyPose(ref pose); - - // 에셋 저장 - AssetDatabase.CreateAsset(clip, savePath + ".asset"); - AssetDatabase.SaveAssets(); - - EditorUtility.DisplayDialog("완료", - "포즈 클립이 생성되었습니다.", "확인"); - - // 생성된 에셋 선택 - Selection.activeObject = clip; - } -} \ No newline at end of file diff --git a/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs.meta b/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs.meta deleted file mode 100644 index 0cbdd2b8..00000000 --- a/Assets/Scripts/KindRetargeting/Editor/HumanPoseClipEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2cf677b8ffaf4aa45a26179e80a8ac23 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip b/Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip deleted file mode 100644 index 9e0f4062..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/Camera Composition.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:67e4501b4f85c217feeaeaca3509722ebc4534b58949669f11214e8d0438f395 -size 5704148 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CameraComposition.asmdef b/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.asmdef similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CameraComposition.asmdef rename to Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.asmdef diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CameraComposition.asmdef.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.asmdef.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CameraComposition.asmdef.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.asmdef.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf b/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf deleted file mode 100644 index 46e6eb72..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:16b0641b54ae143a2e8ce2795efb70721cb504bd5feee78908ac5e992a50ae40 -size 5654553 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf.meta deleted file mode 100644 index a57d3db4..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/CameraComposition.pdf.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 403187bd32b8502488efe4583bc51110 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 202816 - packageName: Camera Composition - Grid Overlay Tool - packageVersion: 1.0.2 - assetPath: Assets/Camera Composition/CameraComposition.pdf - uploadId: 471102 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt b/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt deleted file mode 100644 index b5fd1040..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bdb5d180193adc4421cff16151687dac42d3e56808cd3463b7c8ae46c81956f4 -size 960 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt.meta deleted file mode 100644 index 79dc174d..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/Changelog.txt.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 1c03e5c3741df0b408c8e81db15780ef -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 202816 - packageName: Camera Composition - Grid Overlay Tool - packageVersion: 1.0.2 - assetPath: Assets/Camera Composition/Changelog.txt - uploadId: 471102 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CompositionOverlay.cs b/Assets/Scripts/YAMO_Scripts/Camera Composition/CompositionOverlay.cs similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CompositionOverlay.cs rename to Assets/Scripts/YAMO_Scripts/Camera Composition/CompositionOverlay.cs diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CompositionOverlay.cs.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/CompositionOverlay.cs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/CompositionOverlay.cs.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/CompositionOverlay.cs.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Editor.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Editor.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor/CameraComposition.cs b/Assets/Scripts/YAMO_Scripts/Camera Composition/Editor/CameraComposition.cs similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor/CameraComposition.cs rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Editor/CameraComposition.cs diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor/CameraComposition.cs.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Editor/CameraComposition.cs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Editor/CameraComposition.cs.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Editor/CameraComposition.cs.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt b/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt deleted file mode 100644 index 89abbbac..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e8df6843bc26057564de1a1a8c21e6b4d4f7678cc023895adb97b0e267d4747 -size 812 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt.meta deleted file mode 100644 index 77029f51..00000000 --- a/Assets/Scripts/YAMO_Scripts/Camera Composition/README.txt.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 583d2b0c7a3fb5146baec6c15b419b8b -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 202816 - packageName: Camera Composition - Grid Overlay Tool - packageVersion: 1.0.2 - assetPath: Assets/Camera Composition/README.txt - uploadId: 471102 diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.cross.png b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.cross.png similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.cross.png rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.cross.png diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.cross.png.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.cross.png.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.cross.png.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.cross.png.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.diagonal.png b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.diagonal.png similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.diagonal.png rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.diagonal.png diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.diagonal.png.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.diagonal.png.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.diagonal.png.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.diagonal.png.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenratio.png b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenratio.png similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenratio.png rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenratio.png diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenratio.png.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenratio.png.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenratio.png.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenratio.png.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenspiral.png b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenspiral.png similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenspiral.png rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenspiral.png diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenspiral.png.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenspiral.png.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.goldenspiral.png.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.goldenspiral.png.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.ruleofthirds.png b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.ruleofthirds.png similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.ruleofthirds.png rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.ruleofthirds.png diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.ruleofthirds.png.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.ruleofthirds.png.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Overlays/overlays.ruleofthirds.png.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Overlays/overlays.ruleofthirds.png.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs.meta diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs/Camera Composition.prefab b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs/Camera Composition.prefab similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs/Camera Composition.prefab rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs/Camera Composition.prefab diff --git a/Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs/Camera Composition.prefab.meta b/Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs/Camera Composition.prefab.meta similarity index 100% rename from Assets/Scripts/YAMO_Scripts/Camera Composition/Scripts/Resources/Prefabs/Camera Composition.prefab.meta rename to Assets/Scripts/YAMO_Scripts/Camera Composition/Resources/Prefabs/Camera Composition.prefab.meta diff --git a/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs b/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs deleted file mode 100644 index 190ec637..00000000 --- a/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs +++ /dev/null @@ -1,1082 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections.Generic; - -public class RenameHumanoidBones : EditorWindow -{ - private Animator selectedAnimator; - private Dictionary humanoidBones = new Dictionary(); - private Dictionary newBoneNames = new Dictionary(); - - [MenuItem("Tools/Humanoid Bone Renamer")] - public static void ShowWindow() - { - GetWindow("Humanoid Bone Renamer"); - } - - private Vector2 scrollPosition; - - private void OnGUI() - { - GUILayout.Label("Humanoid Bone Renamer", EditorStyles.boldLabel); - - if (GUILayout.Button("Find Humanoid Bones")) - { - FindHumanoidBones(); - } - - // 믹사모 네이밍으로 일괄 변경 버튼 추가 - if (GUILayout.Button("믹사모 네이밍으로 일괄 변경")) - { - RenameToMixamo(); - } - - if (selectedAnimator == null) - { - GUILayout.Label("No valid Humanoid Animator selected.", EditorStyles.helpBox); - return; - } - - GUILayout.Label("Selected GameObject: " + selectedAnimator.gameObject.name, EditorStyles.boldLabel); - - // T포즈 관련 버튼들 추가 - EditorGUILayout.Space(); - GUILayout.Label("T-Pose Functions", EditorStyles.boldLabel); - - if (GUILayout.Button("Check T-Pose Conditions")) - { - CheckTPoseConditions(); - } - - if (GUILayout.Button("Apply Perfect T-Pose")) - { - ApplyPerfectTPose(); - } - - if (GUILayout.Button("Reset to Default Pose")) - { - ResetToDefaultPose(); - } - - EditorGUILayout.Space(); - - if (humanoidBones.Count > 0) - { - scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, GUILayout.Height(400)); - - EditorGUILayout.BeginVertical("box"); - GUILayout.Label("Humanoid Bones", EditorStyles.boldLabel); - - foreach (var bone in humanoidBones) - { - EditorGUILayout.BeginHorizontal(); - - // First column: Unity's Humanoid bone name - GUILayout.Label(bone.Key.ToString(), GUILayout.Width(150)); - - // Second column: Current bone name - GUILayout.Label(bone.Value != null ? bone.Value.name : "None", GUILayout.Width(150)); - - // Third column: Input field for new name (defaulting to the first column's name) - if (!newBoneNames.ContainsKey(bone.Key)) - { - newBoneNames[bone.Key] = bone.Key.ToString(); - } - newBoneNames[bone.Key] = EditorGUILayout.TextField(newBoneNames[bone.Key], GUILayout.Width(150)); - - EditorGUILayout.EndHorizontal(); - } - - EditorGUILayout.EndVertical(); - EditorGUILayout.EndScrollView(); - } - - if (GUILayout.Button("Change Humanoid Bones Name")) - { - ChangeHumanoidBoneNames(); - } - } - - private void FindHumanoidBones() - { - selectedAnimator = null; - humanoidBones.Clear(); - newBoneNames.Clear(); - - if (Selection.activeGameObject == null) - { - Debug.LogError("No GameObject selected. Please select a GameObject with an Animator component."); - return; - } - - selectedAnimator = Selection.activeGameObject.GetComponent(); - - if (selectedAnimator == null || selectedAnimator.avatar == null || !selectedAnimator.avatar.isValid || !selectedAnimator.avatar.isHuman) - { - Debug.LogError("Selected GameObject does not have a valid Humanoid Avatar."); - return; - } - - for (int i = 0; i < HumanTrait.BoneCount; i++) - { - HumanBodyBones bone = (HumanBodyBones)i; - Transform boneTransform = selectedAnimator.GetBoneTransform(bone); - - if (boneTransform != null) - { - humanoidBones[bone] = boneTransform; - } - } - - Debug.Log("Humanoid bones found and ready for renaming."); - } - - private void ChangeHumanoidBoneNames() - { - if (selectedAnimator == null) - { - Debug.LogError("No valid Humanoid Animator selected."); - return; - } - - foreach (var bone in humanoidBones) - { - if (bone.Value != null && !string.IsNullOrWhiteSpace(newBoneNames[bone.Key])) - { - string newName = newBoneNames[bone.Key]; - Debug.Log($"Renaming {bone.Value.name} to {newName}"); - bone.Value.name = newName; - } - } - - Debug.Log("Bone renaming completed."); - } - - // T포즈 조건 검증 - private void CheckTPoseConditions() - { - if (selectedAnimator == null) - { - Debug.LogError("No valid Humanoid Animator selected."); - return; - } - - Debug.Log("=== T-Pose Conditions Check ==="); - - // 1. 몸통 뼈대들의 World X축 좌표가 0인지 확인 - CheckBodyAlignment(); - - // 2. 팔 뼈대들의 World Z축 좌표가 동일한지 확인 - CheckArmAlignment(); - - // 3. 다리 뼈대들의 World X축 좌표가 동일한지 확인 - CheckLegAlignment(); - - Debug.Log("=== T-Pose Conditions Check Complete ==="); - } - - private void CheckBodyAlignment() - { - Debug.Log("--- Body Alignment Check ---"); - - HumanBodyBones[] bodyBones = { - HumanBodyBones.Hips, - HumanBodyBones.Spine, - HumanBodyBones.Chest, - HumanBodyBones.UpperChest, - HumanBodyBones.Neck, - HumanBodyBones.Head - }; - - float targetX = 0f; - bool allAligned = true; - - foreach (var boneType in bodyBones) - { - Transform bone = selectedAnimator.GetBoneTransform(boneType); - if (bone != null) - { - float worldX = bone.position.x; - float difference = Mathf.Abs(worldX - targetX); - - Debug.Log($"{boneType}: World X = {worldX:F3} (Target: {targetX:F3}, Difference: {difference:F3})"); - - if (difference > 0.01f) - { - allAligned = false; - Debug.LogWarning($" -> {boneType} is not aligned! Difference: {difference:F3}"); - } - } - } - - if (allAligned) - { - Debug.Log("✓ Body bones are properly aligned on X-axis"); - } - else - { - Debug.LogWarning("✗ Body bones are NOT properly aligned on X-axis"); - } - } - - private void CheckArmAlignment() - { - Debug.Log("--- Arm Alignment Check ---"); - - HumanBodyBones[] leftArmBones = { - HumanBodyBones.LeftShoulder, - HumanBodyBones.LeftUpperArm, - HumanBodyBones.LeftLowerArm, - HumanBodyBones.LeftHand - }; - - HumanBodyBones[] rightArmBones = { - HumanBodyBones.RightShoulder, - HumanBodyBones.RightUpperArm, - HumanBodyBones.RightLowerArm, - HumanBodyBones.RightHand - }; - - CheckSideArmAlignment("Left Arm", leftArmBones); - CheckSideArmAlignment("Right Arm", rightArmBones); - } - - private void CheckSideArmAlignment(string sideName, HumanBodyBones[] armBones) - { - Debug.Log($"--- {sideName} Alignment Check ---"); - - float targetZ = 0f; - bool firstBone = true; - bool allAligned = true; - - foreach (var boneType in armBones) - { - Transform bone = selectedAnimator.GetBoneTransform(boneType); - if (bone != null) - { - float worldZ = bone.position.z; - - if (firstBone) - { - targetZ = worldZ; - firstBone = false; - } - - float difference = Mathf.Abs(worldZ - targetZ); - - Debug.Log($"{boneType}: World Z = {worldZ:F3} (Target: {targetZ:F3}, Difference: {difference:F3})"); - - if (difference > 0.01f) - { - allAligned = false; - Debug.LogWarning($" -> {boneType} is not aligned! Difference: {difference:F3}"); - } - } - } - - if (allAligned) - { - Debug.Log($"✓ {sideName} bones are properly aligned on Z-axis"); - } - else - { - Debug.LogWarning($"✗ {sideName} bones are NOT properly aligned on Z-axis"); - } - } - - private void CheckLegAlignment() - { - Debug.Log("--- Leg Alignment Check ---"); - - HumanBodyBones[] leftLegBones = { - HumanBodyBones.LeftUpperLeg, - HumanBodyBones.LeftLowerLeg, - HumanBodyBones.LeftFoot, - HumanBodyBones.LeftToes - }; - - HumanBodyBones[] rightLegBones = { - HumanBodyBones.RightUpperLeg, - HumanBodyBones.RightLowerLeg, - HumanBodyBones.RightFoot, - HumanBodyBones.RightToes - }; - - CheckSideLegAlignment("Left Leg", leftLegBones); - CheckSideLegAlignment("Right Leg", rightLegBones); - } - - private void CheckSideLegAlignment(string sideName, HumanBodyBones[] legBones) - { - Debug.Log($"--- {sideName} Alignment Check ---"); - - float targetX = 0f; - bool firstBone = true; - bool allAligned = true; - - foreach (var boneType in legBones) - { - Transform bone = selectedAnimator.GetBoneTransform(boneType); - if (bone != null) - { - float worldX = bone.position.x; - - if (firstBone) - { - targetX = worldX; - firstBone = false; - } - - float difference = Mathf.Abs(worldX - targetX); - - Debug.Log($"{boneType}: World X = {worldX:F3} (Target: {targetX:F3}, Difference: {difference:F3})"); - - if (difference > 0.01f) - { - allAligned = false; - Debug.LogWarning($" -> {boneType} is not aligned! Difference: {difference:F3}"); - } - } - } - - if (allAligned) - { - Debug.Log($"✓ {sideName} bones are properly aligned on X-axis"); - } - else - { - Debug.LogWarning($"✗ {sideName} bones are NOT properly aligned on X-axis"); - } - } - - // 완벽한 T포즈 적용 - private void ApplyPerfectTPose() - { - if (selectedAnimator == null) - { - Debug.LogError("No valid Humanoid Animator selected."); - return; - } - - Debug.Log("=== Applying Perfect T-Pose ==="); - - // Undo 시스템에 등록 - Undo.RecordObject(selectedAnimator.gameObject, "Apply T-Pose"); - - // 단계 1: 팔 부분 조정 - AdjustArmBones(); - - // 단계 2: 다리 부분 조정 - AdjustLegBones(); - - Debug.Log("Perfect T-Pose applied successfully!"); - } - - // 팔 뼈대 조정 (단계 1) - private void AdjustArmBones() - { - Debug.Log("Adjusting arm bones..."); - - // 왼쪽 팔 - AdjustSingleArm(HumanBodyBones.LeftUpperArm, HumanBodyBones.LeftLowerArm, HumanBodyBones.LeftHand, "Left"); - - // 오른쪽 팔 - AdjustSingleArm(HumanBodyBones.RightUpperArm, HumanBodyBones.RightLowerArm, HumanBodyBones.RightHand, "Right"); - } - - // 다리 뼈대 조정 (단계 2) - private void AdjustLegBones() - { - Debug.Log("Adjusting leg bones..."); - - // 왼쪽 다리 - AdjustSingleLeg(HumanBodyBones.LeftLowerLeg, HumanBodyBones.LeftFoot, "Left"); - - // 오른쪽 다리 - AdjustSingleLeg(HumanBodyBones.RightLowerLeg, HumanBodyBones.RightFoot, "Right"); - } - - private void AdjustSingleLeg(HumanBodyBones lowerLeg, HumanBodyBones foot, string side) - { - Debug.Log($"Adjusting {side} leg..."); - - // LowerLeg (무릎) 조정 - Transform lowerLegBone = selectedAnimator.GetBoneTransform(lowerLeg); - if (lowerLegBone != null) - { - // 로테이션은 건드리지 않음 (기존 회전값 유지) - - // 로컬 X, Z 포지션만 0으로 변경 - Vector3 localPos = lowerLegBone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - lowerLegBone.localPosition = localPos; - - Debug.Log($"{side} LowerLeg - Local Rotation: {lowerLegBone.localRotation.eulerAngles}, Local Position: {lowerLegBone.localPosition}"); - } - - // Foot (발목) 조정 - Transform footBone = selectedAnimator.GetBoneTransform(foot); - if (footBone != null) - { - // 로테이션은 건드리지 않음 (기존 회전값 유지) - - // 로컬 X, Z 포지션만 0으로 변경 - Vector3 localPos = footBone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - footBone.localPosition = localPos; - - Debug.Log($"{side} Foot - Local Rotation: {footBone.localRotation.eulerAngles}, Local Position: {footBone.localPosition}"); - } - - // 발가락 조정 - AdjustToes(side); - } - - private void AdjustToes(string side) - { - Debug.Log($"Adjusting {side} toes..."); - - HumanBodyBones toeBone; - - if (side == "Left") - { - toeBone = HumanBodyBones.LeftToes; - } - else // Right - { - toeBone = HumanBodyBones.RightToes; - } - - Transform bone = selectedAnimator.GetBoneTransform(toeBone); - if (bone != null) - { - // 로테이션은 건드리지 않음 (기존 회전값 유지) - - // 로컬 X, Z 포지션만 0으로 변경 - Vector3 localPos = bone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - bone.localPosition = localPos; - - Debug.Log($"{side} Toes - Local Rotation: {bone.localRotation.eulerAngles}, Local Position: {bone.localPosition}"); - } - } - - private void AdjustSingleArm(HumanBodyBones upperArm, HumanBodyBones lowerArm, HumanBodyBones hand, string side) - { - Debug.Log($"Adjusting {side} arm..."); - - // UpperArm 조정 - Transform upperArmBone = selectedAnimator.GetBoneTransform(upperArm); - if (upperArmBone != null) - { - // 로컬 Rotation을 0,0,0으로 초기화 - upperArmBone.localRotation = Quaternion.identity; - - // 로컬 X, Z 포지션을 0으로 변경 - Vector3 localPos = upperArmBone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - upperArmBone.localPosition = localPos; - - Debug.Log($"{side} UpperArm - Local Rotation: {upperArmBone.localRotation.eulerAngles}, Local Position: {upperArmBone.localPosition}"); - } - - // LowerArm 조정 - Transform lowerArmBone = selectedAnimator.GetBoneTransform(lowerArm); - if (lowerArmBone != null) - { - // 로컬 Rotation을 0,0,0으로 초기화 - lowerArmBone.localRotation = Quaternion.identity; - - // 로컬 X, Z 포지션을 0으로 변경 - Vector3 localPos = lowerArmBone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - lowerArmBone.localPosition = localPos; - - Debug.Log($"{side} LowerArm - Local Rotation: {lowerArmBone.localRotation.eulerAngles}, Local Position: {lowerArmBone.localPosition}"); - } - - // Hand 조정 - Transform handBone = selectedAnimator.GetBoneTransform(hand); - if (handBone != null) - { - // 로컬 Rotation을 0,0,0으로 초기화 - handBone.localRotation = Quaternion.identity; - - // 로컬 X, Z 포지션을 0으로 변경 - Vector3 localPos = handBone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - handBone.localPosition = localPos; - - Debug.Log($"{side} Hand - Local Rotation: {handBone.localRotation.eulerAngles}, Local Position: {handBone.localPosition}"); - } - - // 손가락 조정 (엄지손가락 제외) - AdjustFingers(side); - } - - private void AdjustFingers(string side) - { - Debug.Log($"Adjusting {side} fingers (excluding thumb)..."); - - // 엄지손가락을 제외한 손가락들 - HumanBodyBones[] fingerBones; - - if (side == "Left") - { - fingerBones = new HumanBodyBones[] - { - HumanBodyBones.LeftIndexProximal, - HumanBodyBones.LeftIndexIntermediate, - HumanBodyBones.LeftIndexDistal, - HumanBodyBones.LeftMiddleProximal, - HumanBodyBones.LeftMiddleIntermediate, - HumanBodyBones.LeftMiddleDistal, - HumanBodyBones.LeftRingProximal, - HumanBodyBones.LeftRingIntermediate, - HumanBodyBones.LeftRingDistal, - HumanBodyBones.LeftLittleProximal, - HumanBodyBones.LeftLittleIntermediate, - HumanBodyBones.LeftLittleDistal - }; - } - else // Right - { - fingerBones = new HumanBodyBones[] - { - HumanBodyBones.RightIndexProximal, - HumanBodyBones.RightIndexIntermediate, - HumanBodyBones.RightIndexDistal, - HumanBodyBones.RightMiddleProximal, - HumanBodyBones.RightMiddleIntermediate, - HumanBodyBones.RightMiddleDistal, - HumanBodyBones.RightRingProximal, - HumanBodyBones.RightRingIntermediate, - HumanBodyBones.RightRingDistal, - HumanBodyBones.RightLittleProximal, - HumanBodyBones.RightLittleIntermediate, - HumanBodyBones.RightLittleDistal - }; - } - - foreach (var fingerBone in fingerBones) - { - Transform bone = selectedAnimator.GetBoneTransform(fingerBone); - if (bone != null) - { - // 로컬 Rotation을 0,0,0으로 초기화 - bone.localRotation = Quaternion.identity; - - // 손가락 첫 마디(Proximal)는 X축을 유지, 나머지는 X, Z 포지션을 0으로 변경 - Vector3 localPos = bone.localPosition; - if (fingerBone.ToString().Contains("Proximal")) - { - // 첫 마디는 X축 유지, Z축만 0으로 - localPos.z = 0f; - } - else - { - // 두번째, 세번째 마디는 X, Z 모두 0으로 - localPos.x = 0f; - localPos.z = 0f; - } - bone.localPosition = localPos; - - Debug.Log($"{side} {fingerBone} - Local Rotation: {bone.localRotation.eulerAngles}, Local Position: {bone.localPosition}"); - } - } - - // 엄지손가락 두번째와 세번째 마디 조정 - AdjustThumbFingers(side); - } - - private void AdjustThumbFingers(string side) - { - Debug.Log($"Adjusting {side} thumb intermediate and distal..."); - - HumanBodyBones[] thumbBones; - - if (side == "Left") - { - thumbBones = new HumanBodyBones[] - { - HumanBodyBones.LeftThumbIntermediate, - HumanBodyBones.LeftThumbDistal - }; - } - else // Right - { - thumbBones = new HumanBodyBones[] - { - HumanBodyBones.RightThumbIntermediate, - HumanBodyBones.RightThumbDistal - }; - } - - foreach (var thumbBone in thumbBones) - { - Transform bone = selectedAnimator.GetBoneTransform(thumbBone); - if (bone != null) - { - // 로컬 Rotation을 0,0,0으로 초기화 - bone.localRotation = Quaternion.identity; - - // X, Z 포지션을 0으로 변경 - Vector3 localPos = bone.localPosition; - localPos.x = 0f; - localPos.z = 0f; - bone.localPosition = localPos; - - Debug.Log($"{side} {thumbBone} - Local Rotation: {bone.localRotation.eulerAngles}, Local Position: {bone.localPosition}"); - } - } - } - - // 뼈대들의 부모-자식 관계를 일시적으로 분리 - private Dictionary DetachBonesFromHierarchy() - { - Debug.Log("Detaching bones from hierarchy..."); - - Dictionary originalParents = new Dictionary(); - - // 모든 Humanoid 뼈대의 부모-자식 관계를 저장하고 분리 - for (int i = 0; i < HumanTrait.BoneCount; i++) - { - HumanBodyBones bone = (HumanBodyBones)i; - Transform boneTransform = selectedAnimator.GetBoneTransform(bone); - - if (boneTransform != null) - { - // 원래 부모를 저장 - originalParents[boneTransform] = boneTransform.parent; - - // 뼈대를 최상위 레벨로 이동 (계층구조에서 분리) - boneTransform.SetParent(null, true); - - Debug.Log($"Detached {bone} from parent: {originalParents[boneTransform]?.name ?? "None"}"); - } - } - - Debug.Log($"Detached {originalParents.Count} bones from hierarchy"); - return originalParents; - } - - // 뼈대들을 원래 부모-자식 관계로 복원 - private void RestoreBoneHierarchy(Dictionary originalParents) - { - Debug.Log("Restoring bone hierarchy..."); - - foreach (var kvp in originalParents) - { - Transform bone = kvp.Key; - Transform originalParent = kvp.Value; - - if (bone != null) - { - // 원래 부모로 복원 - bone.SetParent(originalParent, true); - Debug.Log($"Restored {bone.name} to parent: {originalParent?.name ?? "None"}"); - } - } - - Debug.Log("Bone hierarchy restored"); - } - - private void AlignBodyBones() - { - Debug.Log("Aligning body bones..."); - - HumanBodyBones[] bodyBones = { - HumanBodyBones.Hips, - HumanBodyBones.Spine, - HumanBodyBones.Chest, - HumanBodyBones.UpperChest, - HumanBodyBones.Neck, - HumanBodyBones.Head - }; - - foreach (var boneType in bodyBones) - { - Transform bone = selectedAnimator.GetBoneTransform(boneType); - if (bone != null) - { - // 현재 위치에서 X축만 0으로 조정 - Vector3 newPosition = bone.position; - newPosition.x = 0f; - bone.position = newPosition; - - // 회전을 0으로 설정 (똑바로 서있음) - bone.rotation = Quaternion.identity; - - Debug.Log($"Aligned {boneType} to X=0, rotation=0"); - } - } - } - - private void SetArmsToTPose() - { - Debug.Log("Setting arms to T-pose..."); - - // 왼쪽 팔 - SetArmToTPose(HumanBodyBones.LeftShoulder, HumanBodyBones.LeftUpperArm, - HumanBodyBones.LeftLowerArm, HumanBodyBones.LeftHand, true); - - // 오른쪽 팔 - SetArmToTPose(HumanBodyBones.RightShoulder, HumanBodyBones.RightUpperArm, - HumanBodyBones.RightLowerArm, HumanBodyBones.RightHand, false); - } - - private void SetArmToTPose(HumanBodyBones shoulder, HumanBodyBones upperArm, - HumanBodyBones lowerArm, HumanBodyBones hand, bool isLeft) - { - string side = isLeft ? "Left" : "Right"; - - // 어깨 위치 및 회전 조정 - Transform shoulderBone = selectedAnimator.GetBoneTransform(shoulder); - if (shoulderBone != null) - { - // 어깨를 몸통 중심에서 적절한 거리로 이동 - Vector3 shoulderPos = shoulderBone.position; - float shoulderOffset = isLeft ? -0.3f : 0.3f; - shoulderPos.x = shoulderOffset; - shoulderBone.position = shoulderPos; - - // 어깨를 Z축 기준으로 회전하여 팔이 수평이 되도록 함 - float shoulderZRotation = isLeft ? 90f : -90f; - shoulderBone.rotation = Quaternion.Euler(0, 0, shoulderZRotation); - - Debug.Log($"Positioned {side} shoulder at X={shoulderOffset}, Z rotation={shoulderZRotation}°"); - } - - // 상완 위치 및 회전 조정 - Transform upperArmBone = selectedAnimator.GetBoneTransform(upperArm); - if (upperArmBone != null) - { - // 상완을 어깨에서 수평으로 뻗도록 위치 조정 - Vector3 upperArmPos = upperArmBone.position; - float armLength = Vector3.Distance(shoulderBone.position, upperArmBone.position); - upperArmPos.x = isLeft ? -armLength : armLength; - upperArmBone.position = upperArmPos; - - // 상완을 완전히 펴기 위해 회전 조정 - upperArmBone.rotation = Quaternion.identity; - - Debug.Log($"Positioned {side} upper arm at X={upperArmPos.x}, rotation=0°"); - } - - // 하완 위치 및 회전 조정 - Transform lowerArmBone = selectedAnimator.GetBoneTransform(lowerArm); - if (lowerArmBone != null) - { - // 하완을 상완에서 수평으로 뻗도록 위치 조정 - Vector3 lowerArmPos = lowerArmBone.position; - float forearmLength = Vector3.Distance(upperArmBone.position, lowerArmBone.position); - lowerArmPos.x = isLeft ? -(upperArmBone.position.x + forearmLength) : (upperArmBone.position.x + forearmLength); - lowerArmBone.position = lowerArmPos; - - // 하완을 완전히 펴기 위해 회전 조정 - lowerArmBone.rotation = Quaternion.identity; - - Debug.Log($"Positioned {side} lower arm at X={lowerArmPos.x}, rotation=0°"); - } - - // 손 위치 및 회전 조정 - Transform handBone = selectedAnimator.GetBoneTransform(hand); - if (handBone != null) - { - // 손을 하완에서 수평으로 뻗도록 위치 조정 - Vector3 handPos = handBone.position; - float handLength = Vector3.Distance(lowerArmBone.position, handBone.position); - handPos.x = isLeft ? -(lowerArmBone.position.x + handLength) : (lowerArmBone.position.x + handLength); - handBone.position = handPos; - - // 손을 자연스럽게 펴기 위해 회전 조정 - handBone.rotation = Quaternion.identity; - - Debug.Log($"Positioned {side} hand at X={handPos.x}, rotation=0°"); - } - } - - private void AlignLegBones() - { - Debug.Log("Aligning leg bones..."); - - HumanBodyBones[] leftLegBones = { - HumanBodyBones.LeftUpperLeg, - HumanBodyBones.LeftLowerLeg, - HumanBodyBones.LeftFoot, - HumanBodyBones.LeftToes - }; - - HumanBodyBones[] rightLegBones = { - HumanBodyBones.RightUpperLeg, - HumanBodyBones.RightLowerLeg, - HumanBodyBones.RightFoot, - HumanBodyBones.RightToes - }; - - AlignSideLegBones("Left", leftLegBones, -0.2f); - AlignSideLegBones("Right", rightLegBones, 0.2f); - } - - private void AlignSideLegBones(string side, HumanBodyBones[] legBones, float targetX) - { - foreach (var boneType in legBones) - { - Transform bone = selectedAnimator.GetBoneTransform(boneType); - if (bone != null) - { - // 위치를 목표 X축으로 조정 - Vector3 newPosition = bone.position; - newPosition.x = targetX; - bone.position = newPosition; - - // 다리 뼈대들을 똑바로 세우기 위해 회전 조정 - bone.rotation = Quaternion.identity; - - Debug.Log($"Aligned {boneType} to X={targetX:F3}, rotation=0°"); - } - } - } - - private void SetFingersAndToesToTPose() - { - Debug.Log("Setting fingers and toes to T-pose..."); - - // 손가락 설정 (완전히 펴짐) - SetFingersToTPose(true); // 왼쪽 - SetFingersToTPose(false); // 오른쪽 - - // 발가락 설정 (자연스러운 상태) - SetToesToTPose(true); // 왼쪽 - SetToesToTPose(false); // 오른쪽 - } - - private void SetFingersToTPose(bool isLeft) - { - string side = isLeft ? "Left" : "Right"; - - // 모든 손가락 관절을 0도로 설정 - for (int finger = 0; finger < 5; finger++) - { - for (int joint = 0; joint < 3; joint++) - { - HumanBodyBones fingerBone = GetFingerBone(isLeft, finger, joint); - if (fingerBone != HumanBodyBones.LastBone) - { - Transform bone = selectedAnimator.GetBoneTransform(fingerBone); - if (bone != null) - { - bone.localRotation = Quaternion.identity; - } - } - } - } - - Debug.Log($"Set {side} fingers to straight position"); - } - - private void SetToesToTPose(bool isLeft) - { - string side = isLeft ? "Left" : "Right"; - - // 발가락을 자연스러운 상태로 설정 - HumanBodyBones toeBone = isLeft ? HumanBodyBones.LeftToes : HumanBodyBones.RightToes; - Transform bone = selectedAnimator.GetBoneTransform(toeBone); - if (bone != null) - { - bone.localRotation = Quaternion.identity; - Debug.Log($"Set {side} toes to natural position"); - } - } - - private HumanBodyBones GetFingerBone(bool isLeft, int finger, int joint) - { - if (finger == 0) // 엄지 - { - if (isLeft) - { - switch (joint) - { - case 0: return HumanBodyBones.LeftThumbProximal; - case 1: return HumanBodyBones.LeftThumbIntermediate; - case 2: return HumanBodyBones.LeftThumbDistal; - } - } - else - { - switch (joint) - { - case 0: return HumanBodyBones.RightThumbProximal; - case 1: return HumanBodyBones.RightThumbIntermediate; - case 2: return HumanBodyBones.RightThumbDistal; - } - } - } - else // 나머지 손가락들 - { - if (isLeft) - { - switch (finger) - { - case 1: return joint == 0 ? HumanBodyBones.LeftIndexProximal : - joint == 1 ? HumanBodyBones.LeftIndexIntermediate : - HumanBodyBones.LeftIndexDistal; - case 2: return joint == 0 ? HumanBodyBones.LeftMiddleProximal : - joint == 1 ? HumanBodyBones.LeftMiddleIntermediate : - HumanBodyBones.LeftMiddleDistal; - case 3: return joint == 0 ? HumanBodyBones.LeftRingProximal : - joint == 1 ? HumanBodyBones.LeftRingIntermediate : - HumanBodyBones.LeftRingDistal; - case 4: return joint == 0 ? HumanBodyBones.LeftLittleProximal : - joint == 1 ? HumanBodyBones.LeftLittleIntermediate : - HumanBodyBones.LeftLittleDistal; - } - } - else - { - switch (finger) - { - case 1: return joint == 0 ? HumanBodyBones.RightIndexProximal : - joint == 1 ? HumanBodyBones.RightIndexIntermediate : - HumanBodyBones.RightIndexDistal; - case 2: return joint == 0 ? HumanBodyBones.RightMiddleProximal : - joint == 1 ? HumanBodyBones.RightMiddleIntermediate : - HumanBodyBones.RightMiddleDistal; - case 3: return joint == 0 ? HumanBodyBones.RightRingProximal : - joint == 1 ? HumanBodyBones.RightRingIntermediate : - HumanBodyBones.RightRingDistal; - case 4: return joint == 0 ? HumanBodyBones.RightLittleProximal : - joint == 1 ? HumanBodyBones.RightLittleIntermediate : - HumanBodyBones.RightLittleDistal; - } - } - } - - return HumanBodyBones.LastBone; // 유효하지 않은 경우 - } - - // 기본 포즈로 리셋 - private void ResetToDefaultPose() - { - if (selectedAnimator == null) - { - Debug.LogError("No valid Humanoid Animator selected."); - return; - } - - Debug.Log("=== Resetting to Default Pose ==="); - - // Undo 시스템에 등록 - Undo.RecordObject(selectedAnimator.gameObject, "Reset to Default Pose"); - - // 모든 뼈대의 로컬 회전을 0으로 리셋 - for (int i = 0; i < HumanTrait.BoneCount; i++) - { - HumanBodyBones bone = (HumanBodyBones)i; - Transform boneTransform = selectedAnimator.GetBoneTransform(bone); - - if (boneTransform != null) - { - boneTransform.localRotation = Quaternion.identity; - } - } - - Debug.Log("Reset to default pose completed!"); - } - - // 믹사모 네이밍 매핑 및 일괄 변경 함수 추가 - private void RenameToMixamo() - { - if (selectedAnimator == null) - { - Debug.LogError("No valid Humanoid Animator selected."); - return; - } - - // HumanBodyBones와 믹사모 네이밍 매핑 - var mixamoMap = new Dictionary - { - { HumanBodyBones.Hips, "mixamorig:Hips" }, - { HumanBodyBones.LeftUpperLeg, "mixamorig:LeftUpLeg" }, - { HumanBodyBones.LeftLowerLeg, "mixamorig:LeftLeg" }, - { HumanBodyBones.LeftFoot, "mixamorig:LeftFoot" }, - { HumanBodyBones.LeftToes, "mixamorig:LeftToeBase" }, - { HumanBodyBones.RightUpperLeg, "mixamorig:RightUpLeg" }, - { HumanBodyBones.RightLowerLeg, "mixamorig:RightLeg" }, - { HumanBodyBones.RightFoot, "mixamorig:RightFoot" }, - { HumanBodyBones.RightToes, "mixamorig:RightToeBase" }, - { HumanBodyBones.Spine, "mixamorig:Spine" }, - { HumanBodyBones.Chest, "mixamorig:Spine1" }, - { HumanBodyBones.UpperChest, "mixamorig:Spine2" }, // UpperChest는 있는 경우만 - { HumanBodyBones.Neck, "mixamorig:Neck" }, - { HumanBodyBones.Head, "mixamorig:Head" }, - { HumanBodyBones.LeftShoulder, "mixamorig:LeftShoulder" }, - { HumanBodyBones.LeftUpperArm, "mixamorig:LeftArm" }, - { HumanBodyBones.LeftLowerArm, "mixamorig:LeftForeArm" }, - { HumanBodyBones.LeftHand, "mixamorig:LeftHand" }, - { HumanBodyBones.RightShoulder, "mixamorig:RightShoulder" }, - { HumanBodyBones.RightUpperArm, "mixamorig:RightArm" }, - { HumanBodyBones.RightLowerArm, "mixamorig:RightForeArm" }, - { HumanBodyBones.RightHand, "mixamorig:RightHand" }, - // 왼손 손가락 - { HumanBodyBones.LeftThumbProximal, "mixamorig:LeftHandThumb1" }, - { HumanBodyBones.LeftThumbIntermediate, "mixamorig:LeftHandThumb2" }, - { HumanBodyBones.LeftThumbDistal, "mixamorig:LeftHandThumb3" }, - // mixamo에는 Thumb4가 있으나, Unity에는 없음 - { HumanBodyBones.LeftIndexProximal, "mixamorig:LeftHandIndex1" }, - { HumanBodyBones.LeftIndexIntermediate, "mixamorig:LeftHandIndex2" }, - { HumanBodyBones.LeftIndexDistal, "mixamorig:LeftHandIndex3" }, - { HumanBodyBones.LeftMiddleProximal, "mixamorig:LeftHandMiddle1" }, - { HumanBodyBones.LeftMiddleIntermediate, "mixamorig:LeftHandMiddle2" }, - { HumanBodyBones.LeftMiddleDistal, "mixamorig:LeftHandMiddle3" }, - { HumanBodyBones.LeftRingProximal, "mixamorig:LeftHandRing1" }, - { HumanBodyBones.LeftRingIntermediate, "mixamorig:LeftHandRing2" }, - { HumanBodyBones.LeftRingDistal, "mixamorig:LeftHandRing3" }, - { HumanBodyBones.LeftLittleProximal, "mixamorig:LeftHandPinky1" }, - { HumanBodyBones.LeftLittleIntermediate, "mixamorig:LeftHandPinky2" }, - { HumanBodyBones.LeftLittleDistal, "mixamorig:LeftHandPinky3" }, - // 오른손 손가락 - { HumanBodyBones.RightThumbProximal, "mixamorig:RightHandThumb1" }, - { HumanBodyBones.RightThumbIntermediate, "mixamorig:RightHandThumb2" }, - { HumanBodyBones.RightThumbDistal, "mixamorig:RightHandThumb3" }, - { HumanBodyBones.RightIndexProximal, "mixamorig:RightHandIndex1" }, - { HumanBodyBones.RightIndexIntermediate, "mixamorig:RightHandIndex2" }, - { HumanBodyBones.RightIndexDistal, "mixamorig:RightHandIndex3" }, - { HumanBodyBones.RightMiddleProximal, "mixamorig:RightHandMiddle1" }, - { HumanBodyBones.RightMiddleIntermediate, "mixamorig:RightHandMiddle2" }, - { HumanBodyBones.RightMiddleDistal, "mixamorig:RightHandMiddle3" }, - { HumanBodyBones.RightRingProximal, "mixamorig:RightHandRing1" }, - { HumanBodyBones.RightRingIntermediate, "mixamorig:RightHandRing2" }, - { HumanBodyBones.RightRingDistal, "mixamorig:RightHandRing3" }, - { HumanBodyBones.RightLittleProximal, "mixamorig:RightHandPinky1" }, - { HumanBodyBones.RightLittleIntermediate, "mixamorig:RightHandPinky2" }, - { HumanBodyBones.RightLittleDistal, "mixamorig:RightHandPinky3" }, - }; - - // UpperChest가 없는 경우 무시 - foreach (var kvp in mixamoMap) - { - if (kvp.Key == HumanBodyBones.UpperChest) - { - var upperChest = selectedAnimator.GetBoneTransform(HumanBodyBones.UpperChest); - if (upperChest == null) continue; - upperChest.name = kvp.Value; - Debug.Log($"UpperChest 본이 있어 이름을 {kvp.Value}로 변경"); - continue; - } - var bone = selectedAnimator.GetBoneTransform(kvp.Key); - if (bone != null) - { - bone.name = kvp.Value; - Debug.Log($"{kvp.Key} 이름을 {kvp.Value}로 변경"); - } - } - Debug.Log("믹사모 네이밍으로 일괄 변경 완료!"); - } -} diff --git a/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs.meta b/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs.meta deleted file mode 100644 index 6b043396..00000000 --- a/Assets/Scripts/YAMO_Scripts/RenameHumanoidBones.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d90295d3945afb04dbf6709ab5c26a3e \ No newline at end of file