WL #964 PD 지시 6건 — ① 비수 콤보 1·2·1·3·4(매핑 attack_b 신설 · 2타 →0.8→ 1타 →0.587→ 3타 · 컨트롤러 재굽기 · 백업 비교 변경 1) ② 3·4타 = 1·2타와 같은 녹색 검기(swingFx keepTrail = 회전·순간이동·카메라 연출만 · 검기 호 유지 · 3·4타 궤적 보정 지금 클립으로 재베이크 · 4타 = 내려찍기 세로 호라 arcTilts 60°) ③ 3타 1.3→1.95 · 4타 1.2→1.8 · 4타 크기 = 타별 호 배율 arcSizeMulStages[3] 1.6(폭 3.06~3.61 m · 지금 4.97 m × 0.7 목표) · 4타 판정 앞 끝 1.89→1.32 ④ 4타 잔상 = 순간이동 뒤 0.3 s 매 프레임 지나온 길 0.25 m 간격(돌진 1.13 m/0.07 s) · 잔상 동시 상한 6→10(실측 4타당 6→7개) ⑤ 지팡이 메테오 반경 5→3 m · 대상 없으면 PC 대상 중심(실측 운석↔그때 중심 ≤ 2.85 m) ⑥ 창 찌르기 = 메시 긴 축 + 기울기 정렬 · 프리팹 줄기 기울기 보정 euler Z −26(실측 줄기↔창 26° → 2.1°)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
062d4b12ae
commit
095c5fca4c
|
|
@ -369,7 +369,7 @@ AnimatorState:
|
|||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: DualBlades_Attack3
|
||||
m_Speed: 1.3
|
||||
m_Speed: 1.95
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 2757370606414768772}
|
||||
|
|
@ -487,28 +487,6 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1101 &-1743382946548511829
|
||||
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: -2969973505622332435}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.15
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.8
|
||||
m_HasExitTime: 1
|
||||
m_HasFixedDuration: 1
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &-1674554289115283184
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
|
|
@ -517,7 +495,7 @@ AnimatorState:
|
|||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: DualBlades_DodgeAttack
|
||||
m_Speed: 1.2
|
||||
m_Speed: 1.8
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: -524724009125662056}
|
||||
|
|
@ -570,7 +548,7 @@ AnimatorState:
|
|||
m_Speed: 1.65
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: -1743382946548511829}
|
||||
- {fileID: -100336708565961319}
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
|
|
@ -685,6 +663,28 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1101 &-100336708565961319
|
||||
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: 1928427296861903119}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.15
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.8
|
||||
m_HasExitTime: 1
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -2457,6 +2457,9 @@ AnimatorStateMachine:
|
|||
- serializedVersion: 1
|
||||
m_State: {fileID: -1537197310772809155}
|
||||
m_Position: {x: -20, y: -170, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 1928427296861903119}
|
||||
m_Position: {x: 15, y: -105, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
|
|
@ -2689,6 +2692,34 @@ AnimatorStateTransition:
|
|||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &1928427296861903119
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: attack_b
|
||||
m_Speed: 1.5
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 5614524619657691524}
|
||||
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: 1827226128182048838, guid: 8ee71ee288ca0c44b987fd13c569fd30,
|
||||
type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &2149253845896622222
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
|
@ -2930,6 +2961,28 @@ AnimatorState:
|
|||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &5614524619657691524
|
||||
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: -2969973505622332435}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.15
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.587
|
||||
m_HasExitTime: 1
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &6021966566904734691
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
|
|
|
|||
|
|
@ -569,15 +569,46 @@ MonoBehaviour:
|
|||
stringParameter: Projectile_{CID}
|
||||
intParameter: 0
|
||||
floatParameter: 0
|
||||
- stateName: attack_b
|
||||
sourceFbxPath: Assets/ExplosiveLLC/Ninja Warrior Mecanim Animation Pack/Animations/Ninja@Attack1_S.FBX
|
||||
subClipName: Attack1_S_{CID}
|
||||
sourceClipName:
|
||||
incomingExitTime: 0.8
|
||||
createIfMissing: 1
|
||||
firstFrame: -1
|
||||
lastFrame: -1
|
||||
speed: 1.5
|
||||
events:
|
||||
- functionName: ShowEffect
|
||||
time: 0
|
||||
useNormalized: 1
|
||||
normalizedTime: 0.117000006
|
||||
stringParameter: Effect_Slash_{CID}_1
|
||||
intParameter: 1
|
||||
floatParameter: 0
|
||||
- functionName: Move
|
||||
time: 0
|
||||
useNormalized: 1
|
||||
normalizedTime: 0.177
|
||||
stringParameter:
|
||||
intParameter: 0
|
||||
floatParameter: 0.2
|
||||
- functionName: Projectile
|
||||
time: 0
|
||||
useNormalized: 1
|
||||
normalizedTime: 0.237
|
||||
stringParameter: Projectile_{CID}
|
||||
intParameter: 0
|
||||
floatParameter: 0
|
||||
- stateName: DualBlades_Attack3
|
||||
sourceFbxPath: Assets/Res_Addr/Animations/Animation/Paladin/skill_spinslash.FBX
|
||||
subClipName: Attack3_S_{CID}
|
||||
sourceClipName:
|
||||
incomingExitTime: 0.8
|
||||
incomingExitTime: 0.587
|
||||
createIfMissing: 0
|
||||
firstFrame: -1
|
||||
lastFrame: -1
|
||||
speed: 1.3
|
||||
speed: 1.95
|
||||
events:
|
||||
- functionName: LookAtTarget
|
||||
time: 0
|
||||
|
|
@ -615,7 +646,7 @@ MonoBehaviour:
|
|||
createIfMissing: 0
|
||||
firstFrame: -1
|
||||
lastFrame: 26
|
||||
speed: 1.2
|
||||
speed: 1.8
|
||||
events:
|
||||
- functionName: LookAtTarget
|
||||
time: 0
|
||||
|
|
|
|||
|
|
@ -133,6 +133,8 @@
|
|||
"spinSeconds": 0.333,
|
||||
"spinFx": false,
|
||||
"spinBlendOut": 0.12,
|
||||
"keepTrail": true,
|
||||
"_note_964": "#964 PD 「비수 공격 3타와 4타 이펙트를 1, 2타와 같은 검기로」 — keepTrail: 회전 이펙트(WL_Impact_DaggerRound)는 안 띄우고 1·2타와 같은 검기 호(Effect_WLSwingArc · 녹색)를 그대로 · 몸 1바퀴 회전(spin)은 유지 · 3타 궤적 보정(SlashTrailSettings Effect_Slash_10202_3)은 지금 클립(팔라딘 회전)으로 다시 구움 · prefab 칸은 기록용으로 남김",
|
||||
"_note_961": "#961 PD 「비수 3타 회전 이펙트는 Slash Effects FREE 에셋의 한 번만 회전하는 이펙트 — 점차 줄어드는 이펙트가 아닌 회전 후 즉시 소멸하는 이펙트로 교체」(참고 = 청록 초승달 1개 + 흰 점 + 빛 번짐) — 팩 6종 입자 구조 실측(961_fxinfo.cs): 초승달 1개 + 빛 점 30 + 빛 번짐 2 = Basic Slash Blue(감속 회전 700→245°/s · 0.4 s 동안 약 190° · 투명도 1→0.53→0 서서히) → 사본 WL_Impact_DaggerRound(hitbuild936 · 녹색 색조 fxtint954 (0.25,0.95,0.7) ×1.3) 을 961_spinfx.cs 로 초승달 수명 0.333 s · 회전 1081°/s 일정(위에서 보면 반시계 = 몸 −360°/0.333 s 와 같은 방향 같은 속도 · 정확히 1바퀴) · 투명도 0.9 까지 1 → 끝 0 · 크기 변화 끔 · 빛 점·번짐 수명 ×0.83 · 편집 모드 위 카메라 실측 0.02→0.31 s 한 바퀴 · 0.35 s 완전 소멸 · life 0.34 = 풀이 그 순간 끔 · 배율 0.75(사본 고리 반지름 약 2.1 m × 0.75 × 0.55 × 몸 크기 ≈ 1.0 m = 단검 리치) · 이전 WL_Impact_DaggerWhirl(원본 Skill_SpinSlash 사본 · 1초 동안 3바퀴/초로 계속 돌고 입자가 차례로 사라짐)은 파일만 남김",
|
||||
"_note_958": "#958 PD 「비수 3타 플레이어 회전 속도를 더 빠르게(이펙트와 일치하게)」 — 편집 모드 실측(958_spin.cs): 이펙트 자체 회전 = 칼날 층 slash_0 −1080°/s · slash (1) −1355 · slash (2) −1150 (루트 위 축 · 음수 = 위에서 보면 반시계) · 몸은 +360°/0.9 s = 400°/s 시계 방향이라 반대 방향 · 2.7배 느렸다 → −360°/0.333 s(= −1080°/s · 같은 방향 같은 속도) · 이펙트는 이미 스스로 돌므로 몸 각도로 한 번 더 돌리지 않음(spinFx false · 켜면 2160°/s 로 보임) · Play 프레임 실측(SpinTrace): 팔라딘 Around 클립 자체가 엉덩이를 시계 방향 약 300°/0.18 s 돌려 더하기 방식이면 상쇄 → 클립 yaw 를 덮어씀(WLSwingExtras · 끝 0.12 s 동안 클립 자세로 섞음)",
|
||||
"_note_956": "#956 PD 「3타 때 몸을 회전하지 않는 것 같다 → 몸을 회전 1회하며 공격 · 이펙트도 회전 모션에 맞게」 — Play 실측: m_animation.transform 은 PC 루트 자체(Animator 가 루트)라 #955 2차 「모델 자식 회전」도 루트 회전이었고 원본 LookAtTarget 이 매 프레임 되돌려 Attack3 클립당 61° 만 남음 → 코드 회전을 엉덩이 뼈(Root_M)에 누적 각으로 적용(루트·판정·카메라 그대로) + PC 에 붙은 이 이펙트를 같은 각으로(spinFx)",
|
||||
|
|
@ -161,6 +163,11 @@
|
|||
"blinkGhosts": 4,
|
||||
"camHoldSeconds": 0.7,
|
||||
"camZoomOut": 0.6,
|
||||
"keepTrail": true,
|
||||
"blinkTrailSeconds": 0.3,
|
||||
"blinkTrailInterval": 0.0,
|
||||
"blinkTrailMinStep": 0.25,
|
||||
"_note_964": "#964 PD ① 「4타 이펙트를 1, 2타와 같은 검기로」 — keepTrail: 초승달(WL_Impact_DaggerSpin)은 안 띄우고 검기 호(녹색) · 순간이동 0.5 m · 카메라 고정·줌아웃은 유지 · 4타 동작 = 머리 위 → 정면 바닥 내려찍기(칼끝 실측 f7~f12)라 호가 세로로 서서 위 카메라에서 안 보임 → SlashTrailSettings arcTilts(10202 · Effect_Slash_10202_4 · 카메라 쪽 기울기) · 크기 30 % 축소 = arcSizeMulStages[3](지금 4타 폭 4.97 m × 0.7 목표) · 범위 30 % 축소 = WLHitboxFit 4타 frontReach 1.89 → 1.32 ② 「4타 잔상이 플레이어를 따라가지 않음 → 빠르게 이동한 것처럼 따라 생성」 — 1차 Play 실측: 4타 돌진 = 공격 전진 표 Attack4_S_102(프레임 5~8 · 약 1.13 m 를 0.07 s)가 순간이동 뒤에 와서 잔상(순간이동 길 4개)이 뒤에 남음 → 순간이동 뒤 0.3 s 동안 매 프레임 지나온 길에 0.25 m 간격으로 잔상(blinkTrail · BlinkGhosts 보간)",
|
||||
"_note_963": "#963 PD 「비수 공격 4타의 이펙트 크기를 2배로」 — 0.7 → 1.4 · 방향 유지는 WLAttackFacing holdClips(Attack4_S_10202)",
|
||||
"_note_955": "#955 PD 4타 3건 — ① 이펙트가 궤적과 안 맞고 작음(원본 Effect_Slash_10202_4 가 발 위치에) → Shiny Slash 사본을 날(손잡이→날 끝) 방향·위치에 맞춰 작게(실제 0.45) ② 적을 뚫고 가도 카메라 회전 금지 · 살짝 줌아웃 뒤 복귀(camHold 0.7 s · 0.6 m sin) ③ 잔상 남기며 0.5 m 순간이동하듯 나타나 베기(blink 0.5 m · 잔상 4 = WLGhostStrike 살아 있는 자세)",
|
||||
"_note_954": "#954 PD 「비수 3타 이펙트가 기존과 다른 컨셉 → Slash Effects FREE 의 회전 이펙트(스크린샷)로」 — 사본 WL_Impact_DaggerSpin(= Shiny Slash · 편집 모드 대조표 954_fx_sheet: 큰 초승달 + 반짝이 · 위에서 보면 수평 고리(954_fx_orient) · 시작색 teal (0.38,0.84,0.83)) · PC 중심에 따라붙음(alignWeapon 끔 · 수평 고리라 euler 0) · 배율 0.95(실제 0.95×0.55×1.16 ≈ 0.6 · 고리 반지름 약 0.8 m 추정) · 이전 DaggerSlash3 규칙(euler Z 90 · massLocal 0.5)은 #952 기록",
|
||||
|
|
@ -325,7 +332,7 @@
|
|||
],
|
||||
"prefab": "WL_Impact_SpearBlast",
|
||||
"scale": 0.4,
|
||||
"euler": [ 0, -90, 0 ],
|
||||
"euler": [ 0, -90, -26 ],
|
||||
"yOffset": 0.0,
|
||||
"calibrated": false,
|
||||
"follow": true,
|
||||
|
|
@ -338,6 +345,9 @@
|
|||
"alignWeapon": true,
|
||||
"alignFraction": 0.0,
|
||||
"massLocal": [ 0, 0, 0 ],
|
||||
"alignAxis": true,
|
||||
"alignPitch": true,
|
||||
"_note_964": "#964 PD 「창 찌르기 이펙트가 여전히 창과 방향이나 각도가 맞지 않는 것 같아 → 실측해서 창 위치와 정확히 일치한 방향과 각도로」 — 이전 방향 = 소켓(손) → 무기 bounds 의 가장 먼 모서리를 수평으로 누른 것(창이 위아래로 기울면 각도가 어긋나고 모서리는 자루 중심선 밖) → alignAxis(메시 긴 축 = 자루 끝 → 창끝 중심선 · 손을 그 선에 내린 점에서 시작) + alignPitch(기울기 그대로) · 입자는 전부 로컬 좌표라 이펙트 변환을 그대로 따라간다(프리팹 실측) · 1차 Play 실측(964_probe Spear · 197 프레임): 이펙트 +X ↔ 창 축(메시 정점 주축) 0.1° 로 맞췄으나 불꽃 줄기(입자 주축)는 창보다 약 26° 위로 들림(수평 오차 1~2.5°) = 프리팹 줄기가 로컬 +X 에서 위로 기울어 있음 → euler Z −26(로컬 Z 둘레로 먼저 돌려 줄기를 +X 에 맞춘 뒤 Y −90) · 2차 Play 로 재실측",
|
||||
"_note_943": "#943-⑤ PD 「타격하려는 방향을 고정한 채 … 이펙트가 캐릭터 방향에 따라 마구 바뀌면 안 됨」 — alignWeapon(창 방향 추종) 끄고 fixedDir: 띄우는 순간의 표적 방향으로 이펙트 방향 고정 + 공격 상태 동안 PC 회전 잠금(lockFacing · 타격 상자 Projectile_10101 도 같은 방향) · 자리 = PC 중심 + 정면 0.6 + 오른쪽 0.3 + 위 −0.15 − R × massLocal × 배율",
|
||||
"fixedDir": false,
|
||||
"lockFacing": true,
|
||||
|
|
|
|||
|
|
@ -40,7 +40,12 @@ namespace WL.Combat.Impact
|
|||
// #958 회전은 클립 yaw 를 덮어쓴다(클립 자체 회전과 상쇄 방지) · spinBlendOut = 끝난 뒤 애니메이터 자세로 되돌아가는 시간(초)
|
||||
public float spinBlendOut = 0.12f;
|
||||
// #943-⑤ PD 「타격하려는 방향을 고정한 채 이펙트가 재생되는 동안 타격 판정 … 이펙트가 캐릭터 방향에 따라 마구 바뀌면 안 됨」 — fixedDir = 띄우는 순간 PC 정면(LookAtTarget 뒤 = 표적 방향)을 잡아 두고 life 동안 이펙트 방향 고정 + PC 회전도 그 방향으로 잠금(공격 상태인 동안) · 자리 = PC 중심 + 정면 alignForward + 오른쪽 alignSide + 위 yOffset − R × massLocal × 배율(PC 위치는 따라감)
|
||||
public bool fixedDir; public float alignForward = 0.5f; public float alignSide; public bool lockFacing = true; }
|
||||
public bool fixedDir; public float alignForward = 0.5f; public float alignSide; public bool lockFacing = true;
|
||||
// #964 PD 「비수 3·4타 이펙트를 1·2타와 같은 검기로」 — keepTrail = 이 규칙은 부가 연출(몸 회전 · 순간이동 · 카메라)만 하고 검기 호·리본(WeaponTrailDriver)은 막지 않는다(이펙트 프리팹 안 띄움)
|
||||
// #964 PD 「4타 잔상이 플레이어를 따라 생성되도록」 — blinkTrailSeconds 동안 blinkTrailInterval 초마다 PC 가 blinkTrailMinStep(m) 이상 움직였으면 지금 자세 잔상 1개(WLGhostStrike.LiveGhost)
|
||||
public bool keepTrail; public float blinkTrailSeconds; public float blinkTrailInterval = 0.04f; public float blinkTrailMinStep = 0.08f;
|
||||
// #964 PD 「창 찌르기 이펙트가 창과 방향·각도가 안 맞음 → 실측해서 정확히」 — alignAxis = 무기 메시 긴 축(자루 끝 → 창끝 중심선)을 방향으로(이전 = 소켓 → bounds 의 가장 먼 모서리) · alignPitch = 위아래 기울기도 따른다(이전 = 수평으로 누름)
|
||||
public bool alignAxis; public bool alignPitch; }
|
||||
/// <summary>지면 충격파. tipContact = 칼끝이 지면(contactHeight 이내)에 닿는 프레임·자리에서 재생(단계 안에서 minDrop 이상 올라갔다 내려올 때) · 못 잡으면 timeout 뒤 최저점(fallbackHeight 이내)에.</summary>
|
||||
/// <summary>#900 frontOnly = PC 정면 쪽 접점만 인정(해머 1타 내려치기 — 뒤로 휘두를 때 등 뒤 지면 접점을 건너뛴다 · 2026-10-17 실측 −0.8 m).</summary>
|
||||
public sealed class WLGroundFxRule { public int[] classIds; public int stage; public string prefab; public float scale = 1f; public float forward; public bool tipContact = true; public float contactHeight = 0.15f; public float minDrop = 0.35f; public float timeout = 1.5f; public float fallbackHeight = 0.5f; public bool frontOnly; }
|
||||
|
|
@ -292,6 +297,12 @@ namespace WL.Combat.Impact
|
|||
{
|
||||
var r = s.swingFx[i];
|
||||
if (r == null || !Contains(r.classIds, cls) || (r.stages != null && r.stages.Length > 0 && !Contains(r.stages, stage))) continue;
|
||||
if (r.keepTrail) // #964 검기 호는 그대로 두고(false → WeaponTrailDriver) 부가 연출만
|
||||
{
|
||||
if (r.blinkDistance > 0f || r.camHoldSeconds > 0f || r.spinDegrees != 0f) WLSwingExtras.Begin(pc, r, null);
|
||||
KeepTrails++; LastSwing = "keepTrail stage " + stage; LastLog = LastSwing;
|
||||
return false;
|
||||
}
|
||||
var tf = pc.transform;
|
||||
Quaternion rot; Vector3 pos; float scale; string how; bool cal_used = false;
|
||||
SwingCalibration cal = null;
|
||||
|
|
@ -346,7 +357,7 @@ namespace WL.Combat.Impact
|
|||
return false;
|
||||
}
|
||||
|
||||
public static int SwingTilted, SwingThrottled;
|
||||
public static int SwingTilted, SwingThrottled, KeepTrails;
|
||||
static readonly Dictionary<long, float> s_swingAt = new Dictionary<long, float>(); // #940 (PC, 단계) → 마지막으로 띄운 시각
|
||||
|
||||
/// <summary>#928 PD 「대검 1타 공격이 보는 방향에 따라서 너무 얇게 보여서 … 어느 방향에서 보더라도 검기처럼 보이게」 —
|
||||
|
|
@ -676,6 +687,11 @@ namespace WL.Combat.Impact
|
|||
int ghosts = r.blinkGhosts > 0 ? WL.Combat.Weapon.WLGhostStrike.BlinkGhosts(pc, from, to, r.blinkGhosts) : 0;
|
||||
try { pc.Set_Warp(to); } catch (System.Exception) { pc.transform.position = to; }
|
||||
Blinks++; LastLog = "blink " + Vector3.Distance(from, to).ToString("F2") + " m · 잔상 " + ghosts;
|
||||
if (r.blinkTrailSeconds > 0f) // #964 순간이동 뒤에도 PC 가 움직이는 동안 지나온 자리에 잔상을 이어 남긴다
|
||||
{
|
||||
ex._trailUntil = Time.time + r.blinkTrailSeconds; ex._trailInterval = Mathf.Max(0.01f, r.blinkTrailInterval); ex._trailStep = Mathf.Max(0f, r.blinkTrailMinStep);
|
||||
ex._trailNext = Time.time + ex._trailInterval; ex._trailLast = to;
|
||||
}
|
||||
}
|
||||
if (r.camHoldSeconds > 0f) { WLCamHold.Begin(pc, r.camHoldSeconds, r.camZoomOut); CamHolds++; }
|
||||
if (r.spinDegrees != 0f)
|
||||
|
|
@ -708,8 +724,23 @@ namespace WL.Combat.Impact
|
|||
return a.sqrMagnitude > 1e-6f && f.sqrMagnitude > 1e-6f ? Vector3.SignedAngle(f, a, root.up) : 0f;
|
||||
}
|
||||
public static float LastSpinErr; // 검증용 — 마지막 프레임의 (목표 yaw − 덮은 뒤 yaw)
|
||||
float _trailUntil, _trailNext, _trailInterval, _trailStep; Vector3 _trailLast; // #964 4타 따라오는 잔상
|
||||
public static int TrailGhosts;
|
||||
void TickTrail()
|
||||
{
|
||||
if (_trailUntil <= 0f || _pc == null) return;
|
||||
if (Time.time > _trailUntil) { _trailUntil = 0f; return; }
|
||||
if (Time.time < _trailNext) return;
|
||||
_trailNext = Time.time + _trailInterval;
|
||||
Vector3 p = _pc.Get_position(); float step = Mathf.Max(0.01f, _trailStep), d = Vector3.Distance(p, _trailLast);
|
||||
if (d < step) return;
|
||||
// 4타 돌진(공격 전진 표 · 약 1.1 m 를 0.07 s · Play 실측)은 한 프레임 0.3 m 넘게 가므로 지나온 길에 step 간격으로 고르게(지금 자세 · 기본 잔상 색 = 순간이동 잔상과 같음)
|
||||
TrailGhosts += WL.Combat.Weapon.WLGhostStrike.BlinkGhosts(_pc, _trailLast, p, Mathf.Clamp(Mathf.FloorToInt(d / step), 1, 6));
|
||||
_trailLast = p;
|
||||
}
|
||||
void LateUpdate()
|
||||
{
|
||||
TickTrail();
|
||||
if ((!_spinning && !_blending) || _pc == null) return;
|
||||
if (_spinBone == null) { _spinning = _blending = false; _fx = null; return; }
|
||||
var root = _pc.transform; float w = 1f;
|
||||
|
|
@ -754,11 +785,11 @@ namespace WL.Combat.Impact
|
|||
/// <summary>#941 궤적 교체 이펙트를 매 프레임 무기 소켓 방향(손잡이 → 무기 끝 · 수평)에 맞춘다 — 창 2타 기계총 가림처럼 PC 정면이 아니라 무기가 향한 쪽으로 쏘게. 자리 = 손잡이 + 방향 × 길이 × alignFraction + 위 yOffset − R × massLocal × 배율.</summary>
|
||||
public sealed class WLWeaponFollowFx : MonoBehaviour
|
||||
{
|
||||
Transform _socket; Vector3 _tipLocal, _mass, _dir; Quaternion _base; float _scale, _frac, _yOff, _fwd, _side, _until; PCActor _pc; bool _armed, _fixed, _lock;
|
||||
Transform _socket; Vector3 _tipLocal, _buttLocal, _mass, _dir; Quaternion _base; float _scale, _frac, _yOff, _fwd, _side, _until; PCActor _pc; bool _armed, _fixed, _lock, _axis, _pitch;
|
||||
public static int Frames, Locked; public static string LastLog = "";
|
||||
public bool Arm(PCActor pc, WLSwingFxRule r, float scale)
|
||||
{
|
||||
_pc = pc; _scale = scale; _frac = r.alignFraction; _yOff = r.yOffset; _fwd = r.alignForward; _side = r.alignSide; _fixed = r.fixedDir; _lock = r.lockFacing;
|
||||
_pc = pc; _scale = scale; _frac = r.alignFraction; _yOff = r.yOffset; _fwd = r.alignForward; _side = r.alignSide; _fixed = r.fixedDir; _lock = r.lockFacing; _axis = r.alignAxis; _pitch = r.alignPitch;
|
||||
_until = Time.time + (r.life > 0f ? r.life : 1f);
|
||||
_base = r.euler != null && r.euler.Length >= 3 ? Quaternion.Euler(r.euler[0], r.euler[1], r.euler[2]) : Quaternion.identity;
|
||||
_mass = r.massLocal != null && r.massLocal.Length >= 3 ? new Vector3(r.massLocal[0], r.massLocal[1], r.massLocal[2]) : Vector3.zero;
|
||||
|
|
@ -767,7 +798,7 @@ namespace WL.Combat.Impact
|
|||
_dir = pc.transform.forward; _dir.y = 0f; if (_dir.sqrMagnitude < 1e-4f) _dir = Vector3.forward; _dir.Normalize(); // #943-⑤ 띄우는 순간의 표적 방향으로 고정
|
||||
_armed = true; ApplyFixed(); return true;
|
||||
}
|
||||
_armed = WLImpactRunner.SocketTip(pc, out _socket, out _tipLocal);
|
||||
_armed = _axis ? WLImpactRunner.SocketAxis(pc, out _socket, out _buttLocal, out _tipLocal) : WLImpactRunner.SocketTip(pc, out _socket, out _tipLocal);
|
||||
if (_armed) Apply();
|
||||
return _armed;
|
||||
}
|
||||
|
|
@ -790,9 +821,14 @@ namespace WL.Combat.Impact
|
|||
{
|
||||
if (_socket == null || _pc == null) { _armed = false; return; }
|
||||
Vector3 hilt = _socket.position, tip = _socket.TransformPoint(_tipLocal);
|
||||
Vector3 d = tip - hilt; float len = d.magnitude; d.y = 0f;
|
||||
if (_axis) // #964 손(소켓)을 자루 중심선에 내린 점 → 창끝
|
||||
{
|
||||
Vector3 butt = _socket.TransformPoint(_buttLocal), ax = tip - butt;
|
||||
if (ax.sqrMagnitude > 1e-6f) hilt = butt + Vector3.Project(hilt - butt, ax);
|
||||
}
|
||||
Vector3 d = tip - hilt; float len = d.magnitude; if (!_pitch) d.y = 0f;
|
||||
if (d.sqrMagnitude < 1e-4f) d = _pc.transform.forward; d.Normalize();
|
||||
var rot = Quaternion.LookRotation(d, Vector3.up) * _base;
|
||||
var rot = Quaternion.LookRotation(d, Mathf.Abs(d.y) > 0.99f ? _pc.transform.forward : Vector3.up) * _base;
|
||||
Vector3 pos = hilt + d * (len * _frac) + Vector3.up * _yOff - rot * (_mass * _scale);
|
||||
transform.SetPositionAndRotation(pos, rot); Frames++;
|
||||
LastLog = "align hilt=" + hilt.ToString("F2") + " tip=" + tip.ToString("F2") + " dir=" + d.ToString("F2") + " pos=" + pos.ToString("F2");
|
||||
|
|
@ -818,6 +854,28 @@ namespace WL.Combat.Impact
|
|||
}
|
||||
return socket != null && best > 0.05f;
|
||||
}
|
||||
/// <summary>#964 소켓 무기의 메시 긴 축(소켓 로컬) — 켜진 렌더러 중 bounds 가장 긴 변이 가장 긴 것의 그 변 양 끝 면 중심 · 끝(tip) = 소켓 원점에서 먼 쪽 · 자루 끝(butt) = 가까운 쪽(창 찌르기 이펙트 방향 = 자루 중심선).</summary>
|
||||
internal static bool SocketAxis(PCActor pc, out Transform socket, out Vector3 buttLocal, out Vector3 tipLocal)
|
||||
{
|
||||
socket = null; buttLocal = tipLocal = Vector3.zero; float best = 0f;
|
||||
var sockets = pc != null ? pc.tfs_weapon : null; if (sockets == null) return false;
|
||||
for (int i = 0; i < sockets.Length; i++)
|
||||
{
|
||||
var s = sockets[i]; if (s == null || !s.gameObject.activeInHierarchy) continue;
|
||||
foreach (var r in s.GetComponentsInChildren<Renderer>(false))
|
||||
{
|
||||
if (r == null || !r.enabled) continue;
|
||||
Bounds lb; var mf = r.GetComponent<MeshFilter>(); var smr = r as SkinnedMeshRenderer;
|
||||
if (mf != null && mf.sharedMesh != null) lb = mf.sharedMesh.bounds; else if (smr != null) lb = smr.localBounds; else continue;
|
||||
Vector3 e = lb.extents, ax = e.x >= e.y && e.x >= e.z ? new Vector3(e.x, 0f, 0f) : e.y >= e.z ? new Vector3(0f, e.y, 0f) : new Vector3(0f, 0f, e.z);
|
||||
Vector3 a = s.InverseTransformPoint(r.transform.TransformPoint(lb.center - ax)), b = s.InverseTransformPoint(r.transform.TransformPoint(lb.center + ax));
|
||||
float len = (b - a).magnitude; if (len <= best) continue;
|
||||
best = len; socket = s;
|
||||
if (a.magnitude > b.magnitude) { tipLocal = a; buttLocal = b; } else { tipLocal = b; buttLocal = a; }
|
||||
}
|
||||
}
|
||||
return socket != null && best > 0.05f;
|
||||
}
|
||||
/// <summary>#956 소켓 하나의 무기 끝(소켓 로컬) = 켜진 렌더러 bounds 모서리 중 소켓 원점에서 가장 먼 점 · 반환 = 그 거리(0 = 무기 없음). 비수처럼 양손 소켓을 따로 쓸 때(WLShadowSlash 난사 사본).</summary>
|
||||
internal static float SocketTipOf(Transform s, out Vector3 tipLocal)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -437,6 +437,18 @@ namespace WL.Combat
|
|||
|
||||
[Tooltip("#850 이 직업의 호 크기 배율(arcSizeScale 에 곱한다). 1 = 그대로")]
|
||||
[Range(0.2f, 2f)] public float arcSizeMul = 1f;
|
||||
|
||||
[Tooltip("#964 타별 호 크기 배율(arcSizeMul 에 곱한다) — 칸 번호 = 타 − 1 · 비우거나 0 이하 = 1 (비수 4타 = PD 「4타 크기 30 % 축소」)")]
|
||||
public float[] arcSizeMulStages = new float[0];
|
||||
|
||||
/// <summary>#964 이 타(ShowEffect 이름 끝 숫자 · Effect_Slash_{직업}_{타})의 호 크기 배율 — 없으면 1.</summary>
|
||||
public float StageSizeMul(string effectName)
|
||||
{
|
||||
if (arcSizeMulStages == null || arcSizeMulStages.Length == 0 || string.IsNullOrEmpty(effectName)) return 1f;
|
||||
int i = effectName.LastIndexOf('_'), st;
|
||||
if (i < 0 || !int.TryParse(effectName.Substring(i + 1), out st) || st < 1 || st > arcSizeMulStages.Length) return 1f;
|
||||
return arcSizeMulStages[st - 1] > 0f ? arcSizeMulStages[st - 1] : 1f;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"enabled": 1,
|
||||
"maxAlive": 6,
|
||||
"maxAlive": 10,
|
||||
"_note_964": "#964 PD 「비수 4타 잔상이 플레이어를 따라 생성되도록」 — 동시 잔상 상한 6 → 10: 4타 순간이동 길 잔상 4개가 6칸 중 4칸을 차지해 돌진(약 1.1 m · 0.07 s) 길 잔상이 2개만 생겼다(2차 Play 실측 · 따라오는 잔상 40/20회) · 잔상 1개 수명 = hold 0.05 + fade 0.3 s",
|
||||
"hold": 0.05,
|
||||
"fade": 0.3,
|
||||
"color": [
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@
|
|||
10202
|
||||
],
|
||||
"stage": 4,
|
||||
"frontReach": 1.89
|
||||
"frontReach": 1.32,
|
||||
"_note_964": "#964 PD 「비수 4타는 지금보다 크기 및 범위를 30% 줄여」 — 판정 앞 끝 1.89 → 1.32 m(× 0.7)"
|
||||
},
|
||||
{
|
||||
"classIds": [
|
||||
|
|
|
|||
|
|
@ -140,7 +140,8 @@
|
|||
"stunSeconds": 0.5,
|
||||
"endAfter": 0.5,
|
||||
"meteors": 10,
|
||||
"meteorArea": 5.0,
|
||||
"meteorArea": 3.0,
|
||||
"_note_964": "#964 PD 「지팡이 각성 스킬이 플레이어 주위가 아니라 타겟 된 적 중심으로 3m 범위 내 랜덤으로」 — meteorArea 5 → 3 m · 투사체 대상이 비면 PC 가 겨눈 대상(Get_Target)을 중심으로(WLStaffEarth.cs · 이전 = 시전자 앞 3 m) · 실측 = 964 검증 Play",
|
||||
"meteorInterval": 0.12,
|
||||
"meteorImpact": 0.67,
|
||||
"meteorYaw": 30,
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ namespace WL.Combat.Weapon
|
|||
{
|
||||
public const string ResourcesPath = "WL/WLStaffEarth";
|
||||
public static int Casts, TakeOvers, Hits, Launches, Marked, Popups, Errors, Circles, Meteors;
|
||||
public static string MeteorSrc = ""; public static Vector3 MeteorCenter; public static readonly List<Vector3> MeteorPts = new List<Vector3>(), MeteorCenters = new List<Vector3>(); // #964 검증용(메테오 중심 출처 · 낙하 자리)
|
||||
public static string LastLog = "";
|
||||
|
||||
static WLStaffEarthJson s_cfg;
|
||||
|
|
@ -310,6 +311,10 @@ namespace WL.Combat.Weapon
|
|||
var shooter = pd.shooter; var target = pd.target;
|
||||
if (r.meteors > 0) // #963 메테오 — 운석마다 무작위 자리 · 땅에 닿는 시각에 그 자리 판정 + 기절
|
||||
{
|
||||
// #964 PD 「지팡이 각성 스킬이 플레이어 주위가 아니라 타겟 된 적 중심으로 3 m 범위 내 랜덤」 — 투사체 대상이 비거나 죽었으면 PC 가 겨눈 대상(Get_Target)으로 · 그것도 없으면 이전처럼 시전자 앞 3 m
|
||||
WLStaffEarth.MeteorSrc = !DSUtil.CheckNull(target) && !target.IsDead() ? "투사체 대상" : "투사체 대상 없음";
|
||||
if ((DSUtil.CheckNull(target) || target.IsDead()) && shooter != null) { var t2 = shooter.Get_Target(); if (!DSUtil.CheckNull(t2) && !t2.IsDead()) { target = t2; WLStaffEarth.MeteorSrc += " → PC 대상"; } else WLStaffEarth.MeteorSrc += " → 시전자 앞"; }
|
||||
WLStaffEarth.MeteorPts.Clear(); WLStaffEarth.MeteorCenters.Clear();
|
||||
Vector3 last = DSUtil.CheckNull(target) ? shooter.Get_position() + shooter.transform.forward * 3f : target.Get_position();
|
||||
var cam = Camera.main; Vector3 cf = cam != null ? cam.transform.forward : shooter.transform.forward; cf.y = 0f; if (cf.sqrMagnitude < 1e-4f) cf = Vector3.forward;
|
||||
Vector3 from = Quaternion.Euler(0f, r.meteorYaw, 0f) * cf.normalized;
|
||||
|
|
@ -319,6 +324,7 @@ namespace WL.Combat.Weapon
|
|||
Vector3 c0 = r.center == "caster" ? shooter.Get_position() : last;
|
||||
Vector2 d = Random.insideUnitCircle * Mathf.Max(0f, r.meteorArea);
|
||||
Vector3 pt = new Vector3(c0.x + d.x, c0.y, c0.z + d.y);
|
||||
WLStaffEarth.MeteorPts.Add(pt); WLStaffEarth.MeteorCenters.Add(c0); WLStaffEarth.MeteorCenter = c0; // #964 검증용(낙하 자리 · 그때 중심)
|
||||
WLStaffEarth.SpawnAt(r.fx, shooter, pt, from, 0f); WLStaffEarth.Meteors++;
|
||||
StartCoroutine(MeteorHit(pb, shooter, pt, r));
|
||||
if (r.meteorInterval > 0f && i < r.meteors - 1) yield return new WaitForSeconds(r.meteorInterval);
|
||||
|
|
|
|||
|
|
@ -1643,7 +1643,7 @@ namespace WL.Combat
|
|||
if (reach > 0.01f && mf.radiusOuter > 1e-4f)
|
||||
s = reach * Mathf.Max(settings.arcRangeScale, 0.01f) / mf.radiusOuter;
|
||||
|
||||
s *= Mathf.Max(settings.arcSizeScale, 0.01f) * (cov != null ? Mathf.Max(cov.arcSizeMul, 0.01f) : 1f);
|
||||
s *= Mathf.Max(settings.arcSizeScale, 0.01f) * (cov != null ? Mathf.Max(cov.arcSizeMul, 0.01f) * cov.StageSizeMul(cal != null && !string.IsNullOrEmpty(cal.clipName) ? cal.clipName : _burstPrefab) : 1f); // #964 타별 배율(비수 4타)
|
||||
|
||||
// ── 회전 · 위치 ────────────────────────────────────────────────
|
||||
Quaternion target = Quaternion.LookRotation(nW, bW);
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices:
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 0.924
|
||||
arcSizeMulStages: []
|
||||
- classId: 10102
|
||||
mode: 0
|
||||
overrideLook: 0
|
||||
|
|
@ -129,6 +130,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices:
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 0.924
|
||||
arcSizeMulStages: []
|
||||
- classId: 10201
|
||||
mode: 0
|
||||
overrideLook: 0
|
||||
|
|
@ -139,6 +141,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices:
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 1
|
||||
arcSizeMulStages: []
|
||||
- classId: 10202
|
||||
mode: 0
|
||||
overrideLook: 1
|
||||
|
|
@ -149,6 +152,11 @@ MonoBehaviour:
|
|||
weaponSlotIndices:
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 0.65
|
||||
arcSizeMulStages:
|
||||
- 1
|
||||
- 1
|
||||
- 1
|
||||
- 1.6
|
||||
- classId: 10501
|
||||
mode: 0
|
||||
overrideLook: 0
|
||||
|
|
@ -159,6 +167,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices: 01000000
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 1
|
||||
arcSizeMulStages: []
|
||||
- classId: 10502
|
||||
mode: 0
|
||||
overrideLook: 0
|
||||
|
|
@ -169,6 +178,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices: 01000000
|
||||
arcFitBlade: 0
|
||||
arcSizeMul: 1
|
||||
arcSizeMulStages: []
|
||||
- classId: 10701
|
||||
mode: 0
|
||||
overrideLook: 0
|
||||
|
|
@ -179,6 +189,7 @@ MonoBehaviour:
|
|||
weaponSlotIndices:
|
||||
arcFitBlade: 1
|
||||
arcSizeMul: 1
|
||||
arcSizeMulStages: []
|
||||
useTableWeaponIndices: 1
|
||||
burstMode: 0
|
||||
burstTiming: 1
|
||||
|
|
@ -597,44 +608,6 @@ MonoBehaviour:
|
|||
straight=0.49 sweep=124.0\xB0 pivot=\uC190\uC7A1\uC774\uC911\uC2EC tipR=0.211
|
||||
hiltR=0.122 dev=0.033 fitQ=0.68 kind=Swing (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
- classId: 10202
|
||||
clipName: Effect_Slash_10202_3
|
||||
kind: 1
|
||||
planeNormal: {x: -0.082317114, y: -0.9563773, z: 0.28029686}
|
||||
pivot: {x: -0.018818194, y: 0.34345716, z: 0.022582091}
|
||||
bisector: {x: 0.9597754, y: -0.0003213581, z: 0.28076878}
|
||||
startDir: {x: 0.20088509, y: -0.2914013, z: -0.9352702}
|
||||
tipRadius: 0.39940676
|
||||
hiltRadius: 0.26400948
|
||||
sweepDeg: 187.99312
|
||||
stabAxis: {x: -0.0013499224, y: 0.47777095, z: 0.8784834}
|
||||
stabStart: {x: 0.02574967, y: 0.18643004, z: -0.193755}
|
||||
stabLength: 0.6883642
|
||||
quality: 50
|
||||
source: "wl828m1 2026-10-11 16:33 Attack3_S_10202 f14~f39/90@60Hz n=26(\uD2B8\uB9BC
|
||||
26\u219226) PC=LH_M05 rootScale=1.0527 weaponK=1.0000 path=2.14 bladeAng=346\xB0
|
||||
straight=0.35 sweep=188.0\xB0 pivot=\uCE7C\uB05D\uC6D0 tipR=0.399 hiltR=0.264
|
||||
dev=0.052 fitQ=0.74 kind=Swing (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
- classId: 10202
|
||||
clipName: Effect_Slash_10202_4
|
||||
kind: 1
|
||||
planeNormal: {x: -0.3724884, y: 0.8765667, z: 0.3047675}
|
||||
pivot: {x: 0.24783906, y: 0.2827277, z: 0.930264}
|
||||
bisector: {x: -0.4942591, y: -0.46532953, z: 0.73428637}
|
||||
startDir: {x: -0.90279526, y: -0.26618892, z: -0.3377933}
|
||||
tipRadius: 0.47799104
|
||||
hiltRadius: 0.28055897
|
||||
sweepDeg: 142.42691
|
||||
stabAxis: {x: 0.7061329, y: 0.099189825, z: 0.7010975}
|
||||
stabStart: {x: -0.21803169, y: 0.111440904, z: 0.7406768}
|
||||
stabLength: 0.9993689
|
||||
quality: 50
|
||||
source: "wl828m1 2026-10-11 16:33 Attack4_S_10202 f11~f15/70@60Hz n=5(\uD2B8\uB9BC
|
||||
6\u21925) PC=LH_M05 rootScale=1.0527 weaponK=1.0000 path=1.27 bladeAng=189\xB0
|
||||
straight=0.93 sweep=142.4\xB0 pivot=\uCE7C\uB05D\uC6D0 tipR=0.478 hiltR=0.281
|
||||
dev=0.071 fitQ=0.70 kind=Swing (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
- classId: 10101
|
||||
clipName: Effect_Slash_10101_1
|
||||
kind: 1
|
||||
|
|
@ -916,6 +889,44 @@ MonoBehaviour:
|
|||
straight=0.90 sweep=18.0\xB0 pivot=\uC190\uC7A1\uC774\uC911\uC2EC tipR=1.829
|
||||
hiltR=0.218 dev=0.027 fitQ=0.97 kind=Stab (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
- classId: 10202
|
||||
clipName: Effect_Slash_10202_3
|
||||
kind: 1
|
||||
planeNormal: {x: 0.2889763, y: 0.95680165, z: 0.031990036}
|
||||
pivot: {x: 0.039037243, y: 0.46985248, z: -0.03167774}
|
||||
bisector: {x: -0.7255494, y: 0.19708802, z: 0.65934384}
|
||||
startDir: {x: 0.8233611, y: -0.23134772, z: -0.51822275}
|
||||
tipRadius: 0.48337892
|
||||
hiltRadius: 0.42111483
|
||||
sweepDeg: 380.08942
|
||||
stabAxis: {x: -0.3503662, y: 0.03334063, z: 0.9360192}
|
||||
stabStart: {x: 0.4051076, y: 0.36699417, z: -0.26208207}
|
||||
stabLength: 1.148149
|
||||
quality: 50
|
||||
source: "wl828m1 2026-10-21 22:26 Attack3_S_10202 f10~f25/80@60Hz n=16(\uD2B8\uB9BC
|
||||
16\u219216) PC=LH_M05 rootScale=1.0527 weaponK=1.0000 path=3.65 bladeAng=413\xB0
|
||||
straight=0.58 sweep=380.1\xB0 pivot=\uC190\uC7A1\uC774\uC911\uC2EC tipR=0.483
|
||||
hiltR=0.421 dev=0.083 fitQ=0.66 kind=Swing (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
- classId: 10202
|
||||
clipName: Effect_Slash_10202_4
|
||||
kind: 1
|
||||
planeNormal: {x: 0.993643, y: 0.09804149, z: -0.055329934}
|
||||
pivot: {x: 0.098698564, y: 0.4146042, z: 0.68029946}
|
||||
bisector: {x: 0.029423717, y: 0.24822924, z: 0.9682544}
|
||||
startDir: {x: -0.11221989, y: 0.8235002, z: -0.55610627}
|
||||
tipRadius: 0.37558234
|
||||
hiltRadius: 0.34842908
|
||||
sweepDeg: 219.42944
|
||||
stabAxis: {x: 0.07037806, y: -0.93870795, z: 0.33745268}
|
||||
stabStart: {x: 0.030274354, y: 0.91671973, z: 0.34122294}
|
||||
stabLength: 0.909731
|
||||
quality: 50
|
||||
source: "wl828m1 2026-10-21 22:26 Attack4_S_10202 f7~f12/70@60Hz n=6(\uD2B8\uB9BC
|
||||
6\u21926) PC=LH_M05 rootScale=1.0527 weaponK=1.0000 path=1.34 bladeAng=187\xB0
|
||||
straight=0.68 sweep=219.4\xB0 pivot=\uC190\uC7A1\uC774\uC911\uC2EC tipR=0.376
|
||||
hiltR=0.348 dev=0.014 fitQ=0.92 kind=Swing (\uB7F0\uD0C0\uC784 \uB85C\uCEEC=\uD68C\uC804\uB9CC
|
||||
\xB7 \uCEE8\uD2B8\uB864\uB7EC \uD074\uB9BD)"
|
||||
swingMinSweepDegrees: 150
|
||||
swingMinTipHiltRatio: 3
|
||||
stabMinStraightness: 0.86
|
||||
|
|
@ -935,6 +946,9 @@ MonoBehaviour:
|
|||
- classId: 10801
|
||||
clipName: Effect_Slash_10101_1
|
||||
tiltDeg: 0
|
||||
- classId: 10202
|
||||
clipName: Effect_Slash_10202_4
|
||||
tiltDeg: 60
|
||||
stabAnchor: 0
|
||||
stabSizeScale: 1
|
||||
stabFaceCamera: 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue