WL #951 PD 지시 6건 — ① 마법책 3타 = 1·2타 1회씩 교대(×1.4) ② 지팡이 3타 = RangeAttack2 거울 f28~32 ×0.25(내뻗은 채 정지 0.5 s) ③ 오브(1057) 3타 신설 = Mage Jump-Attack1 점프 내리치기(공격표 step 3 행 · 매핑 attack3 · pcanim_mage) ④ 오브 시전 시간 SkillList 703303 0.5 s · 703301 1.0 s ⑤ 비수 3타 궤적 = 원본 Effect_Slash_10202_3 사본을 swingFx follow+alignWeapon 으로 날 위치·방향 추종 ⑥ 비수 각성 연출 = 도약 잔상 4 → 공중 클립 끝에 1.2 m 낙하(LateUpdate) + 착지 클립 ghost_land(Platform Sub_HeroLanding · 어새신 컨트롤러) + 바닥 먼지(HCFX Dust_Dash 사본) + 0.5 m 미끄러짐(NavMeshAgent.Move) · WLGhostStrike 규칙 필드 신설

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-10-20 19:01:04 +09:00
parent ff254eff1e
commit c19e37a37d
17 changed files with 89942 additions and 305 deletions

View File

@ -725,6 +725,49 @@ ModelImporter:
maskType: 0 maskType: 0
maskSource: {instanceID: 0} maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0 additiveReferencePoseFrame: 0
- serializedVersion: 16
name: OrbSlam3_S_10301
takeName: Take 001
internalID: -998496362607748373
firstFrame: 0
lastFrame: 24
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 1
loopBlendPositionY: 1
loopBlendPositionXZ: 0
keepOriginalOrientation: 1
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events:
- time: 0
functionName: LookAtTarget
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 0.66
functionName: Projectile
data: Projectile_10301
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 0
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 1 isReadable: 1
meshes: meshes:
lODScreenPercentages: [] lODScreenPercentages: []

View File

@ -655,8 +655,8 @@ ModelImporter:
name: StaffCast3_S_10302 name: StaffCast3_S_10302
takeName: Take 001 takeName: Take 001
internalID: 1827226128182048838 internalID: 1827226128182048838
firstFrame: 16 firstFrame: 28
lastFrame: 46 lastFrame: 32
wrapMode: 0 wrapMode: 0
orientationOffsetY: 0 orientationOffsetY: 0
level: 0 level: 0
@ -683,7 +683,7 @@ ModelImporter:
floatParameter: 0 floatParameter: 0
intParameter: 0 intParameter: 0
messageOptions: 0 messageOptions: 0
- time: 0.35 - time: 0.15
functionName: Projectile functionName: Projectile
data: Projectile_10302 data: Projectile_10302
objectReferenceParameter: {instanceID: 0} objectReferenceParameter: {instanceID: 0}

File diff suppressed because one or more lines are too long

View File

@ -416,6 +416,28 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &-2371047487094635229
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 110222392}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-2271460271125536330 --- !u!1102 &-2271460271125536330
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -565,6 +587,34 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1102 &-1537197310772809155
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ghost_land
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -2371047487094635229}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -998496362607748373, guid: 25314145480ad74499a550c1b1ffe70e,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-923179202116366244 --- !u!1102 &-923179202116366244
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -2404,6 +2454,9 @@ AnimatorStateMachine:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -6337961118936173454} m_State: {fileID: -6337961118936173454}
m_Position: {x: 50, y: 40, z: 0} m_Position: {x: 50, y: 40, z: 0}
- serializedVersion: 1
m_State: {fileID: -1537197310772809155}
m_Position: {x: -20, y: -170, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: [] m_AnyStateTransitions: []
m_EntryTransitions: [] m_EntryTransitions: []

View File

@ -1,27 +1,5 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-8539633261012113699
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 110222392}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.8369565
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-7588987582283963691 --- !u!1102 &-7588987582283963691
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -49,6 +27,34 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1102 &-6957861221246778362
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: attack3
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -2386498368840134014}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -998496362607748373, guid: 45a67152c2387d44ca765df06da1d33a,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-6725469328595531331 --- !u!1102 &-6725469328595531331
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -60,7 +66,7 @@ AnimatorState:
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
- {fileID: -8539633261012113699} - {fileID: 803565803277545113}
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0} m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0 m_IKOnFeet: 0
@ -180,6 +186,28 @@ AnimatorStateTransition:
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1101 &-2386498368840134014
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 110222392}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.8
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-2242026176269797008 --- !u!1101 &-2242026176269797008
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
@ -2006,6 +2034,9 @@ AnimatorStateMachine:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -6188849112321773161} m_State: {fileID: -6188849112321773161}
m_Position: {x: 290, y: -300, z: 0} m_Position: {x: 290, y: -300, z: 0}
- serializedVersion: 1
m_State: {fileID: -6957861221246778362}
m_Position: {x: 325, y: -235, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: [] m_AnyStateTransitions: []
m_EntryTransitions: [] m_EntryTransitions: []
@ -2097,6 +2128,28 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &803565803277545113
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6957861221246778362}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.85
m_HasExitTime: 1
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &811731208389968518 --- !u!1101 &811731208389968518
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1

View File

@ -2303,7 +2303,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: attack3 m_Name: attack3
m_Speed: 1 m_Speed: 0.25
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
- {fileID: 7396964718502629461} - {fileID: 7396964718502629461}

View File

