WL #966 PD 지시 5건 + 추가 1 — ① 비수 1·2타 검기 = 대상 쪽으로(SlashTrailSettings arcAimStages · 호 가운데를 호 면 안에서 대상 방향으로 · 실측 0°/6°) ② 3타 2회전(몸 −720°/0.45 s · 매핑 두 번째 ShowEffect n 0.45 floatParameter 180 = 반대편 검기 · keepTrail 연출 묶음 · 3타→4타 0.55→0.8) ③ 주력 사본에 기본 검기 하이라이트 층(slash_add 녹색 · 분출·회전 복사 WL_add_1/2) ④ 각성 = 시전 동작 ass_cast(skill2 프레임 2~7 · 0.35배) + 시전 이펙트 WL_Fx_DaggerCast(HCFX_Energy_01 사본 · SkillCast · 스킬별 시전 이펙트 칸) · SkillList 703206 ass_cast→ass_skill2 · 시전 0.5 s · lockUntilFire · 등장 = 이펙트 끝 − 0.3 s(실측 숨김 1.07 s · 마지막 입자보다 0.23 s 먼저) ⑤ 메테오 연기 = 원본 HCFX 연기 설정 + 밝은 반투명 색 · 폭발 조각 검정 키 → 밝은 회색 ⑥ 메테오 fx 0.3 → 0.45(1.5배)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-10-22 00:12:29 +09:00
parent 7e7236b720
commit be34565935
18 changed files with 54235 additions and 53 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: 0add9192c812d8044bdfed59dbd742fb
ModelImporter:
serializedVersion: 22200
serializedVersion: 24300
internalIDToNameTable:
- first:
74: 1827226128182048838
@ -12,6 +12,7 @@ ModelImporter:
materialName: 0
materialSearch: 1
materialLocation: 1
searchTexturesGlobally: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
@ -19,8 +20,6 @@ ModelImporter:
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
@ -71,6 +70,35 @@ ModelImporter:
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: AssCast_S_10202
takeName: Take 001
internalID: -998496362607748373
firstFrame: 2
lastFrame: 7
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: 1
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 0
meshes:
lODScreenPercentages: []
@ -97,6 +125,9 @@ ModelImporter:
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8

View File

@ -123,6 +123,13 @@ ModelImporter:
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 0.45
functionName: ShowEffect
data: Effect_Slash_10202_3
objectReferenceParameter: {instanceID: 0}
floatParameter: 180
intParameter: 1
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}

View File

