feat: 드로그 기본기2 ActorCore 모션 적용
- ActorCore 펀치/어퍼컷/촙 후보 FBX와 휴머노이드 클립 추출 에디터 창을 추가 - 드로그 강타, 기본기2, 기본기3 스킬 클립과 기본기2 패턴 3타 스텝을 새 모션 흐름에 맞게 갱신 - 미사용 도약/발구르기 파생 클립을 정리하고 아직 참조 중인 클립은 보존 - Unity 세션 부재로 에디터 컴파일과 콘솔 검증은 이번 커밋에서 미수행
This commit is contained in:
@@ -38,7 +38,7 @@ ModelImporter:
|
||||
takeName: Armature|orc-chop
|
||||
internalID: -8751659441991159448
|
||||
firstFrame: 0
|
||||
lastFrame: 93.00001
|
||||
lastFrame: 93
|
||||
wrapMode: 0
|
||||
orientationOffsetY: 0
|
||||
level: 0
|
||||
|
||||
BIN
Assets/External/Animations/ActorCore/forward-straight-punch-r-mirror.fbx
vendored
Normal file
BIN
Assets/External/Animations/ActorCore/forward-straight-punch-r-mirror.fbx
vendored
Normal file
Binary file not shown.
1060
Assets/External/Animations/ActorCore/forward-straight-punch-r-mirror.fbx.meta
vendored
Normal file
1060
Assets/External/Animations/ActorCore/forward-straight-punch-r-mirror.fbx.meta
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Assets/External/Animations/ActorCore/forward-straight-punch-r.fbx
vendored
Normal file
BIN
Assets/External/Animations/ActorCore/forward-straight-punch-r.fbx
vendored
Normal file
Binary file not shown.
1060
Assets/External/Animations/ActorCore/forward-straight-punch-r.fbx.meta
vendored
Normal file
1060
Assets/External/Animations/ActorCore/forward-straight-punch-r.fbx.meta
vendored
Normal file
File diff suppressed because it is too large
Load Diff
66557
Assets/External/Animations/ActorCore/orc-chop-mirror.anim
vendored
Normal file
66557
Assets/External/Animations/ActorCore/orc-chop-mirror.anim
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a025fd35595e802b82bd468471d91e2
|
||||
guid: 4ede17592b1c775238b5f84accfc854f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
BIN
Assets/External/Animations/ActorCore/orc-chop.fbx
vendored
Normal file
BIN
Assets/External/Animations/ActorCore/orc-chop.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Animations/ActorCore/orc-chop.fbx.meta
vendored
Normal file
110
Assets/External/Animations/ActorCore/orc-chop.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d52352fed4bd85a37a04f51132ed34bb
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/External/Animations/ActorCore/uppercut-l-mirror.fbx
vendored
Normal file
BIN
Assets/External/Animations/ActorCore/uppercut-l-mirror.fbx
vendored
Normal file
Binary file not shown.
1060
Assets/External/Animations/ActorCore/uppercut-l-mirror.fbx.meta
vendored
Normal file
1060
Assets/External/Animations/ActorCore/uppercut-l-mirror.fbx.meta
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Assets/External/Animations/ActorCore/uppercut-l.fbx
vendored
Normal file
BIN
Assets/External/Animations/ActorCore/uppercut-l.fbx
vendored
Normal file
Binary file not shown.
1060
Assets/External/Animations/ActorCore/uppercut-l.fbx.meta
vendored
Normal file
1060
Assets/External/Animations/ActorCore/uppercut-l.fbx.meta
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2
Assets/External/Models/SidekickCharacters/Database/Side_Kick_Data.db.meta
vendored
Executable file → Normal file
2
Assets/External/Models/SidekickCharacters/Database/Side_Kick_Data.db.meta
vendored
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78e06db48a4e2714ca78cafca0b4800b
|
||||
guid: 936b212f6c1cb68aaab2cbd3180f4d7a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c901be6f00fe40f85ac3cefc15305b22
|
||||
guid: b73b9afb945eae6ccb1b7f674a0bf7eb
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "Anim_Drog_\uB3C4\uC57D_\uACF5\uC911_0"
|
||||
serializedVersion: 7
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
@@ -1,53 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "Anim_Drog_\uB3C4\uC57D_\uC900\uBE44_0"
|
||||
serializedVersion: 7
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c40824d39d8c11bedbeb448867e881c3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,53 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "Anim_Drog_\uB3C4\uC57D_\uCC29\uC9C0_0"
|
||||
serializedVersion: 7
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b11f2b53d826bba3ab9f8086a42de14
|
||||
guid: 0f08a330b8e1c0cbaba0f0332610a8a2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 156c90879bba0d7649e8b29224daa390
|
||||
guid: 53e4bf96ef5854e62ac4d374a8ac8c33
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6439cde8bc726bd1caad7d6e18a31416
|
||||
guid: f26d3360f86be8d4b9995f7701ed24f2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 606aec780e456217687074cbbf23a2c8
|
||||
guid: 6a1f5dcbbfd5ba4fc93114485bf62e8a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f04142b14e6fd1e9a98b8ac5f2297cc
|
||||
guid: 3cb1d67023e25752aa6b5fb0318dfd03
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
31778
Assets/_Game/Animations/Anim_Drog_콤보-기본기2_3_0.anim
Normal file
31778
Assets/_Game/Animations/Anim_Drog_콤보-기본기2_3_0.anim
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 79b23145d7dec4db98ff025556552e72
|
||||
guid: 708630f3401af00baa9a8fa3e95ef1a0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 10d643a69e2dd30dd878185745485fbb
|
||||
guid: 8c6ac0672bd9c5012bb68c79b24d4b42
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b73a55c82a8bff692aa4a9e60395c247
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3904a390dfdc98cd6bb386fc6c024eea
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -476,7 +476,7 @@ AnimatorState:
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 584d21bf1ba1a2dad845629563d8c26c, type: 2}
|
||||
m_Motion: {fileID: 7400000, guid: ebc8e8e59d375104babccd596aa3bdc0, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
|
||||
BIN
Assets/_Game/Animations/forward-straight-punch-r.fbx
Normal file
BIN
Assets/_Game/Animations/forward-straight-punch-r.fbx
Normal file
Binary file not shown.
1061
Assets/_Game/Animations/forward-straight-punch-r.fbx.meta
Normal file
1061
Assets/_Game/Animations/forward-straight-punch-r.fbx.meta
Normal file
File diff suppressed because it is too large
Load Diff
@@ -32,6 +32,13 @@ MonoBehaviour:
|
||||
requiredDamageRatio: 0.1
|
||||
telegraphAbnormality: {fileID: 0}
|
||||
staggerDuration: 2
|
||||
- Type: 0
|
||||
Skill: {fileID: 11400000, guid: 067dec0123602b604a6e3ff2540d471f, type: 2}
|
||||
Duration: 0
|
||||
ChargeData:
|
||||
requiredDamageRatio: 0.1
|
||||
telegraphAbnormality: {fileID: 0}
|
||||
staggerDuration: 2
|
||||
cooldown: 3
|
||||
minPhase: 1
|
||||
skipJumpStepOnNoTarget: 0
|
||||
|
||||
@@ -20,7 +20,7 @@ MonoBehaviour:
|
||||
activationType: 1
|
||||
baseTypes: 1
|
||||
animationClips:
|
||||
- {fileID: 7400000, guid: c901be6f00fe40f85ac3cefc15305b22, type: 2}
|
||||
- {fileID: 7400000, guid: b73b9afb945eae6ccb1b7f674a0bf7eb, type: 2}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
|
||||
@@ -19,9 +19,9 @@ MonoBehaviour:
|
||||
activationType: 1
|
||||
baseTypes: 1
|
||||
animationClips:
|
||||
- {fileID: 7400000, guid: 6b11f2b53d826bba3ab9f8086a42de14, type: 2}
|
||||
- {fileID: 7400000, guid: 156c90879bba0d7649e8b29224daa390, type: 2}
|
||||
- {fileID: 7400000, guid: 6439cde8bc726bd1caad7d6e18a31416, type: 2}
|
||||
- {fileID: 7400000, guid: 0f08a330b8e1c0cbaba0f0332610a8a2, type: 2}
|
||||
- {fileID: 7400000, guid: 53e4bf96ef5854e62ac4d374a8ac8c33, type: 2}
|
||||
- {fileID: 7400000, guid: f26d3360f86be8d4b9995f7701ed24f2, type: 2}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
|
||||
@@ -19,8 +19,8 @@ MonoBehaviour:
|
||||
activationType: 1
|
||||
baseTypes: 1
|
||||
animationClips:
|
||||
- {fileID: 7400000, guid: 606aec780e456217687074cbbf23a2c8, type: 2}
|
||||
- {fileID: 7400000, guid: 1f04142b14e6fd1e9a98b8ac5f2297cc, type: 2}
|
||||
- {fileID: 7400000, guid: 6a1f5dcbbfd5ba4fc93114485bf62e8a, type: 2}
|
||||
- {fileID: 7400000, guid: 3cb1d67023e25752aa6b5fb0318dfd03, type: 2}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
|
||||
65
Assets/_Game/Data/Skills/Data_Skill_Drog_콤보-기본기2_3.asset
Normal file
65
Assets/_Game/Data/Skills/Data_Skill_Drog_콤보-기본기2_3.asset
Normal file
@@ -0,0 +1,65 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
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: 94f0a76cebcac2f4fb5daf1b675fd79f, type: 3}
|
||||
m_Name: "Data_Skill_Drog_\uCF64\uBCF4-\uAE30\uBCF8\uAE302_3"
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData
|
||||
skillName: "\uCF64\uBCF4-\uAE30\uBCF8\uAE302 2\uD0C0"
|
||||
description: "\uAE30\uBCF8\uAE30 \uCF64\uBCF42\uC758 \uB9C8\uBB34\uB9AC \uD0C0\uACA9\uC785\uB2C8\uB2E4."
|
||||
icon: {fileID: 0}
|
||||
skillRole: 1
|
||||
activationType: 1
|
||||
baseTypes: 1
|
||||
animationClips:
|
||||
- {fileID: 7400000, guid: 6a1f5dcbbfd5ba4fc93114485bf62e8a, type: 2}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
jumpToTarget: 0
|
||||
blockMovementWhileCasting: 1
|
||||
blockJumpWhileCasting: 1
|
||||
blockOtherSkillsWhileCasting: 1
|
||||
castTargetTrackingMode: 1
|
||||
castTargetRotationSpeed: 12
|
||||
castTargetStopDistance: 2.5
|
||||
allowedWeaponTraits: 0
|
||||
cooldown: 0
|
||||
manaCost: 0
|
||||
maxGemSlotCount: 0
|
||||
castStartEffects: []
|
||||
triggeredEffects:
|
||||
- triggerIndex: 0
|
||||
effects:
|
||||
- {fileID: 11400000, guid: fdbbc8f5dc30568cf934a62595987d5c, type: 2}
|
||||
isChanneling: 0
|
||||
loopPhase:
|
||||
enabled: 0
|
||||
loopMode: 1
|
||||
maxDuration: 3
|
||||
tickInterval: 0.5
|
||||
tickEffects: []
|
||||
exitEffects: []
|
||||
loopVfxPrefab: {fileID: 0}
|
||||
loopVfxMountPath:
|
||||
loopVfxLengthScale: 1
|
||||
loopVfxWidthScale: 1
|
||||
releasePhase:
|
||||
enabled: 0
|
||||
animationClips: []
|
||||
startEffects: []
|
||||
channelDuration: 3
|
||||
channelTickInterval: 0.5
|
||||
channelTickEffects: []
|
||||
channelEndEffects: []
|
||||
channelVfxPrefab: {fileID: 0}
|
||||
channelVfxMountPath:
|
||||
channelVfxLengthScale: 1
|
||||
channelVfxWidthScale: 1
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9d61fd0c58927165096b86a443f50346
|
||||
guid: 067dec0123602b604a6e3ff2540d471f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -20,7 +20,7 @@ MonoBehaviour:
|
||||
baseTypes: 1
|
||||
animationClips:
|
||||
- {fileID: 7400000, guid: 3f077b889a0c441a8be8f51575b34f37, type: 2}
|
||||
- {fileID: 7400000, guid: 10d643a69e2dd30dd878185745485fbb, type: 2}
|
||||
- {fileID: 7400000, guid: 8c6ac0672bd9c5012bb68c79b24d4b42, type: 2}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,382 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
using UnityEditor;
|
||||
|
||||
/// <summary>
|
||||
/// ActorCore 기준 FBX를 참고해 소스 FBX에서 휴머노이드 클립을 추출하는 에디터 윈도우입니다.
|
||||
/// 소스 FBX는 우선 Create From This Model로 재임포트한 뒤, 유효한 휴머노이드 클립만 .anim으로 저장합니다.
|
||||
/// </summary>
|
||||
public sealed class ActorCoreHumanoidClipExtractorWindow : EditorWindow
|
||||
{
|
||||
private const string MenuPath = "Tools/Animation/Extract ActorCore Humanoid Clips";
|
||||
private const string DefaultReferencePath = "Assets/External/Animations/ActorCore/uppercut-l.fbx";
|
||||
private const string DefaultOutputFolder = "Assets/External/Animations/ActorCore/Extracted";
|
||||
|
||||
private UnityEngine.Object referenceFbx;
|
||||
private UnityEngine.Object sourceFbx;
|
||||
private DefaultAsset outputFolder;
|
||||
private bool overwriteExisting = true;
|
||||
private Vector2 scrollPosition;
|
||||
|
||||
private struct ImporterState
|
||||
{
|
||||
public bool importAnimation;
|
||||
public ModelImporterAnimationType animationType;
|
||||
public ModelImporterAvatarSetup avatarSetup;
|
||||
public Avatar sourceAvatar;
|
||||
public ModelImporterClipAnimation[] clipAnimations;
|
||||
}
|
||||
|
||||
[MenuItem(MenuPath, false, 25)]
|
||||
public static void ShowWindow()
|
||||
{
|
||||
var window = GetWindow<ActorCoreHumanoidClipExtractorWindow>("ActorCore Clip Extractor");
|
||||
window.minSize = new Vector2(520f, 360f);
|
||||
window.InitializeDefaults();
|
||||
window.Show();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
InitializeDefaults();
|
||||
}
|
||||
|
||||
private void InitializeDefaults()
|
||||
{
|
||||
if (referenceFbx == null)
|
||||
referenceFbx = AssetDatabase.LoadMainAssetAtPath(DefaultReferencePath);
|
||||
|
||||
if (outputFolder == null)
|
||||
outputFolder = AssetDatabase.LoadAssetAtPath<DefaultAsset>(DefaultOutputFolder);
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EditorGUILayout.Space(8f);
|
||||
EditorGUILayout.LabelField("ActorCore 휴머노이드 클립 추출", EditorStyles.boldLabel);
|
||||
EditorGUILayout.Space(4f);
|
||||
EditorGUILayout.HelpBox(
|
||||
"기준 FBX의 휴머노이드 구조를 검증용으로 참고하고, 소스 FBX는 Create From This Model로 재임포트한 뒤 "
|
||||
+ "유효한 휴머노이드 클립만 개별 .anim으로 추출합니다.",
|
||||
MessageType.Info);
|
||||
|
||||
using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition))
|
||||
{
|
||||
scrollPosition = scrollView.scrollPosition;
|
||||
|
||||
referenceFbx = EditorGUILayout.ObjectField(
|
||||
"기준 FBX",
|
||||
referenceFbx,
|
||||
typeof(UnityEngine.Object),
|
||||
false);
|
||||
|
||||
sourceFbx = EditorGUILayout.ObjectField(
|
||||
"소스 FBX",
|
||||
sourceFbx,
|
||||
typeof(UnityEngine.Object),
|
||||
false);
|
||||
|
||||
outputFolder = (DefaultAsset)EditorGUILayout.ObjectField(
|
||||
"출력 폴더",
|
||||
outputFolder,
|
||||
typeof(DefaultAsset),
|
||||
false);
|
||||
|
||||
overwriteExisting = EditorGUILayout.ToggleLeft("기존 .anim 덮어쓰기", overwriteExisting);
|
||||
|
||||
EditorGUILayout.Space(12f);
|
||||
DrawSelectionSummary();
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(8f);
|
||||
|
||||
using (new EditorGUI.DisabledScope(!CanExtract()))
|
||||
{
|
||||
if (GUILayout.Button("추출", GUILayout.Height(34f)))
|
||||
Extract();
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawSelectionSummary()
|
||||
{
|
||||
EditorGUILayout.LabelField("선택 요약", EditorStyles.boldLabel);
|
||||
|
||||
DrawAssetPathLabel("기준 FBX 경로", referenceFbx);
|
||||
DrawAssetPathLabel("소스 FBX 경로", sourceFbx);
|
||||
DrawAssetPathLabel("출력 폴더 경로", outputFolder);
|
||||
|
||||
if (sourceFbx == null)
|
||||
return;
|
||||
|
||||
string sourcePath = AssetDatabase.GetAssetPath(sourceFbx);
|
||||
if (!IsFbxPath(sourcePath))
|
||||
return;
|
||||
|
||||
AnimationClip[] clips = AssetDatabase.LoadAllAssetsAtPath(sourcePath)
|
||||
.OfType<AnimationClip>()
|
||||
.ToArray();
|
||||
|
||||
string[] clipNames = clips.Select(clip => clip.name).ToArray();
|
||||
string clipSummary = clipNames.Length > 0
|
||||
? string.Join(", ", clipNames)
|
||||
: "(없음)";
|
||||
|
||||
EditorGUILayout.LabelField("소스 내장 클립", clipSummary, EditorStyles.wordWrappedLabel);
|
||||
}
|
||||
|
||||
private static void DrawAssetPathLabel(string label, UnityEngine.Object asset)
|
||||
{
|
||||
string assetPath = asset != null ? AssetDatabase.GetAssetPath(asset) : "(미선택)";
|
||||
EditorGUILayout.LabelField(label, assetPath, EditorStyles.wordWrappedLabel);
|
||||
}
|
||||
|
||||
private bool CanExtract()
|
||||
{
|
||||
if (EditorApplication.isPlayingOrWillChangePlaymode)
|
||||
return false;
|
||||
|
||||
return IsValidFbx(referenceFbx) && IsValidFbx(sourceFbx) && IsValidFolder(outputFolder);
|
||||
}
|
||||
|
||||
private static bool IsValidFbx(UnityEngine.Object asset)
|
||||
{
|
||||
return asset != null && IsFbxPath(AssetDatabase.GetAssetPath(asset));
|
||||
}
|
||||
|
||||
private static bool IsFbxPath(string assetPath)
|
||||
{
|
||||
return !string.IsNullOrEmpty(assetPath)
|
||||
&& assetPath.EndsWith(".fbx", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private static bool IsValidFolder(DefaultAsset asset)
|
||||
{
|
||||
if (asset == null)
|
||||
return false;
|
||||
|
||||
string path = AssetDatabase.GetAssetPath(asset);
|
||||
return !string.IsNullOrEmpty(path) && AssetDatabase.IsValidFolder(path);
|
||||
}
|
||||
|
||||
private void Extract()
|
||||
{
|
||||
string referencePath = AssetDatabase.GetAssetPath(referenceFbx);
|
||||
string sourcePath = AssetDatabase.GetAssetPath(sourceFbx);
|
||||
string outputPath = AssetDatabase.GetAssetPath(outputFolder);
|
||||
|
||||
var referenceImporter = AssetImporter.GetAtPath(referencePath) as ModelImporter;
|
||||
var sourceImporter = AssetImporter.GetAtPath(sourcePath) as ModelImporter;
|
||||
|
||||
if (referenceImporter == null || sourceImporter == null)
|
||||
{
|
||||
EditorUtility.DisplayDialog(
|
||||
"ActorCore Clip Extractor",
|
||||
"FBX ModelImporter를 찾지 못했습니다.",
|
||||
"확인");
|
||||
return;
|
||||
}
|
||||
|
||||
int referenceSkeletonCount = referenceImporter.humanDescription.skeleton?.Length ?? 0;
|
||||
TakeInfo[] originalTakeInfos = sourceImporter.importedTakeInfos ?? Array.Empty<TakeInfo>();
|
||||
ImporterState originalState = CaptureImporterState(sourceImporter);
|
||||
|
||||
if (!PrepareSourceImporter(sourceImporter))
|
||||
{
|
||||
EditorUtility.DisplayDialog(
|
||||
"ActorCore Clip Extractor",
|
||||
"소스 FBX를 휴머노이드 기준으로 준비하지 못했습니다. 콘솔을 확인해 주세요.",
|
||||
"확인");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
AnimationClip[] clips = AssetDatabase.LoadAllAssetsAtPath(sourcePath)
|
||||
.OfType<AnimationClip>()
|
||||
.Where(IsUsableHumanoidClip)
|
||||
.ToArray();
|
||||
|
||||
if (clips.Length == 0)
|
||||
{
|
||||
TakeInfo[] takeInfos = sourceImporter.importedTakeInfos ?? Array.Empty<TakeInfo>();
|
||||
string takeSummary = takeInfos.Length > 0
|
||||
? string.Join(", ", takeInfos.Select(take => take.name))
|
||||
: "(없음)";
|
||||
int preparedSkeletonCount = sourceImporter.humanDescription.skeleton?.Length ?? 0;
|
||||
bool humanoidImportFailed = originalTakeInfos.Length > 0
|
||||
&& takeInfos.Length == 0
|
||||
&& preparedSkeletonCount == 0;
|
||||
string failureReason = humanoidImportFailed
|
||||
? "원본 FBX에는 테이크가 있었지만, 휴머노이드로 임시 재임포트하는 단계에서 Unity가 유효한 Avatar 구조를 만들지 못했습니다.\n"
|
||||
+ "이 경우는 보통 본 매핑 또는 루트 계층이 휴머노이드 조건을 만족하지 않아 `Invalid Avatar Rig Configuration`이 발생한 상황입니다."
|
||||
: "이 경우는 보통 소스 FBX가 Unity에서 애니메이션 테이크를 읽지 못하는 상태입니다.\n"
|
||||
+ "원본 툴에서 애니메이션 포함 상태로 다시 export하거나, Blender에서 NLA/All Actions 기반으로 다시 export해야 합니다.";
|
||||
|
||||
EditorUtility.DisplayDialog(
|
||||
"ActorCore Clip Extractor",
|
||||
"추출 가능한 휴머노이드 클립이 없습니다.\n\n"
|
||||
+ $"원본 테이크 수: {originalTakeInfos.Length}\n"
|
||||
+ $"Unity가 감지한 테이크 수: {takeInfos.Length}\n"
|
||||
+ $"휴머노이드 스켈레톤 수: {preparedSkeletonCount}\n"
|
||||
+ $"테이크 목록: {takeSummary}\n\n"
|
||||
+ failureReason,
|
||||
"확인");
|
||||
return;
|
||||
}
|
||||
|
||||
List<string> createdPaths = new List<string>();
|
||||
|
||||
AssetDatabase.StartAssetEditing();
|
||||
|
||||
try
|
||||
{
|
||||
foreach (AnimationClip clip in clips)
|
||||
{
|
||||
string fileName = SanitizeClipName(clip.name);
|
||||
string targetPath = $"{outputPath}/{fileName}.anim";
|
||||
|
||||
if (!overwriteExisting)
|
||||
targetPath = AssetDatabase.GenerateUniqueAssetPath(targetPath);
|
||||
|
||||
AnimationClip existingClip = AssetDatabase.LoadAssetAtPath<AnimationClip>(targetPath);
|
||||
AnimationClip copiedClip = UnityEngine.Object.Instantiate(clip);
|
||||
copiedClip.name = fileName;
|
||||
|
||||
if (existingClip != null && overwriteExisting)
|
||||
{
|
||||
EditorUtility.CopySerialized(copiedClip, existingClip);
|
||||
EditorUtility.SetDirty(existingClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetDatabase.CreateAsset(copiedClip, targetPath);
|
||||
}
|
||||
|
||||
createdPaths.Add(targetPath);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
AssetDatabase.StopAssetEditing();
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
int sourceSkeletonCount = sourceImporter.humanDescription.skeleton?.Length ?? 0;
|
||||
|
||||
string message = $"기준 스켈레톤 수: {referenceSkeletonCount}\n"
|
||||
+ $"소스 스켈레톤 수: {sourceSkeletonCount}\n"
|
||||
+ $"추출 클립 수: {createdPaths.Count}\n\n"
|
||||
+ string.Join("\n", createdPaths);
|
||||
|
||||
Debug.Log($"[ActorCoreHumanoidClipExtractor] {message}");
|
||||
EditorUtility.DisplayDialog("ActorCore Clip Extractor", message, "확인");
|
||||
}
|
||||
finally
|
||||
{
|
||||
RestoreImporterState(sourceImporter, originalState);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool PrepareSourceImporter(ModelImporter importer)
|
||||
{
|
||||
if (importer == null)
|
||||
return false;
|
||||
|
||||
importer.importAnimation = true;
|
||||
importer.animationType = ModelImporterAnimationType.Human;
|
||||
importer.avatarSetup = ModelImporterAvatarSetup.CreateFromThisModel;
|
||||
importer.sourceAvatar = null;
|
||||
importer.SaveAndReimport();
|
||||
return true;
|
||||
}
|
||||
|
||||
private static ImporterState CaptureImporterState(ModelImporter importer)
|
||||
{
|
||||
return new ImporterState
|
||||
{
|
||||
importAnimation = importer.importAnimation,
|
||||
animationType = importer.animationType,
|
||||
avatarSetup = importer.avatarSetup,
|
||||
sourceAvatar = importer.sourceAvatar,
|
||||
clipAnimations = CloneClipAnimations(importer.clipAnimations),
|
||||
};
|
||||
}
|
||||
|
||||
private static void RestoreImporterState(ModelImporter importer, ImporterState state)
|
||||
{
|
||||
if (importer == null)
|
||||
return;
|
||||
|
||||
importer.importAnimation = state.importAnimation;
|
||||
importer.animationType = state.animationType;
|
||||
importer.avatarSetup = state.avatarSetup;
|
||||
importer.sourceAvatar = state.sourceAvatar;
|
||||
importer.clipAnimations = state.clipAnimations ?? Array.Empty<ModelImporterClipAnimation>();
|
||||
importer.SaveAndReimport();
|
||||
}
|
||||
|
||||
private static ModelImporterClipAnimation[] CloneClipAnimations(ModelImporterClipAnimation[] clips)
|
||||
{
|
||||
if (clips == null || clips.Length == 0)
|
||||
return Array.Empty<ModelImporterClipAnimation>();
|
||||
|
||||
return clips.Select(clip => new ModelImporterClipAnimation
|
||||
{
|
||||
name = clip.name,
|
||||
takeName = clip.takeName,
|
||||
firstFrame = clip.firstFrame,
|
||||
lastFrame = clip.lastFrame,
|
||||
loopTime = clip.loopTime,
|
||||
loopPose = clip.loopPose,
|
||||
cycleOffset = clip.cycleOffset,
|
||||
lockRootRotation = clip.lockRootRotation,
|
||||
lockRootHeightY = clip.lockRootHeightY,
|
||||
lockRootPositionXZ = clip.lockRootPositionXZ,
|
||||
keepOriginalOrientation = clip.keepOriginalOrientation,
|
||||
keepOriginalPositionY = clip.keepOriginalPositionY,
|
||||
keepOriginalPositionXZ = clip.keepOriginalPositionXZ,
|
||||
heightFromFeet = clip.heightFromFeet,
|
||||
mirror = clip.mirror,
|
||||
maskType = clip.maskType,
|
||||
additiveReferencePoseFrame = clip.additiveReferencePoseFrame,
|
||||
hasAdditiveReferencePose = clip.hasAdditiveReferencePose,
|
||||
wrapMode = clip.wrapMode,
|
||||
}).ToArray();
|
||||
}
|
||||
|
||||
private static bool IsUsableHumanoidClip(AnimationClip clip)
|
||||
{
|
||||
if (clip == null)
|
||||
return false;
|
||||
|
||||
if (clip.name.StartsWith("__preview__", StringComparison.Ordinal))
|
||||
return false;
|
||||
|
||||
if (!clip.humanMotion)
|
||||
return false;
|
||||
|
||||
if (clip.empty)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string SanitizeClipName(string clipName)
|
||||
{
|
||||
string sanitized = clipName;
|
||||
int separatorIndex = sanitized.LastIndexOf('|');
|
||||
if (separatorIndex >= 0 && separatorIndex + 1 < sanitized.Length)
|
||||
sanitized = sanitized.Substring(separatorIndex + 1);
|
||||
|
||||
foreach (char invalid in Path.GetInvalidFileNameChars())
|
||||
sanitized = sanitized.Replace(invalid, '_');
|
||||
|
||||
return sanitized.Trim();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d1baf05ee0d5d7cf838a1599adbb71d
|
||||
Reference in New Issue
Block a user