using UnityEngine; namespace WL.Player { /// /// 플레이어 이동/기상 시퀀스에 쓰이는 모든 수치의 단일 출처(SOT). /// 코드 상수 금지(조직 규칙 C45) — 모든 값은 이 에셋에서 읽는다. /// 에셋 경로: Assets/WL/Settings/PlayerMoveSettings.asset /// [CreateAssetMenu(fileName = "PlayerMoveSettings", menuName = "WL/Player Move Settings")] public class PlayerMoveSettings : ScriptableObject { [Header("이동 속도 (m/s)")] [Tooltip("걷기 속도")] public float walkSpeed = 2.2f; [Tooltip("달리기(Sprint) 속도")] public float runSpeed = 5.5f; [Tooltip("목표 속도까지 가속하는 데 걸리는 대략적 시간(초). 작을수록 즉각적")] public float speedSmoothTime = 0.12f; [Tooltip("공격(콤보) 중 이동 입력이 있을 때 이동 속도에 곱하는 비율(0~1). 전신 공격 클립이 재생되는 동안 미끄러져 보이지 않게 이동 거리를 줄인다 · PD #734 · 임시 0.3")] [Range(0f, 1f)] public float attackMoveSpeedRatio = 0.3f; [Header("회전")] [Tooltip("진행 방향으로 돌아서는 데 걸리는 대략적 시간(초)")] public float rotationSmoothTime = 0.10f; [Header("중력 / 점프")] [Tooltip("중력 가속도(음수)")] public float gravity = -19.62f; [Tooltip("지면에 붙어 있을 때 유지하는 아래 방향 속도(음수). 경사면 미끄러짐 방지")] public float groundedStickVelocity = -2.0f; [Tooltip("점프 최고 높이(m). 0이면 점프 비활성")] public float jumpHeight = 1.1f; [Tooltip("낙하 속도 상한(음수)")] public float terminalVelocity = -50f; [Header("기상(GetUp) 시퀀스")] [Tooltip("씬 시작 후 쓰러진 자세를 유지하는 시간(초)")] public float downHoldSeconds = 0.8f; [Tooltip("GetUp 상태 길이를 Animator에서 못 읽었을 때 사용하는 대체 재생 시간(초)")] public float getUpFallbackDuration = 1.7f; [Tooltip("GetUp이 어떤 이유로도 끝나지 않을 때 강제로 조작을 여는 상한 시간(초)")] public float getUpTimeoutSeconds = 6.0f; [Tooltip("GetUp -> Locomotion 크로스페이드 시간(초)")] public float getUpToLocomotionBlend = 0.15f; [Tooltip("【미사용 · PD #705 ②】 기상 후 Cry 단계를 제거해 현재 시퀀스는 이 값을 읽지 않는다. 복구용으로 보존")] public float crySeconds = 1.0f; [Tooltip("【미사용 · PD #705 ②】 GetUp -> Cry 크로스페이드 시간(초)")] public float getUpToCryBlend = 0.12f; [Tooltip("Down 상태를 잡아 둘 정규화 시각. 98_Damage LyingFront 는 전 구간이 엎드린 자세라 0 으로 둔다")] [Range(0f, 1f)] public float downFreezeNormalizedTime = 0f; [Header("수영 (PD #704 범위확정 1 · 50_Adventure 세트 · 임시)")] [Tooltip("수면보다 이만큼 아래로 내려가면 수영 상태로 전환한다(m) · 임시 0.9 = 허리 깊이")] public float swimEnterDepth = 0.9f; [Tooltip("수면 기준 깊이가 이 값보다 얕아지면 수영을 끝내고 이동으로 돌아간다(m). 경계 깜빡임 방지용으로 진입값보다 작게 둔다 · 임시 0.55")] public float swimExitDepth = 0.55f; [Tooltip("수영 중 이동 속도(m/s) · 임시 1.8")] public float swimSpeed = 1.8f; [Tooltip("수영 중 발 위치를 수면보다 이만큼 아래로 유지한다(m) · 임시 1.15")] public float swimSurfaceSubmerge = 1.15f; [Tooltip("수면 높이를 따라가는 속도(m/s). 클수록 즉시 붙는다 · 임시 6")] public float swimSurfaceFollowSpeed = 6f; [Tooltip("이동 <-> 수영 크로스페이드 시간(초) · 임시 0.18")] public float swimBlendTime = 0.18f; [Header("애니메이터 블렌드")] [Tooltip("블렌드 트리에서 Walk 클립이 놓인 임계값(Idle=0, Run=1)")] [Range(0f, 1f)] public float walkBlendThreshold = 0.5f; [Tooltip("Speed 파라미터 감쇠 시간(초)")] public float animatorDampTime = 0.10f; [Tooltip("정지 시 Locomotion 블렌드를 0(Idle)까지 확실히 끌어내리는 시간(초). 감쇠만 쓰면 0 에 도달하지 않아 걷기 모션이 남는다 · PD #715 ③ · 임시 0.15")] public float idleSnapSeconds = 0.15f; [Tooltip("무입력·무전투가 이 시간(초) 이어지면 대기 변형 모션을 1회 재생한다. 0 이면 끔 · PD #715 ③ · 임시 8")] public float idleVariationSeconds = 8f; } }