@ -2460,6 +2460,9 @@ AnimatorStateMachine:
- serializedVersion: 1
m_State: {fileID: 1928427296861903119}
m_Position: {x: 15, y: -105, z: 0}
- serializedVersion: 1
m_State: {fileID: 1265087037476233727}
m_Position: {x: 520, y: 420, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
@ -2692,6 +2695,33 @@ AnimatorStateTransition:
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &1265087037476233727
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ass_cast
m_Speed: 0.35
m_CycleOffset: 0
m_Transitions: []
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: 0add9192c812d8044bdfed59dbd742fb,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1928427296861903119
AnimatorState:
serializedVersion: 6
@ -2784,7 +2814,7 @@ AnimatorStateTransition:
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.55
m_ExitTime: 0.8
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0

View File

@ -624,6 +624,13 @@ MonoBehaviour:
stringParameter: Effect_Slash_{CID}_3
intParameter: 1
floatParameter: 0
- functionName: ShowEffect
time: 0
useNormalized: 1
normalizedTime: 0.45
stringParameter: Effect_Slash_{CID}_3
intParameter: 1
floatParameter: 180
- functionName: Move
time: 0
useNormalized: 1
@ -642,7 +649,7 @@ MonoBehaviour:
sourceFbxPath: Assets/Res_Addr/Animations/Animation/Assassin/Stander@DualBlades_Attack3.FBX
subClipName: Attack4_S_{CID}
sourceClipName:
incomingExitTime: 0.55
incomingExitTime: 0.8
createIfMissing: 0
firstFrame: -1
lastFrame: 26
@ -686,6 +693,16 @@ MonoBehaviour:
lastFrame: 36
speed: 1
events: []
- stateName: ass_cast
sourceFbxPath: Assets/Res_Addr/Animations/Animation/Assassin/skill2.FBX
subClipName: AssCast_S_{CID}
sourceClipName:
incomingExitTime: 0
createIfMissing: 0
firstFrame: 2
lastFrame: 7
speed: 0.35
events: []
- classId: 10201
note: "\uB2E8\uAC80 \xB7 BladeDancer \u2192 Ninja Warrior pack (3\uD0C0 \uBE60\uB978
\uBC1C\uB3D9\xB7\uC18D\uB3C4 1.3 #834)"

View File

@ -129,11 +129,12 @@
"massLocal": [ 0, 0, 0 ],
"fixedDir": false,
"lockFacing": false,
"spinDegrees": -360,
"spinSeconds": 0.333,
"spinDegrees": -720,
"spinSeconds": 0.45,
"spinFx": false,
"spinBlendOut": 0.12,
"keepTrail": true,
"_note_966": "#966 PD 「비수 일반 공격 회전(마지막 타 직전)을 2회로 늘리고 캐릭터 회전 모션도 빠르게 2회」 — 몸 회전 −360°/0.333 s → −720°/0.45 s(1600°/s) · 검기 2개 = 매핑 3타 ShowEffect 두 번째(n 0.45 · floatParameter 180 = 반대편) · 두 번째 이벤트는 minInterval 0.3 으로 몸 회전을 다시 시작하지 않음(WLImpactFx keepTrail 묶음) · 회전이 끝난 뒤 4타로(3타 → 4타 전이 0.55 → 0.8) · 피해(판정 수)는 그대로",
"_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 동안 클립 자세로 섞음)",

View File

@ -299,6 +299,12 @@ namespace WL.Combat.Impact
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.minInterval > 0f) // #966 한 클립에 ShowEffect 가 2번(비수 3타 2회전 = 두 번째 검기)이면 연출(몸 회전 등)은 첫 번에만 · 검기는 매번
{
long key = ((long)pc.GetInstanceID() << 4) | (long)(stage & 15); float last;
if (s_swingAt.TryGetValue(key, out last) && Time.time - last < r.minInterval) { SwingThrottled++; LastSwing = "keepTrail stage " + stage + " (연출 묶음)"; return false; }
s_swingAt[key] = Time.time;
}
if (r.blinkDistance > 0f || r.camHoldSeconds > 0f || r.spinDegrees != 0f) WLSwingExtras.Begin(pc, r, null);
KeepTrails++; LastSwing = "keepTrail stage " + stage; LastLog = LastSwing;
return false;

View File

