[Tooltip("Move 이벤트의 float 파라미터(m)에 곱하는 배수. 전체 전진량을 한 값으로 조절한다. "+
"1 = 클립에 적힌 거리 그대로")]
[Range(0f, 3f)]publicfloatattackStepScale=1f;
[Tooltip("한 번의 공격으로 전진할 수 있는 상한(m). 데이터가 잘못 들어와도 "+
"캐릭터가 날아가지 않게 막는 안전판")]
publicfloatattackStepMaxDistance=2f;
[Tooltip("켜면 앞이 빠르고 뒤가 느린 감속(ease-out) 곡선으로 나눠 이동한다. "+
"끄면 등속. 실측 루트 커브가 초반에 몰려 있어 기본은 켬")]
publicboolattackStepEaseOut=true;
[Tooltip("전진 중 이 거리(m) 안에 대상이 들어오면 더 밀지 않는다. 0 이면 검사하지 않는다. "+
"대상을 통과해 지나가는 것을 막는다")]
publicfloatattackStepStopDistance=0.9f;
// ── PD 지시 #787 (2026-09-06) 대쉬 후 공격 ───────────────────────────────
// "적과 거리가 일정거리 떨어진 경우 대쉬 동작이 발생된 후 공격하도록"
// 달려가는 추적(NavMeshAgent 경로 이동)과 즉시 공격 사이의 **중간 거리 창**에서만
// Stander@Chase_Start 클립을 재생하며 타겟 방향으로 직진해 붙고 곧바로 때린다.
// 이동은 AttackStepDriver 와 같은 이유로 NavMeshAgent.Move 다(지형 관통·NavMesh 이탈 없음).
[Header("■ #787 대쉬 후 공격")]
[Tooltip("끄면 대쉬를 쓰지 않고 지금처럼 달려가서 공격한다. 라이브 롤백 스위치(C8)")]
publicbooldashEnabled=true;
[Tooltip("이 거리(m) 미만이면 대쉬하지 않고 바로 공격한다(이미 붙어 있다)")]
publicfloatdashMinDistance=1.6f;
[Tooltip("이 거리(m)를 넘으면 대쉬하지 않고 기존 달리기로 추적한다. "+
"즉 대쉬는 [dashMinDistance, dashMaxDistance] 창 안에서만 일어난다")]
publicfloatdashMaxDistance=6.0f;
[Tooltip("대쉬 중 대상까지 이 거리(m) 안에 들어오면 즉시 멈추고 공격한다. "+
"0 이면 attackStepStopDistance 를 그대로 쓴다")]
publicfloatdashStopDistance=0.9f;
[Tooltip("대쉬 이동 속도 상한(m/s). 남은 거리를 클립 길이로 나눈 속도가 이 값을 넘으면 여기서 잘린다")]
publicfloatdashMaxSpeed=12f;
[Tooltip("대쉬가 이 시간(초)을 넘기면 강제로 끝낸다. 사거리 안이면 공격, 아니면 기존 달리기로 돌아간다")]
publicfloatdashMaxSeconds=0.6f;
[Tooltip("켜면 대쉬 내내 대상을 바라보도록 수평 회전한다")]
publicbooldashLookAtTarget=true;
[Tooltip("한 번 대쉬한 뒤 다시 대쉬할 수 있을 때까지의 최소 간격(초). "+
"사거리 밖에서 대쉬가 매 프레임 다시 걸리는 것을 막는다")]
publicfloatdashCooldownSeconds=0.35f;
[Tooltip("대쉬가 계획 거리의 절반도 못 가고 끝났을 때(NavMesh 경계·장애물·도망가는 대상) "+
"적용하는 긴 쿨다운(초). 붙지도 못하면서 대쉬↔달리기를 반복하는 깜빡임을 막는다. "+
"실측 2026-09-06: 물 건너 못 가는 몹을 상대로 대쉬가 3회 연속 실패하며 제자리걸음했다")]
publicfloatdashFailCooldownSeconds=2.0f;
[Tooltip("컨트롤러에서 재생할 대쉬 상태 이름. 4개 근접 컨트롤러에 같은 이름으로 추가한다(C45 — 코드에 문자열을 넣지 않는다)")]
publicstringdashStateName="dash";
[Tooltip("대쉬 상태에 물린 클립 이름. 런타임에는 상태→클립 매핑을 직접 읽을 수 없어 "+
"이 이름으로 길이(초)를 찾는다. 못 찾으면 dashMaxSeconds 의 절반을 쓴다")]
publicstringdashClipName="Chase_Start";
[Tooltip("대쉬 상태로 넘어갈 때의 크로스페이드 시간(초). 0 이면 즉시 전환")]
publicfloatdashCrossFadeSeconds=0.06f;
// ── PD #789 (2026-09-07) 공격 클립 루트모션 재현 ─────────────────────────
[Header("■ 공격 이동 방식 (PD #789)")]
[Tooltip("ClipRootMotion = 공격 클립의 루트 이동(animator.deltaPosition)을 그대로 액터 이동으로 재현(AttackRootMotion) · FixedStep = #762 고정 전진(AttackStepDriver). 체크 하나로 즉시 원복(C8)")]