@ -49,56 +49,6 @@ AnimatorStateTransition:
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1102 &-4796975231335754110
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Attack3d
m_Speed: 2.5
m_CycleOffset: 0
m_Transitions:
- {fileID: 8777332740921490109}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 6234510843852800090, guid: e0919932c9c179142ad06cf4ee11f204,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &-4218806072011345864
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -3990237916424465730}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.85
m_HasExitTime: 1
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-4177302407337328582 --- !u!1102 &-4177302407337328582
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -127,34 +77,6 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1102 &-3990237916424465730
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: attack3
m_Speed: 2.5
m_CycleOffset: 0
m_Transitions:
- {fileID: 6736461488995620371}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 6234510843852800090, guid: e3d070983d568754782121f6efd86a6d,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-3931620847702217361 --- !u!1102 &-3931620847702217361
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -279,6 +201,28 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &-1075653808135005254
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 110222392}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.8
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-944003229221772330 --- !u!1101 &-944003229221772330
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
@ -2087,17 +2031,11 @@ AnimatorStateMachine:
m_State: {fileID: 3043085607005748951} m_State: {fileID: 3043085607005748951}
m_Position: {x: -50, y: -150, z: 0} m_Position: {x: -50, y: -150, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -3990237916424465730} m_State: {fileID: 8771712776054593383}
m_Position: {x: -15, y: -85, z: 0} m_Position: {x: -15, y: -85, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 1211289149971408261} m_State: {fileID: 5184296106726420485}
m_Position: {x: 20, y: -20, z: 0} m_Position: {x: 20, y: -20, z: 0}
- serializedVersion: 1
m_State: {fileID: 1991670155751961014}
m_Position: {x: 55, y: 45, z: 0}
- serializedVersion: 1
m_State: {fileID: -4796975231335754110}
m_Position: {x: 90, y: 110, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: [] m_AnyStateTransitions: []
m_EntryTransitions: [] m_EntryTransitions: []
@ -2189,28 +2127,6 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &712130927223328335
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1991670155751961014}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.85
m_HasExitTime: 1
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &811731208389968518 --- !u!1101 &811731208389968518
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
@ -2374,34 +2290,6 @@ AnimatorStateTransition:
m_InterruptionSource: 2 m_InterruptionSource: 2
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1102 &1211289149971408261
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Attack3b
m_Speed: 2.5
m_CycleOffset: 0
m_Transitions:
- {fileID: 712130927223328335}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -5059006814000262888, guid: e0919932c9c179142ad06cf4ee11f204,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &1858289013235272262 --- !u!1101 &1858289013235272262
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
@ -2424,34 +2312,6 @@ AnimatorStateTransition:
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1102 &1991670155751961014
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: attack3c
m_Speed: 2.5
m_CycleOffset: 0
m_Transitions:
- {fileID: 2964847495087587129}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -6788666626592393668, guid: e3d070983d568754782121f6efd86a6d,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &2894507576667459654 --- !u!1101 &2894507576667459654
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
@ -2474,28 +2334,6 @@ AnimatorStateTransition:
m_InterruptionSource: 0 m_InterruptionSource: 0
m_OrderedInterruption: 1 m_OrderedInterruption: 1
m_CanTransitionToSelf: 1 m_CanTransitionToSelf: 1
--- !u!1101 &2964847495087587129
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -4796975231335754110}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.85
m_HasExitTime: 1
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &3043085607005748951 --- !u!1102 &3043085607005748951
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -2507,7 +2345,7 @@ AnimatorState:
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
- {fileID: -4218806072011345864} - {fileID: 7720926868987146892}
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0} m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0 m_IKOnFeet: 0
@ -2552,7 +2390,35 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &6736461488995620371 --- !u!1102 &5184296106726420485
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Attack3b
m_Speed: 1.4
m_CycleOffset: 0
m_Transitions:
- {fileID: -1075653808135005254}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -5059006814000262888, guid: e0919932c9c179142ad06cf4ee11f204,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &5339900261231598212
AnimatorStateTransition: AnimatorStateTransition:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -2561,7 +2427,7 @@ AnimatorStateTransition:
m_Name: m_Name:
m_Conditions: [] m_Conditions: []
m_DstStateMachine: {fileID: 0} m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1211289149971408261} m_DstState: {fileID: 5184296106726420485}
m_Solo: 0 m_Solo: 0
m_Mute: 0 m_Mute: 0
m_IsExit: 0 m_IsExit: 0
@ -2678,6 +2544,28 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &7720926868987146892
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8771712776054593383}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.85
m_HasExitTime: 1
m_HasFixedDuration: 0
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &7931434825596784953 --- !u!1102 &7931434825596784953
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -2731,28 +2619,34 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &8777332740921490109 --- !u!1102 &8771712776054593383
AnimatorStateTransition: AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: m_Name: attack3
m_Conditions: [] m_Speed: 1.4
m_DstStateMachine: {fileID: 0} m_CycleOffset: 0
m_DstState: {fileID: 110222392} m_Transitions:
m_Solo: 0 - {fileID: 5339900261231598212}
m_Mute: 0 m_StateMachineBehaviours: []
m_IsExit: 0 m_Position: {x: 50, y: 50, z: 0}
serializedVersion: 3 m_IKOnFeet: 0
m_TransitionDuration: 0.25 m_WriteDefaultValues: 1
m_TransitionOffset: 0 m_Mirror: 0
m_ExitTime: 0.8 m_SpeedParameterActive: 0
m_HasExitTime: 1 m_MirrorParameterActive: 0
m_HasFixedDuration: 1 m_CycleOffsetParameterActive: 0
m_InterruptionSource: 0 m_TimeParameterActive: 0
m_OrderedInterruption: 1 m_Motion: {fileID: 6234510843852800090, guid: e3d070983d568754782121f6efd86a6d,
m_CanTransitionToSelf: 1 type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &8958909966057575806 --- !u!1102 &8958909966057575806
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6

View File

@ -1,7 +1,14 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 25314145480ad74499a550c1b1ffe70e guid: 25314145480ad74499a550c1b1ffe70e
AssetOrigin:
serializedVersion: 1
productId: 182928
packageName: Platform Animation
packageVersion: 2.5
assetPath: Assets/Shinabro/Platform_Animation/Animation/99_Sub/Stander@Sub_HeroLanding.FBX
uploadId: 568326
ModelImporter: ModelImporter:
serializedVersion: 25 serializedVersion: 24300
internalIDToNameTable: internalIDToNameTable:
- first: - first:
1: 100000 1: 100000
@ -335,18 +342,18 @@ ModelImporter:
second: //RootNode second: //RootNode
externalObjects: {} externalObjects: {}
materials: materials:
importMaterials: 1 materialImportMode: 1
materialName: 0 materialName: 0
materialSearch: 1 materialSearch: 1
materialLocation: 1 materialLocation: 1
searchTexturesGlobally: 1
animations: animations:
legacyGenerateAnimations: 4 legacyGenerateAnimations: 4
bakeSimulation: 0 bakeSimulation: 0
resampleCurves: 1 resampleCurves: 1
optimizeGameObjects: 0 optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName: motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors: animationImportErrors:
animationImportWarnings: animationImportWarnings:
animationRetargetingWarnings: animationRetargetingWarnings:
@ -390,6 +397,64 @@ ModelImporter:
maskType: 3 maskType: 3
maskSource: {instanceID: 0} maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0 additiveReferencePoseFrame: 0
- serializedVersion: 16
name: GhostLand_S_10302
takeName: Take 001
internalID: 1827226128182048838
firstFrame: 0
lastFrame: 36
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 1
loopBlendPositionY: 1
loopBlendPositionXZ: 1
keepOriginalOrientation: 1
keepOriginalPositionY: 1
keepOriginalPositionXZ: 1
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: GhostLand_S_10202
takeName: Take 001
internalID: -998496362607748373
firstFrame: 0
lastFrame: 36
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 1
loopBlendPositionY: 1
loopBlendPositionXZ: 1
keepOriginalOrientation: 1
keepOriginalPositionY: 1
keepOriginalPositionXZ: 1
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 1 isReadable: 1
meshes: meshes:
lODScreenPercentages: [] lODScreenPercentages: []
@ -397,26 +462,39 @@ ModelImporter:
meshCompression: 0 meshCompression: 0
addColliders: 0 addColliders: 0
useSRGBMaterialColor: 1 useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1 importVisibility: 1
importBlendShapes: 1 importBlendShapes: 1
importCameras: 1 importCameras: 1
importLights: 1 importLights: 1
nodeNameCollisionStrategy: 0
fileIdsGeneration: 1
swapUVChannels: 0 swapUVChannels: 0
generateSecondaryUV: 0 generateSecondaryUV: 0
useFileUnits: 1 useFileUnits: 1
keepQuads: 0 keepQuads: 0
weldVertices: 1 weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0 preserveHierarchy: 0
skinWeightsMode: 0 skinWeightsMode: 0
maxBonesPerVertex: 4 maxBonesPerVertex: 4
minBoneWeight: 0.001 minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1 meshOptimizationFlags: -1
indexFormat: 0 indexFormat: 0
secondaryUVAngleDistortion: 8 secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001 secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88 secondaryUVHardAngle: 88
secondaryUVMarginMethod: 0
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4 secondaryUVPackMargin: 4
useFileScale: 1 useFileScale: 1
strictVertexDataChecks: 0
tangentSpace: tangentSpace:
normalSmoothAngle: 60 normalSmoothAngle: 60
normalImportMode: 0 normalImportMode: 0
@ -427,7 +505,6 @@ ModelImporter:
normalSmoothingSource: 0 normalSmoothingSource: 0
referencedClips: [] referencedClips: []
importAnimation: 1 importAnimation: 1
copyAvatar: 1
humanDescription: humanDescription:
serializedVersion: 3 serializedVersion: 3
human: human:
@ -1137,16 +1214,14 @@ ModelImporter:
skeletonHasParents: 1 skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: 61366630e3c077b4b991d36e541d2c9d, lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: 61366630e3c077b4b991d36e541d2c9d,
type: 3} type: 3}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3 animationType: 3
humanoidOversampling: 1 humanoidOversampling: 1
avatarSetup: 2
addHumanoidExtraRootOnlyWhenUsingAvatar: 0
importBlendShapeDeformPercent: 0
remapMaterialsIfMaterialImportModeIsNone: 1
additionalBone: 0 additionalBone: 0
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 182928
packageName: Platform Animation
packageVersion: 2.5
assetPath: Assets/Shinabro/Platform_Animation/Animation/99_Sub/Stander@Sub_HeroLanding.FBX
uploadId: 568326