@ -441,6 +441,18 @@ namespace WL.Combat
[Tooltip("#964 타별 호 크기 배율(arcSizeMul 에 곱한다) — 칸 번호 = 타 − 1 · 비우거나 0 이하 = 1 (비수 4타 = PD 「4타 크기 30 % 축소」)")]
public float[] arcSizeMulStages = new float[0];
[Tooltip("#966 타별 호 겨누기(0~1) — 칸 번호 = 타 − 1 · 1 = 호 가운데를 대상(없으면 PC 정면) 쪽으로 호 면 안에서 돌린다 · 0 = 궤적 실측 그대로(비수 1·2타 = PD 「몬스터 방향으로」)")]
public float[] arcAimStages = new float[0];
/// <summary>#966 이 타의 호 겨누기 비율(0~1) — 없으면 0.</summary>
public float StageAim(string effectName)
{
if (arcAimStages == null || arcAimStages.Length == 0 || string.IsNullOrEmpty(effectName)) return 0f;
int i = effectName.LastIndexOf('_'), st;
if (i < 0 || !int.TryParse(effectName.Substring(i + 1), out st) || st < 1 || st > arcAimStages.Length) return 0f;
return Mathf.Clamp01(arcAimStages[st - 1]);
}
/// <summary>#964 이 타(ShowEffect 이름 끝 숫자 · Effect_Slash_{직업}_{타})의 호 크기 배율 — 없으면 1.</summary>
public float StageSizeMul(string effectName)
{

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -5210,7 +5210,7 @@ ParticleSystem:
serializedVersion: 2
minMaxState: 0
minColor: {r: 1, g: 1, b: 1, a: 1}
maxColor: {r: 1, g: 0.94375, b: 0.90999997, a: 0.36}
maxColor: {r: 1, g: 1, b: 1, a: 1}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
@ -6362,8 +6362,8 @@ ParticleSystem:
maxColor: {r: 1, g: 1, b: 1, a: 1}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 0}
key1: {r: 1, g: 1, b: 1, a: 1}
key0: {r: 0.93, g: 0.91, b: 0.88, a: 0.7}
key1: {r: 0.84, g: 0.84, b: 0.86, a: 0.55}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
@ -6379,7 +6379,7 @@ ParticleSystem:
ctime6: 0
ctime7: 0
atime0: 0
atime1: 9830
atime1: 32768
atime2: 65535
atime3: 0
atime4: 0
@ -6428,8 +6428,8 @@ ParticleSystem:
fps: 30
frameOverTime:
serializedVersion: 2
minMaxState: 1
scalar: 0.9999
minMaxState: 3
scalar: 0.6859375
minScalar: 0.65625
maxCurve:
serializedVersion: 2
@ -6533,8 +6533,8 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
speedRange: {x: 0, y: 1}
tilesX: 4
tilesY: 4
tilesX: 8
tilesY: 8
animationType: 0
rowIndex: 0
cycles: 1
@ -9253,7 +9253,7 @@ ParticleSystem:
m_NumColorKeys: 2
m_NumAlphaKeys: 2
CustomDataModule:
enabled: 0
enabled: 1
mode0: 1
vectorComponentCount0: 4
color0:
@ -9848,7 +9848,7 @@ ParticleSystemRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 41d5ce8e9756a244dbdd4af1c8604aa2, type: 2}
- {fileID: 2100000, guid: 940497618fb910c429d06829a874836b, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
@ -9891,7 +9891,7 @@ ParticleSystemRenderer:
m_FreeformStretching: 0
m_RotateWithStretchDirection: 1
m_UseCustomVertexStreams: 1
m_VertexStreams: 00010304
m_VertexStreams: 00010304052226
m_UseCustomTrailVertexStreams: 0
m_TrailVertexStreams: 00010304
m_Mesh: {fileID: 0}
@ -15043,7 +15043,7 @@ ParticleSystem:
serializedVersion: 2
minMaxState: 0
minColor: {r: 1, g: 1, b: 1, a: 1}
maxColor: {r: 1, g: 0.94375, b: 0.90999997, a: 0.36}
maxColor: {r: 0.93, g: 0.91, b: 0.88, a: 0.55}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
@ -16261,8 +16261,8 @@ ParticleSystem:
fps: 30
frameOverTime:
serializedVersion: 2
minMaxState: 1
scalar: 0.9999
minMaxState: 0
scalar: 0.828125
minScalar: 0.28125
maxCurve:
serializedVersion: 2
@ -16366,8 +16366,8 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
speedRange: {x: 0, y: 1}
tilesX: 4
tilesY: 4
tilesX: 8
tilesY: 8
animationType: 0
rowIndex: 0
cycles: 1
@ -19086,7 +19086,7 @@ ParticleSystem:
m_NumColorKeys: 2
m_NumAlphaKeys: 2
CustomDataModule:
enabled: 0
enabled: 1
mode0: 1
vectorComponentCount0: 4
color0:
@ -19681,7 +19681,7 @@ ParticleSystemRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 41d5ce8e9756a244dbdd4af1c8604aa2, type: 2}
- {fileID: 2100000, guid: 940497618fb910c429d06829a874836b, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
@ -19724,7 +19724,7 @@ ParticleSystemRenderer:
m_FreeformStretching: 0
m_RotateWithStretchDirection: 1
m_UseCustomVertexStreams: 1
m_VertexStreams: 00010304
m_VertexStreams: 00010304052226
m_UseCustomTrailVertexStreams: 0
m_TrailVertexStreams: 00010304
m_Mesh: {fileID: 0}
@ -24931,7 +24931,7 @@ ParticleSystem:
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 0.3330518, b: 0, a: 1}
key1: {r: 0, g: 0, b: 0, a: 1}
key1: {r: 0.86, g: 0.83, b: 0.8, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
@ -29932,7 +29932,7 @@ ParticleSystem:
serializedVersion: 2
minMaxState: 0
minColor: {r: 1, g: 1, b: 1, a: 1}
maxColor: {r: 1, g: 0.94375, b: 0.90999997, a: 0.36}
maxColor: {r: 1, g: 1, b: 1, a: 1}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
@ -31084,8 +31084,8 @@ ParticleSystem:
maxColor: {r: 1, g: 1, b: 1, a: 1}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 0}
key1: {r: 1, g: 1, b: 1, a: 1}
key0: {r: 0.93, g: 0.91, b: 0.88, a: 0.7}
key1: {r: 0.84, g: 0.84, b: 0.86, a: 0.55}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
@ -31101,7 +31101,7 @@ ParticleSystem:
ctime6: 0
ctime7: 0
atime0: 0
atime1: 9830
atime1: 32768
atime2: 65535
atime3: 0
atime4: 0
@ -31150,8 +31150,8 @@ ParticleSystem:
fps: 30
frameOverTime:
serializedVersion: 2
minMaxState: 1
scalar: 0.9999
minMaxState: 3
scalar: 0.0453125
minScalar: 0
maxCurve:
serializedVersion: 2
@ -31255,8 +31255,8 @@ ParticleSystem:
m_PostInfinity: 2
m_RotationOrder: 4
speedRange: {x: 0, y: 1}
tilesX: 4
tilesY: 4
tilesX: 8
tilesY: 8
animationType: 0
rowIndex: 0
cycles: 1
@ -33975,7 +33975,7 @@ ParticleSystem:
m_NumColorKeys: 2
m_NumAlphaKeys: 2
CustomDataModule:
enabled: 0
enabled: 1
mode0: 1
vectorComponentCount0: 4
color0:
@ -34570,7 +34570,7 @@ ParticleSystemRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 41d5ce8e9756a244dbdd4af1c8604aa2, type: 2}
- {fileID: 2100000, guid: 940497618fb910c429d06829a874836b, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
@ -34613,7 +34613,7 @@ ParticleSystemRenderer:
m_FreeformStretching: 0
m_RotateWithStretchDirection: 1
m_UseCustomVertexStreams: 1
m_VertexStreams: 00010304
m_VertexStreams: 00010304052226
m_UseCustomTrailVertexStreams: 0
m_TrailVertexStreams: 00010304
m_Mesh: {fileID: 0}
@ -49604,8 +49604,8 @@ ParticleSystem:
startColor:
serializedVersion: 2
minMaxState: 2
minColor: {r: 0.13207549, g: 0.13207549, b: 0.13207549, a: 1}
maxColor: {r: 0.2924528, g: 0.2924528, b: 0.2924528, a: 1}
minColor: {r: 0.78, g: 0.75, b: 0.72, a: 0.8}
maxColor: {r: 0.93, g: 0.91, b: 0.88, a: 0.8}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
@ -50740,7 +50740,7 @@ ParticleSystem:
m_RotationOrder: 4
separateAxes: 0
ColorModule:
enabled: 0
enabled: 1
gradient:
serializedVersion: 2
minMaxState: 1
@ -50748,8 +50748,8 @@ ParticleSystem:
maxColor: {r: 1, g: 1, b: 1, a: 1}
maxGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
key1: {r: 1, g: 1, b: 1, a: 0}
key0: {r: 1, g: 1, b: 1, a: 0}
key1: {r: 1, g: 1, b: 1, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
@ -50765,8 +50765,8 @@ ParticleSystem:
ctime6: 0
ctime7: 0
atime0: 0
atime1: 65535
atime2: 0
atime1: 9830
atime2: 65535
atime3: 0
atime4: 0
atime5: 0
@ -50775,7 +50775,7 @@ ParticleSystem:
m_Mode: 0
m_ColorSpace: -1
m_NumColorKeys: 2
m_NumAlphaKeys: 2
m_NumAlphaKeys: 3
minGradient:
serializedVersion: 2
key0: {r: 1, g: 1, b: 1, a: 1}
@ -54516,7 +54516,7 @@ ParticleSystem:
serializedVersion: 2
key0: {r: 1, g: 0.6784314, b: 0.3254902, a: 1}
key1: {r: 1, g: 0.37254903, b: 0.18431373, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key2: {r: 0.86, g: 0.83, b: 0.8, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
key5: {r: 0, g: 0, b: 0, a: 0}

View File

@ -57,7 +57,8 @@
"_note_959": "#959 PD 「각성 시전 후 공중에 떨어지지 말고 옆에서 튀어나와 정지하는 것처럼」 — 시전 잔상은 위(1.0) 대신 오른쪽 1.0 m 로 빠지고(jumpSide · 위 0.15 · 앞 0.1) · 다시 보이는 순간 최종 자리의 오른쪽 1.2 m(entrySide)에서 0.2 s 동안 감속하며 미끄러져 들어와(그동안 반투명 착지 자세 캐릭터 · 수직 이동 0 = landHeight 0) 정지(앞 미끄러짐 0.45 → 0.1 m) → 모델 + 잔상 3 + 먼지",
"landAtSeconds": 3.4,
"invisibleMatchFx": 1,
"invisibleExtra": 0.0,
"invisibleExtra": -0.3,
"_note_966": "#966 PD 「비수 각성 스킬의 캐릭터 등장 타이밍을 지금보다 더 빠르게」 — 숨김 = 이펙트 끝 − 0.3 s(마지막 폭발 Exp_11 이 터지는 즈음 · 실측 = 966 검증)",
"_note_965": "#965 PD 「비수 각성 스킬 끝나고 캐릭터 등장까지 딜레이가 너무 길어 — 이펙트 종료와 동시에 캐릭터가 등장」 — 원본 Skill_DarkAmbush 의 숨김 Set_Invisible(1.5 s)를 이 시전 이펙트 끝(폭발 Exp_01~ 시작 지연 0~1.0 s + 분출 + 수명 · 켜진 렌더러 입자계만)으로(원본 훅 1줄 · WLGhostStrike.InvisibleSeconds) · 다시 보이는 순간 = 착지 시작 · 0 이면 원본 1.5 s",
"airClip": "Skill8_Air",
"landGhosts": 0,

View File

@ -12,8 +12,10 @@
"_note_942": "#942 PD 「마법사 주력 스킬 … 플레이어가 이동해도 발동 된 스킬이 끊겨선 안돼 … 활 각성 스킬도 동일」 — Play 실측(CastMove): 시전 0.4~0.6 초 뒤 이동하면 발동 이벤트(SkillFired) 전에 시전 동작이 Run 으로 끊겨 투사체가 아예 안 나왔다(스킬발사 +0) → lockUntilFire = 발동까지만 이동·구르기 입력 무시(상한 holdMaxSeconds) · 발동 뒤 이동은 자유 · 투사체는 noSkip(Skill_Hurricane 추가 · Skill_ArrowRain 기존)으로 끝까지 유지",
"lockUntilFire": [
"Skill_Hurricane",
"Skill_ArrowRain"
"Skill_ArrowRain",
"Skill_DarkAmbush"
],
"_note_966": "#966 비수 각성(Skill_DarkAmbush)에 시전 0.5 s 가 생겨(SkillList f_CastingTime) 시전 중 이동으로 끊기지 않게 lockUntilFire 에 추가",
"holdMove": [
"Skill_DashSlash"
],

View File

@ -113,7 +113,7 @@
"center": "target",
"fx": {
"prefab": "WL/Fx/WL_Fx_Meteor01",
"scale": 0.3,
"scale": 0.45,
"bodyScale": 0,
"offset": [
0,
@ -145,6 +145,7 @@
"meteorInterval": 0.12,
"meteorImpact": 0.67,
"meteorYaw": 30,
"_note_966": "#966 PD 「메테오 바위의 크기가 너무 작아서 메테오스럽지 않아 1.5배」 — fx 배율 0.3 → 0.45(운석 전체 = 낙하체 · 폭발 함께 1.5 배 · 낙하 시작 높이도 1.5 배 · 충돌 시각은 같음 = 위치·속도가 함께 커짐(Hierarchy) · 판정 반경 1.6 m 그대로) · 폭발 짙은 연기 = impact_stone(짙은 회색 0.13~0.29)을 투사체 연기와 같은 재질·색(알파 0.36)으로(966_apply.cs)",
"_note_963": "#963 PD 「지팡이 각성 = Hyper Casual FX Pack Vol.2 스크린샷 같은 메테오 — 플레이어가 타겟한 대상 주위 5 m 범위에 운석 10개 랜덤 낙하 · 낙하 자리의 적에게 피해 · 맞은 적 0.5 초 스턴」 — 팩 메테오 4종 색 대조(주황 불꽃 + 검은 연기 = 01 · 02 파랑 · 03 빠른 선 · 04 보라) → 사본 WL_Fx_Meteor01(충돌 = 루트 높이 평면 · 바닥 콜라이더 무관 · 편집 모드 실측 0.67 s 에 그 자리 충돌) · 0.12 s 간격 10개 · 대상 둘레 5 m 원 안 무작위(대상이 움직이면 따라감) · 땅에 닿는 0.67 s 에 반경 1.6 m(+ 몸 반지름) 적마다 원본 운석 소환 피해(ProcessCollider · 운석마다 따로) + 기절 0.5 s(WLLaunch · 띄움 0) · 운석은 카메라 정면 오른쪽 30° 쪽 위에서 떨어짐 · 배율 0.3(시작 높이 6 m)"
}
],
@ -201,5 +202,24 @@
"head": 0,
"headPull": 0.08,
"_note_963": "#963 PD 「플레이어가 마법을 시전할 때는 Hyper Casual FX Pack Vol.1 의 첨부 스크린샷 같은 마법진을 플레이어가 있는 바닥에 재생되었다가 시전(이펙트 색상은 주황색 계열)」 — 팩 마법진 4종 편집 모드 대조(파란 고리 + 빛 기둥 + 떠오르는 점 = 04) → 사본 WL_Fx_CastCircle(시작색 색조 주황 (1.0,0.5,0.12) · 재질 사본 _Color ×1.3 · fxtint954) · 지팡이 · 오브 · 마법책 직업의 스킬 시전마다 발밑(시전 시간 + 0.6 s · 마지막 0.4 s 흐려짐 · 따라감) · 배율 0.3(팩 단위 지름 약 7 m → 약 2.1 m)"
}
},
"skillCastFx": [
{
"skill": "Skill_DarkAmbush",
"fx": {
"prefab": "WL/Fx/WL_Fx_DaggerCast",
"scale": 0.4,
"bodyScale": 0,
"offset": [ 0, 0, 0 ],
"euler": [ 0, 0, 0 ],
"life": 0.3,
"fade": 0.2,
"follow": 1,
"socket": "",
"head": 0,
"headPull": 0.08
},
"_note_966": "#966 PD 「비수 각성 스킬에 시전 모션 및 시전 이펙트 — Hyper Casual FX Pack Vol.2 에셋에 있는 스크린샷 이펙트를 캐릭터에게 한번 재생시킨 후 발동」 — 팩 후보 24종 편집 모드 대조(scratchpad 966_sheet · 진홍 회오리 검기 + 위에서 내려오는 세로 줄기 = HCFX_Energy_01 · 약 0.5 s) → 사본 WL_Fx_DaggerCast · 시전(SkillCast) 순간 캐릭터 발밑에서 따라감 · 시전 시간 0.5 s(SkillList 703206 f_CastingTime) + 0.3 s · 배율 0.4(대조표 0.34 ≈ 몸 1 m 둘레)"
}
]
}

View File

@ -63,6 +63,14 @@ namespace WL.Combat.Weapon
public float meteorArea = 5f, meteorInterval = 0.12f, meteorImpact = 0.67f, meteorYaw = 30f;
}
/// <summary>#966 PD 「비수 각성 스킬에 시전 모션 및 시전 이펙트 — Hyper Casual FX Pack Vol.2 스크린샷 이펙트를 캐릭터에게 한번 재생시킨 후 발동」 — 이 원본 스킬(e_Skill)의 시전(SkillCast) 순간 시전자에게 fx(시전 시간 + life · follow 1 = 따라감)</summary>
[System.Serializable]
public class WLSkillCastFx
{
public string skill = "";
public WLStaffEarthFx fx = new WLStaffEarthFx();
}
[System.Serializable]
public class WLStaffEarthPopup
{
@ -84,12 +92,13 @@ namespace WL.Combat.Weapon
// #963 PD 「플레이어가 마법을 시전할 때는 Hyper Casual FX Pack Vol.1 의 마법진을 플레이어가 있는 바닥에 재생되었다가 시전(주황색 계열)」 — castCircleClasses 직업의 스킬 시전(SkillCast)마다 발밑에 castCircle(시전 시간 + life · 따라감)
public int[] castCircleClasses = new int[0];
public WLStaffEarthFx castCircle = new WLStaffEarthFx();
public WLSkillCastFx[] skillCastFx = new WLSkillCastFx[0]; // #966 스킬별 시전 이펙트(시전자)
}
public static class WLStaffEarth
{
public const string ResourcesPath = "WL/WLStaffEarth";
public static int Casts, TakeOvers, Hits, Launches, Marked, Popups, Errors, Circles, Meteors;
public static int Casts, TakeOvers, Hits, Launches, Marked, Popups, Errors, Circles, Meteors, SkillCastFxShown;
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 = "";
@ -130,6 +139,8 @@ namespace WL.Combat.Weapon
if (pc == null || e.skill == null) return;
float cast = Mathf.Max(0f, e.skill.f_CastingTime);
if (pc.IsMainPC() && c.castCircleClasses != null && System.Array.IndexOf(c.castCircleClasses, pc.Get_ID()) >= 0 && Spawn(c.castCircle, pc, pc.transform, pc.Get_position(), cast) != null) Circles++; // #963 마법 시전 마법진
if (pc.IsMainPC() && c.skillCastFx != null) // #966 스킬별 시전 이펙트(비수 각성 = HCFX Energy_01 사본)
foreach (var sf in c.skillCastFx) if (sf != null && sf.skill == e.skill.e_Skill.ToString() && Spawn(sf.fx, pc, pc.transform, pc.Get_position(), cast) != null) SkillCastFxShown++;
if (c.castSkills == null || System.Array.IndexOf(c.castSkills, e.skill.e_Skill.ToString()) < 0) return;
var sock = Socket(pc, c.chargeFx.socket);
if (Spawn(c.chargeFx, pc, sock, sock != null ? Tip(sock, c.chargeFx) : pc.Get_Center_position(), cast) != null) Casts++;

View File

@ -148,6 +148,7 @@ namespace WL.Combat
public int classId;
public string source; // 원본 이벤트 프리팹 이름
public string effect; // 실제로 띄운 이펙트 이름
public float yawOffset; // #966 ShowEffect 이벤트 floatParameter = 호를 월드 위 축 둘레로 더 돌릴 각(도 · 원본은 이 값을 쓰지 않는다 · 비수 3타 두 번째 회전 검기 = 반대편)
public SwingKind kind;
public bool fromCache; // 이벤트 시점 즉시 배치였는가
public float delayMs; // 이벤트 → 배치까지 걸린 시간
@ -171,6 +172,8 @@ namespace WL.Combat
/// <summary>#792 경로로 배치한 총 횟수. 검증 전용.</summary>
public static int MappedSpawnCount;
public static int ArcTilted; // #922 기울기를 적용한 호 배치 수(진단)
public static int ArcAimed, ArcYawed; // #966 대상 쪽으로 돌린 호 · 이벤트 각으로 돌린 호(진단)
private float _arcYaw; // #966 지금 이벤트의 floatParameter(호 위 축 회전 · 도)
// ── 검증용 공개 프로퍼티 (2단계 CSV 샘플러가 읽는다) ────────────────────
/// <summary>스윙 창이 열려 있는가.</summary>
@ -296,6 +299,7 @@ namespace WL.Combat
if (!TryReadState(out hash, out norm)) return false;
_burstPrefab = ev.stringParameter;
_arcYaw = ev.floatParameter; // #966
// PD #792 — (클래스, 클립) 캘리브레이션이 이미 있으면 **이벤트가 뜬 이 프레임에** 배치한다.
// 원본 이펙트와 같은 타이밍에 뜨는 것이 요구 사양이고, 스윙 평면·반지름·피벗은
@ -1509,6 +1513,7 @@ namespace WL.Combat
classId = classId,
source = _burstPrefab,
effect = effect,
yawOffset = _arcYaw,
kind = kind,
fromCache = fromCache,
tipRadius = cal.tipRadius,
@ -1605,6 +1610,18 @@ namespace WL.Combat
bW -= nW * Vector3.Dot(bW, nW); // 직교화(수치 오차 정리)
if (bW.sqrMagnitude < 1e-8f) return;
nW.Normalize(); bW.Normalize();
// #966 PD 「비수 1타와 2타 공격 이펙트가 실제 몬스터 위치까지 가기 전에 끊어지는 느낌 — 좀 더 몬스터 방향으로」 — 타별 arcAimStages(0~1): 호 가운데(이등분)를
// 대상 쪽(없으면 PC 정면 · 수평)으로 호 면 안에서 그만큼 돌린다(면 · 반지름 · 피벗은 그대로 · 실측: 1타 이등분이 PC 뒤쪽 −Z · 2타 오른쪽이라 앞의 몬스터에 안 닿아 보였다)
var covAim = settings.FindOverride(p.classId);
float aim = covAim != null ? covAim.StageAim(!string.IsNullOrEmpty(cal.clipName) ? cal.clipName : _burstPrefab) : 0f;
if (aim > 0.001f && _pc != null)
{
var tgt = _pc.Get_Target(); Vector3 want = tgt != null ? tgt.Get_position() - _pc.Get_position() : _pc.transform.forward; want.y = 0f;
if (want.sqrMagnitude < 1e-4f) want = _pc.transform.forward;
Vector3 wp = want.normalized; wp -= nW * Vector3.Dot(wp, nW);
if (wp.sqrMagnitude > 1e-3f) { wp.Normalize(); bW = Vector3.Slerp(bW, wp, Mathf.Clamp01(aim)); bW -= nW * Vector3.Dot(bW, nW); if (bW.sqrMagnitude > 1e-8f) { bW.Normalize(); ArcAimed++; } else bW = wp; }
}
if (Mathf.Abs(p.yawOffset) > 0.01f) { var qy = Quaternion.AngleAxis(p.yawOffset, Vector3.up); nW = qy * nW; bW = qy * bW; ArcYawed++; } // #966 이벤트 각
// #922 (클래스, 클립) 호 기울기 — 이등분 축 둘레로 돌려 카메라에서 보이는 면을 넓힌다(±중 카메라를 더 마주 보는 쪽)
float tilt = settings.ArcTilt(p.classId, p.source);
if (Mathf.Abs(tilt) > 0.01f)

View File

@ -157,6 +157,11 @@ MonoBehaviour:
- 1
- 1
- 1.6
arcAimStages:
- 1
- 1
- 0
- 0
- classId: 10501
mode: 0
overrideLook: 0