View File

@ -645,6 +645,16 @@ MonoBehaviour:
stringParameter: Projectile_{CID} stringParameter: Projectile_{CID}
intParameter: 0 intParameter: 0
floatParameter: 0 floatParameter: 0
- stateName: ghost_land
sourceFbxPath: Assets/Shinabro/Platform_Animation/Animation/99_Sub/Stander@Sub_HeroLanding.FBX
subClipName: GhostLand_S_{CID}
sourceClipName:
incomingExitTime: 0
createIfMissing: 0
firstFrame: 0
lastFrame: 36
speed: 1
events: []
- classId: 10201 - classId: 10201
note: "\uB2E8\uAC80 \xB7 BladeDancer \u2192 Ninja Warrior pack (3\uD0C0 \uBE60\uB978 note: "\uB2E8\uAC80 \xB7 BladeDancer \u2192 Ninja Warrior pack (3\uD0C0 \uBE60\uB978
\uBC1C\uB3D9\xB7\uC18D\uB3C4 1.3 #834)" \uBC1C\uB3D9\xB7\uC18D\uB3C4 1.3 #834)"
@ -989,9 +999,9 @@ MonoBehaviour:
sourceClipName: sourceClipName:
incomingExitTime: 0.85 incomingExitTime: 0.85
createIfMissing: 1 createIfMissing: 1
firstFrame: 16 firstFrame: 28
lastFrame: 46 lastFrame: 32
speed: 1 speed: 0.25
maskPath: maskPath:
bakeRootY: -1 bakeRootY: -1
mirror: 1 mirror: 1
@ -1006,7 +1016,7 @@ MonoBehaviour:
- functionName: Projectile - functionName: Projectile
time: 0 time: 0
useNormalized: 1 useNormalized: 1
normalizedTime: 0.35 normalizedTime: 0.15
stringParameter: Projectile_{CID} stringParameter: Projectile_{CID}
intParameter: 0 intParameter: 0
floatParameter: 0 floatParameter: 0
@ -1105,6 +1115,30 @@ MonoBehaviour:
stringParameter: Projectile_{CID} stringParameter: Projectile_{CID}
intParameter: 0 intParameter: 0
floatParameter: 0 floatParameter: 0
- stateName: attack3
sourceFbxPath: Assets/ExplosiveLLC/Mage Warrior Mecanim Animation Pack/Animations/Mage@Jump-Attack1.FBX
subClipName: OrbSlam3_S_{CID}
sourceClipName:
incomingExitTime: 0.85
createIfMissing: 1
firstFrame: 0
lastFrame: 24
speed: 1
events:
- functionName: LookAtTarget
time: 0
useNormalized: 1
normalizedTime: 0
stringParameter:
intParameter: 0
floatParameter: 0
- functionName: Projectile
time: 0
useNormalized: 1
normalizedTime: 0.66
stringParameter: Projectile_{CID}
intParameter: 0
floatParameter: 0
- classId: 10303 - classId: 10303
note: "\uC9C0\uD321\uC774 \xB7 Summoner \u2192 Mage Warrior pack Attack2_S (#838 note: "\uC9C0\uD321\uC774 \xB7 Summoner \u2192 Mage Warrior pack Attack2_S (#838
\uB300\uAE30 Event_Idle \uBCF5\uC6D0) · #944 PD 「마법책은 오브 모션과 같도록」 → 2타 attack2 = 10301 과 같은 Mage@Attack3_S 서브클립(Cast2_S · Projectile 0.407 · 들어오는 exit 0.854) — 상태는 컨트롤러에 직접 만들고 전이를 pcanim_mage 에서 복제(scripts/wl/probes/944_book_ctl.cs · attack→attack2 0.854/0.15 s · attack2→idle 0.837/0.25 s · 기존 attack→Atk_A1_wing 전이 제거 · Atk_A1_wing 상태는 남김) · PD 「마법책 시전 모션은 RPG Character Mecanim Animation Pack FREE 의 해당 모션처럼」 → Unarmed-Attack-R2(30 fps · 0~24 frame · 원본 Hit 0.393 = 9.43 frame)를 둘로 나눔: casting = 0~6 frame(웅크려 모으기 · 이벤트 없음 · 시전 시간 동안 끝 포즈 유지) · casting_end = 6~24 frame(내지르며 발사 · SkillEvent 0.191 = (9.43-6)/18) · 고른 근거 = 편집 모드 포즈 렌더(944_book_pose.cs · 한 팔 앞 · 다른 팔 접음 · 런지 = 데모 캐릭터 손 앞 1.42 m · 발 벌림 1.55 m 최대)" \uB300\uAE30 Event_Idle \uBCF5\uC6D0) · #944 PD 「마법책은 오브 모션과 같도록」 → 2타 attack2 = 10301 과 같은 Mage@Attack3_S 서브클립(Cast2_S · Projectile 0.407 · 들어오는 exit 0.854) — 상태는 컨트롤러에 직접 만들고 전이를 pcanim_mage 에서 복제(scripts/wl/probes/944_book_ctl.cs · attack→attack2 0.854/0.15 s · attack2→idle 0.837/0.25 s · 기존 attack→Atk_A1_wing 전이 제거 · Atk_A1_wing 상태는 남김) · PD 「마법책 시전 모션은 RPG Character Mecanim Animation Pack FREE 의 해당 모션처럼」 → Unarmed-Attack-R2(30 fps · 0~24 frame · 원본 Hit 0.393 = 9.43 frame)를 둘로 나눔: casting = 0~6 frame(웅크려 모으기 · 이벤트 없음 · 시전 시간 동안 끝 포즈 유지) · casting_end = 6~24 frame(내지르며 발사 · SkillEvent 0.191 = (9.43-6)/18) · 고른 근거 = 편집 모드 포즈 렌더(944_book_pose.cs · 한 팔 앞 · 다른 팔 접음 · 런지 = 데모 캐릭터 손 앞 1.42 m · 발 벌림 1.55 m 최대)"
@ -1214,7 +1248,7 @@ MonoBehaviour:
createIfMissing: 1 createIfMissing: 1
firstFrame: 34 firstFrame: 34
lastFrame: 64 lastFrame: 64
speed: 2.5 speed: 1.4
events: events:
- functionName: LookAtTarget - functionName: LookAtTarget
time: 0 time: 0
@ -1238,55 +1272,7 @@ MonoBehaviour:
createIfMissing: 1 createIfMissing: 1
firstFrame: 48 firstFrame: 48
lastFrame: 83 lastFrame: 83
speed: 2.5 speed: 1.4
events:
- functionName: LookAtTarget
time: 0
useNormalized: 1
normalizedTime: 0
stringParameter:
intParameter: 0
floatParameter: 0
- functionName: Projectile
time: 0
useNormalized: 1
normalizedTime: 0.407
stringParameter: Projectile_{CID}
intParameter: 0
floatParameter: 0
- stateName: attack3c
sourceFbxPath: Assets/ExplosiveLLC/Mage Warrior Mecanim Animation Pack/Animations/Mage@Attack2_S.FBX
subClipName: Cast3c_S_{CID}
sourceClipName:
incomingExitTime: 0.85
createIfMissing: 1
firstFrame: 34
lastFrame: 64
speed: 2.5
events:
- functionName: LookAtTarget
time: 0
useNormalized: 1
normalizedTime: 0
stringParameter:
intParameter: 0
floatParameter: 0
- functionName: Projectile
time: 0
useNormalized: 1
normalizedTime: 0.23
stringParameter: Projectile_{CID}
intParameter: 0
floatParameter: 0
- stateName: Attack3d
sourceFbxPath: Assets/ExplosiveLLC/Mage Warrior Mecanim Animation Pack/Animations/Mage@Attack3_S.FBX
subClipName: Cast3d_S_{CID}
sourceClipName:
incomingExitTime: 0.85
createIfMissing: 1
firstFrame: 48
lastFrame: 83
speed: 2.5
events: events:
- functionName: LookAtTarget - functionName: LookAtTarget
time: 0 time: 0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b94b98d2bc366904d867df4d46e18025
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -102,6 +102,25 @@
], ],
"skillHitMinInterval": 0.12, "skillHitMinInterval": 0.12,
"swingFx": [ "swingFx": [
{
"classIds": [ 10202 ],
"stages": [ 3 ],
"prefab": "WL_Impact_DaggerSlash3",
"scale": 1.0,
"euler": [ 0, 0, 0 ],
"yOffset": 0.0,
"calibrated": false,
"follow": true,
"forward": 0.0,
"side": 0.0,
"life": 0.8,
"minInterval": 0.3,
"alignWeapon": true,
"alignFraction": 0.5,
"fixedDir": false,
"lockFacing": false,
"_note_951": "#951 PD 「비수 3타 이펙트가 공격한 검 위치를 기준으로 호 형태로 펼쳐지도록」 — 원본 Effect_Slash_10202_3 의 WL 사본을 매 프레임 무기(손잡이 → 날 끝) 방향·위치에 맞춰 따라가게(창 2타 alignWeapon 과 같은 방식) · 수치는 Play 실측 뒤 조정"
},
{ {
"classIds": [ "classIds": [
10501, 10501,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0ed9e3bd6836a6543b78d77bec37603e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -37,6 +37,22 @@
"hitTurnMax": 150, "hitTurnMax": 150,
"hitMinInterval": 0.08, "hitMinInterval": 0.08,
"castSeconds": 2.0, "castSeconds": 2.0,
"jumpGhosts": 4,
"jumpHeight": 1.0,
"jumpForward": 0.4,
"jumpSeconds": 0.25,
"landState": "ghost_land",
"landHeight": 1.2,
"landFallSeconds": 0.25,
"slideDistance": 0.5,
"slideSeconds": 0.3,
"landTotalSeconds": 1.0,
"landAtSeconds": 3.4,
"airClip": "Skill8_Air",
"landGhosts": 2,
"dustPrefab": "WL/Fx/WL_Fx_LandDust",
"dustScale": 0.5,
"_note_951": "#951 PD 「각성 시전 시 뛰어오르는 잔상 → 사라진 채 공격 → 잔상과 함께 등장 · 낮은 공중에서 떨어져 착지 포즈 · 0.5 m 미끄러지다 정지 · 흙먼지」 — 시전 순간 위·앞으로 잔상 jumpGhosts 개(jumpSeconds 동안) · PC 가 다시 보이는 순간(또는 landAtSeconds) 모델을 landHeight 에서 landFallSeconds 에 내리며 잔상 landGhosts · 착지 클립 landState(어새신 컨트롤러 ghost_land = Platform Sub_HeroLanding 0~36) · slideSeconds 동안 NavMeshAgent.Move 로 slideDistance 앞으로 · 착지 때 dustPrefab(Hyper Casual Dust_Dash 사본) · landTotalSeconds 뒤 idle",
"poseSource": "clips", "poseSource": "clips",
"poses": [ "poses": [
"DualBlades_Attack2@0.35", "DualBlades_Attack2@0.35",

View File

@ -14,6 +14,7 @@
1001,월광,Sword,10102,pcanim_spellblade,2,STR,1.0,3,Attack3,Projectile,1,1.5,4,0,0,16,2,0.31,Projectile_10102,Effect_Slash_10102_3,Effect_Hit_10102,703106|703105,M:weapon_id;class_id;anim_controller;anim_state;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids 1001,월광,Sword,10102,pcanim_spellblade,2,STR,1.0,3,Attack3,Projectile,1,1.5,4,0,0,16,2,0.31,Projectile_10102,Effect_Slash_10102_3,Effect_Hit_10102,703106|703105,M:weapon_id;class_id;anim_controller;anim_state;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
1057,맹약,Staff,10301,pcanim_mage,2,INT,1.0,1,attack,Projectile,1,1.0,5,0,0,14,0,0,Projectile_10301,,Effect_Hit_10301,703303|703301,M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids 1057,맹약,Staff,10301,pcanim_mage,2,INT,1.0,1,attack,Projectile,1,1.0,5,0,0,14,0,0,Projectile_10301,,Effect_Hit_10301,703303|703301,M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids
1057,맹약,Staff,10301,pcanim_mage,2,INT,1.0,2,attack2,Projectile,1,1.4,5,0,0,14,2,0,Projectile_10301,,Effect_Hit_10301,703303|703301,M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids 1057,맹약,Staff,10301,pcanim_mage,2,INT,1.0,2,attack2,Projectile,1,1.4,5,0,0,14,2,0,Projectile_10301,,Effect_Hit_10301,703303|703301,M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids
1057,맹약,Staff,10301,pcanim_mage,2,INT,1.0,3,attack3,Projectile,1,1.4,5,0,0,14,2,0,Projectile_10301,,Effect_Hit_10301,703303|703301,M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids;#951 PD 오브 3타 = Mage Jump-Attack1 점프 내리치기(step 2 값 복사 · 피해 1.4 = 원장)
9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,1,attack,MeleeArc,1,1.1,1.5,160,0,0,0,0.3,Projectile_10502,Effect_Slash_10502_1,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids 9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,1,attack,MeleeArc,1,1.1,1.5,160,0,0,0,0.3,Projectile_10502,Effect_Slash_10502_1,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,2,Sword&Shield_Attack2,MeleeArc,1,1.2,1.5,160,0,0,0,0.15,Projectile_10502,Effect_Slash_10502_2,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids 9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,2,Sword&Shield_Attack2,MeleeArc,1,1.2,1.5,160,0,0,0,0.15,Projectile_10502,Effect_Slash_10502_2,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,3,Sword&Shield_Attack3,Area,1,2.0,1.5,0,2.2,0,0,0.31,Projectile_10502,Effect_Slash_10502_3,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids 9001,수호자의 철퇴,Hammer,10502,pcanim_paladin,2,STR,1.0,3,Sword&Shield_Attack3,Area,1,2.0,1.5,0,2.2,0,0,0.31,Projectile_10502,Effect_Slash_10502_3,Effect_Hit_10502,703505|703506,M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids

1 weapon_id weapon_name family class_id anim_controller unlock_phase main_stat attack_speed_mult step anim_state hit_type hits dmg_ratio_per_hit range_m arc_deg aoe_radius_m proj_speed pierce move_m hitbox_prefab slash_vfx hit_vfx ref_skill_ids src
14 1001 월광 Sword 10102 pcanim_spellblade 2 STR 1.0 3 Attack3 Projectile 1 1.5 4 0 0 16 2 0.31 Projectile_10102 Effect_Slash_10102_3 Effect_Hit_10102 703106|703105 M:weapon_id;class_id;anim_controller;anim_state;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
15 1057 맹약 Staff 10301 pcanim_mage 2 INT 1.0 1 attack Projectile 1 1.0 5 0 0 14 0 0 Projectile_10301 Effect_Hit_10301 703303|703301 M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids
16 1057 맹약 Staff 10301 pcanim_mage 2 INT 1.0 2 attack2 Projectile 1 1.4 5 0 0 14 2 0 Projectile_10301 Effect_Hit_10301 703303|703301 M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids
17 1057 맹약 Staff 10301 pcanim_mage 2 INT 1.0 3 attack3 Projectile 1 1.4 5 0 0 14 2 0 Projectile_10301 Effect_Hit_10301 703303|703301 M:weapon_id;class_id;anim_controller;anim_state;range_m;hitbox_prefab;hit_vfx;ref_skill_ids;#951 PD 오브 3타 = Mage Jump-Attack1 점프 내리치기(step 2 값 복사 · 피해 1.4 = 원장)
18 9001 수호자의 철퇴 Hammer 10502 pcanim_paladin 2 STR 1.0 1 attack MeleeArc 1 1.1 1.5 160 0 0 0 0.3 Projectile_10502 Effect_Slash_10502_1 Effect_Hit_10502 703505|703506 M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
19 9001 수호자의 철퇴 Hammer 10502 pcanim_paladin 2 STR 1.0 2 Sword&Shield_Attack2 MeleeArc 1 1.2 1.5 160 0 0 0 0.15 Projectile_10502 Effect_Slash_10502_2 Effect_Hit_10502 703505|703506 M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids
20 9001 수호자의 철퇴 Hammer 10502 pcanim_paladin 2 STR 1.0 3 Sword&Shield_Attack3 Area 1 2.0 1.5 0 2.2 0 0 0.31 Projectile_10502 Effect_Slash_10502_3 Effect_Hit_10502 703505|703506 M:class_id;anim_controller;anim_state;range_m;move_m;hitbox_prefab;slash_vfx;hit_vfx;ref_skill_ids

View File

@ -40,6 +40,15 @@ namespace WL.Combat.Weapon
public float hitTurnMax = 150f; // hit: 최대(°) public float hitTurnMax = 150f; // hit: 최대(°)
public float hitMinInterval = 0.08f; // hit: 같은 적 최소 간격(초) public float hitMinInterval = 0.08f; // hit: 같은 적 최소 간격(초)
public float castSeconds = 2f; // 시전 기록 유지(초) — 이 안의 타격만 hit 고스트 · fx 예약도 이 안에서만 public float castSeconds = 2f; // 시전 기록 유지(초) — 이 안의 타격만 hit 고스트 · fx 예약도 이 안에서만
// #951 PD 「시전 시 뛰어오르는 잔상 → 사라진 채 공격 → 잔상과 함께 등장 · 낮은 공중에서 떨어져 착지 포즈 · 0.5 m 미끄러지다 정지 · 흙먼지」
public int jumpGhosts = 0; // 시전 순간 위·앞으로 남기는 잔상 수(0 = 없음)
public float jumpHeight = 1f, jumpForward = 0.4f, jumpSeconds = 0.25f;
public string landState = ""; // 착지 애니메이터 상태 이름(비우면 착지 연출 없음)
public float landHeight = 1.2f, landFallSeconds = 0.25f, slideDistance = 0.5f, slideSeconds = 0.3f, landTotalSeconds = 1f;
public float landAtSeconds = 0f; // 공중 클립 종료를 못 잡았을 때 이 시각(시전 뒤 초)에 착지 시작(0 = 클립 감지만)
public string airClip = ""; // 원본 스킬의 공중 클립 이름 조각(예 Skill8_Air) — 이 클립이 보였다가 다른 클립으로 바뀌는 순간 = 공격 끝 → 착지 시작
public int landGhosts = 2; // 떨어지는 동안 잔상 수
public string dustPrefab = ""; public float dustScale = 1f;
public string poseSource = "clips"; // clips = 숨은 꼭두각시에 poses 를 걸어 굽기 · live = 시전 순간 PC 자세 1 개 public string poseSource = "clips"; // clips = 숨은 꼭두각시에 poses 를 걸어 굽기 · live = 시전 순간 PC 자세 1 개
public string[] poses = new string[0]; // "애니메이터 상태 이름@정규화 시각" — 차례로 돌려 쓴다(시작은 무작위) public string[] poses = new string[0]; // "애니메이터 상태 이름@정규화 시각" — 차례로 돌려 쓴다(시작은 무작위)
} }
@ -83,6 +92,9 @@ namespace WL.Combat.Weapon
public WLGhostStrikeRule rule; public ProjectileBase skill; public Actor shooter; public WLGhostStrikeRule rule; public ProjectileBase skill; public Actor shooter;
public float t0, groundY; public List<FxPoint> fx; public int next, poseCursor; public float t0, groundY; public List<FxPoint> fx; public int next, poseCursor;
public Vector3 lastPos; public bool hasLast, posesReady; public string sig = ""; public Vector3 lastPos; public bool hasLast, posesReady; public string sig = "";
// #951 도약 잔상 · 착지
public int jumpDone; public float jumpNext = -1f; public bool wasHidden, sawAir, landing, landed, dustDone; public float landT0, modelBaseY, modelY = float.NaN; public int landGhostsDone;
public Vector3 landPos, landFwd; public Transform model; public UnityEngine.AI.NavMeshAgent agent; public object stopWas;
public readonly List<SkinnedMeshRenderer> smrs = new List<SkinnedMeshRenderer>(); public readonly List<SkinnedMeshRenderer> smrs = new List<SkinnedMeshRenderer>();
public readonly List<MeshFilter> weapons = new List<MeshFilter>(); public readonly List<MeshFilter> weapons = new List<MeshFilter>();
public readonly List<string> smrPaths = new List<string>(); public readonly List<string> smrPaths = new List<string>();
@ -135,7 +147,7 @@ namespace WL.Combat.Weapon
{ {
s_cfg = null; s_cast = null; s_hitQ.Clear(); s_bearing.Clear(); s_lastHitAt.Clear(); s_fxCache.Clear(); s_cfg = null; s_cast = null; s_hitQ.Clear(); s_bearing.Clear(); s_lastHitAt.Clear(); s_fxCache.Clear();
s_poses.Clear(); s_poseSig = ""; s_pool.Clear(); s_mat = null; s_depthMat = null; s_matsPre = s_matsOne = null; s_matTried = false; s_runner = null; s_poses.Clear(); s_poseSig = ""; s_pool.Clear(); s_mat = null; s_depthMat = null; s_matsPre = s_matsOne = null; s_matTried = false; s_runner = null;
Casts = FxSpawned = HitSpawned = SkippedCap = PuppetBuilt = PuppetFailed = PosesBaked = LiveBaked = Errors = 0; LastBakeMs = 0f; LastLog = ""; Casts = FxSpawned = HitSpawned = SkippedCap = PuppetBuilt = PuppetFailed = PosesBaked = LiveBaked = Errors = 0; LastBakeMs = 0f; LastLog = ""; JumpSpawned = Landings = 0; LandLog = "";
CombatEvents.HitConfirmed.Remove(OnHit); CombatEvents.HitConfirmed.Remove(OnHit);
if (Cfg.enabled == 0) return; if (Cfg.enabled == 0) return;
foreach (var r in s_rules.Values) if (r.anchor != "fx") { CombatEvents.HitConfirmed.Add(OnHit); break; } foreach (var r in s_rules.Values) if (r.anchor != "fx") { CombatEvents.HitConfirmed.Add(OnHit); break; }
@ -161,7 +173,7 @@ namespace WL.Combat.Weapon
var pd = skill.Get_ProjectTileData(); var pd = skill.Get_ProjectTileData();
var shooter = pd != null ? pd.shooter : null; var shooter = pd != null ? pd.shooter : null;
if (DSUtil.CheckNull(shooter)) return; if (DSUtil.CheckNull(shooter)) return;
var cast = new Cast { rule = r, skill = skill, shooter = shooter, t0 = Time.time, groundY = shooter.Get_position().y, poseCursor = Random.Range(0, 1024) }; var cast = new Cast { rule = r, skill = skill, shooter = shooter, t0 = Time.time, groundY = shooter.Get_position().y, poseCursor = Random.Range(0, 1024), jumpNext = Time.time };
if (r.anchor != "hit") cast.fx = FxPoints(skill, r); if (r.anchor != "hit") cast.fx = FxPoints(skill, r);
Capture(cast, c); Capture(cast, c);
s_cast = cast; s_cast = cast;
@ -204,6 +216,22 @@ namespace WL.Combat.Weapon
if (cast != null) if (cast != null)
{ {
if (!cast.posesReady) { cast.posesReady = true; PreparePoses(cast, c); } if (!cast.posesReady) { cast.posesReady = true; PreparePoses(cast, c); }
// #951 ① 도약 잔상(시전 직후 jumpSeconds 동안 위·앞으로)
var rl = cast.rule;
if (rl.jumpGhosts > 0 && cast.jumpDone < rl.jumpGhosts && now >= cast.jumpNext && cast.jumpNext >= 0f)
{
float k = (cast.jumpDone + 1f) / rl.jumpGhosts; var sp = cast.shooter.Get_position(); var fw = cast.shooter.transform.forward; fw.y = 0f; if (fw.sqrMagnitude < 1e-4f) fw = Vector3.forward; fw.Normalize();
if (Spawn(c, cast, sp + Vector3.up * (rl.jumpHeight * k) + fw * (rl.jumpForward * k), fw)) JumpSpawned++;
cast.jumpDone++; cast.jumpNext = now + rl.jumpSeconds / rl.jumpGhosts;
}
// #951 ② 다시 보이는 순간(또는 landAtSeconds) → 착지 연출
if (!string.IsNullOrEmpty(rl.landState) && !cast.landing && !cast.landed)
{
string clip = CurrentClip(cast.shooter);
if (!string.IsNullOrEmpty(rl.airClip) && clip.Contains(rl.airClip)) cast.sawAir = true;
else if ((cast.sawAir && now - cast.t0 > 0.3f) || (rl.landAtSeconds > 0f && now - cast.t0 >= rl.landAtSeconds)) StartLanding(cast, now);
}
if (cast.landing) UpdateLanding(c, cast, now);
if (cast.fx != null) if (cast.fx != null)
while (cast.next < cast.fx.Count && now >= cast.t0 + cast.fx[cast.next].delay - cast.rule.fxLead) while (cast.next < cast.fx.Count && now >= cast.t0 + cast.fx[cast.next].delay - cast.rule.fxLead)
{ {
@ -214,7 +242,8 @@ namespace WL.Combat.Weapon
cast.lastPos = pos; cast.hasLast = true; cast.lastPos = pos; cast.hasLast = true;
} }
for (int i = 0; i < s_hitQ.Count; i++) HitSpawn(c, cast, s_hitQ[i]); for (int i = 0; i < s_hitQ.Count; i++) HitSpawn(c, cast, s_hitQ[i]);
if (now - cast.t0 > Mathf.Max(0.1f, cast.rule.castSeconds)) s_cast = null; bool landPending = !string.IsNullOrEmpty(cast.rule.landState) && !cast.landed && now - cast.t0 < Mathf.Max(0.1f, cast.rule.castSeconds) + 4f; // #951 착지가 끝날 때까지(상한 +4 s) 시전 기록 유지
if (now - cast.t0 > Mathf.Max(0.1f, cast.rule.castSeconds) && !cast.landing && !landPending) s_cast = null;
} }
s_hitQ.Clear(); s_hitQ.Clear();
@ -230,6 +259,92 @@ namespace WL.Combat.Weapon
catch (System.Exception ex) { Errors++; LastLog = "틱 실패 — " + ex.Message; } catch (System.Exception ex) { Errors++; LastLog = "틱 실패 — " + ex.Message; }
} }
// ───────────────────────────────────────── #951 도약 잔상 · 착지 연출
public static int JumpSpawned, Landings; public static string LandLog = "";
static System.Reflection.PropertyInfo s_isStop;
static string CurrentClip(Actor a)
{
var an = a != null ? a.m_animation : null; if (an == null) return "";
var ci = an.GetCurrentAnimatorClipInfo(0); return ci.Length > 0 && ci[0].clip != null ? ci[0].clip.name : "";
}
/// <summary>러너 LateUpdate — 애니메이터가 모델 위치를 쓴 뒤에 낙하 높이를 덮는다(Update 에서 쓰면 되돌아간다 · 실측).</summary>
internal static void LateTick()
{
var cast = s_cast; if (cast == null || !cast.landing || cast.model == null || float.IsNaN(cast.modelY)) return;
var lp = cast.model.localPosition; cast.model.localPosition = new Vector3(lp.x, cast.modelY, lp.z);
}
static bool IsHidden(Cast cast)
{
for (int i = 0; i < cast.smrs.Count; i++) { var r = cast.smrs[i]; if (r == null) continue; return !r.enabled || !r.gameObject.activeInHierarchy; }
return false;
}
static void SetStop(Actor a, object v)
{
try
{
if (s_isStop == null) s_isStop = typeof(Actor).GetProperty("IsStop", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
if (s_isStop != null && s_isStop.CanWrite && v != null) s_isStop.SetValue(a, v, null);
}
catch (System.Exception) { }
}
static void StartLanding(Cast cast, float now)
{
var pc = cast.shooter as PCActor; var r = cast.rule;
cast.landing = true; cast.landT0 = now; cast.landGhostsDone = 0; cast.dustDone = false;
cast.landPos = cast.shooter.Get_position(); cast.landFwd = cast.shooter.transform.forward; cast.landFwd.y = 0f; if (cast.landFwd.sqrMagnitude < 1e-4f) cast.landFwd = Vector3.forward; cast.landFwd.Normalize();
cast.model = cast.shooter.m_animation != null ? cast.shooter.m_animation.transform : null; cast.modelBaseY = cast.model != null ? cast.model.localPosition.y : 0f;
cast.agent = cast.shooter.GetComponent<UnityEngine.AI.NavMeshAgent>();
if (pc != null) { try { if (s_isStop == null) s_isStop = typeof(Actor).GetProperty("IsStop", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public); cast.stopWas = s_isStop != null ? s_isStop.GetValue(pc, null) : null; } catch (System.Exception) { } SetStop(pc, true); pc.WL_StopNavMove(); }
try { if (cast.shooter.m_animation != null) cast.shooter.m_animation.CrossFade(r.landState, 0.05f, 0, 0f); } catch (System.Exception ex) { LandLog = "착지 클립 실패 — " + ex.Message; }
if (cast.model != null) cast.model.localPosition = new Vector3(cast.model.localPosition.x, cast.modelBaseY + r.landHeight, cast.model.localPosition.z);
Landings++; LandLog = "착지 시작 t+" + (now - cast.t0).ToString("F2") + " @" + cast.landPos.ToString("F2") + (cast.agent != null ? " agent" : " agent 없음");
}
static void UpdateLanding(WLGhostStrikeJson c, Cast cast, float now)
{
var r = cast.rule; float t = now - cast.landT0; float fall = Mathf.Max(0.05f, r.landFallSeconds);
if (DSUtil.CheckNull(cast.shooter)) { cast.landing = false; cast.landed = true; return; }
if (t < fall)
{
float k = 1f - t / fall; float y = r.landHeight * k * k; // 가속 낙하(실제 적용은 LateTick)
cast.modelY = cast.modelBaseY + y;
if (cast.landGhostsDone < r.landGhosts && t >= fall * (cast.landGhostsDone + 1f) / (r.landGhosts + 1f)) { cast.landGhostsDone++; if (Spawn(c, cast, cast.landPos + Vector3.up * y, cast.landFwd)) JumpSpawned++; }
return;
}
cast.modelY = cast.modelBaseY;
if (!cast.dustDone)
{
cast.dustDone = true;
if (!string.IsNullOrEmpty(r.dustPrefab))
{
var p = Resources.Load<GameObject>(r.dustPrefab);
if (p != null) { var go = Object.Instantiate(p, cast.landPos, Quaternion.LookRotation(cast.landFwd, Vector3.up)); go.transform.localScale = p.transform.localScale * r.dustScale; foreach (var ps in go.GetComponentsInChildren<ParticleSystem>(true)) { var m = ps.main; m.scalingMode = ParticleSystemScalingMode.Hierarchy; ps.Play(true); } Object.Destroy(go, 3f); }
else LandLog = "먼지 프리팹 없음 " + r.dustPrefab;
}
}
float slideT = t - fall;
if (slideT < r.slideSeconds && r.slideDistance > 0f)
{
float step = r.slideDistance * Time.deltaTime / Mathf.Max(0.05f, r.slideSeconds);
if (cast.agent != null && cast.agent.enabled && cast.agent.isOnNavMesh) cast.agent.Move(cast.landFwd * step);
else cast.shooter.transform.position += cast.landFwd * step;
}
if (t >= r.landTotalSeconds)
{
cast.landing = false; cast.landed = true; cast.modelY = float.NaN;
if (cast.model != null) { var lp = cast.model.localPosition; cast.model.localPosition = new Vector3(lp.x, cast.modelBaseY, lp.z); }
var pc = cast.shooter as PCActor;
SetStop(cast.shooter, cast.stopWas);
try { if (pc != null) pc.Play_Idle(); } catch (System.Exception) { }
LandLog += " · 끝 " + t.ToString("F2") + " s · 이동 " + Vector3.Distance(cast.landPos, cast.shooter.Get_position()).ToString("F2") + " m";
}
}
static List<FxPoint> FxPoints(ProjectileBase skill, WLGhostStrikeRule r) static List<FxPoint> FxPoints(ProjectileBase skill, WLGhostStrikeRule r)
{ {
List<FxPoint> list; List<FxPoint> list;
@ -577,5 +692,5 @@ namespace WL.Combat.Weapon
} }
/// <summary>#943-⑦ 고스트 러너(숨김 GameObject 1 개) — 예약 · 요청 생성 · 페이드 · 꼭두각시 굽기는 여기(Update)에서만.</summary> /// <summary>#943-⑦ 고스트 러너(숨김 GameObject 1 개) — 예약 · 요청 생성 · 페이드 · 꼭두각시 굽기는 여기(Update)에서만.</summary>
public sealed class WLGhostStrikeRunner : MonoBehaviour { void Update() { WLGhostStrike.Tick(); } } public sealed class WLGhostStrikeRunner : MonoBehaviour { void Update() { WLGhostStrike.Tick(); } void LateUpdate() { WLGhostStrike.LateTick(); } }
} }