2026-07-09 이동 애니메이션 추가
This commit is contained in:
@@ -5,11 +5,22 @@ public class NPCController : MonoBehaviour
|
||||
private Animator _anim;
|
||||
[SerializeField] private int _defaultAnimNo;
|
||||
|
||||
private static readonly int _speedHash = Animator.StringToHash("Speed");
|
||||
|
||||
private Vector3 _lastPosition;
|
||||
private float _smoothedSpeed;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_anim = GetComponent<Animator>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_lastPosition = transform.position;
|
||||
_smoothedSpeed = 0f;
|
||||
}
|
||||
|
||||
public void SetAnimState(int animNo)
|
||||
{
|
||||
_anim.SetFloat("AnimNo", (float)animNo);
|
||||
@@ -19,4 +30,21 @@ public void SetDefaultAnimState()
|
||||
{
|
||||
SetAnimState(_defaultAnimNo);
|
||||
}
|
||||
|
||||
// 이동 속도를 재서 Animator의 "Speed" 파라미터로 넘긴다 (블렌드 트리용).
|
||||
// 속도는 위치 변화량으로 직접 잰다 — Rigidbody가 있어도 kinematic + 트랜스폼 직접 이동(타임라인)은
|
||||
// 물리를 안 거쳐서 linearVelocity가 항상 0이기 때문. 타임라인이 위치를 쓴 뒤인 LateUpdate에서 잰다.
|
||||
private void LateUpdate()
|
||||
{
|
||||
if (Time.deltaTime <= 0f) return;
|
||||
|
||||
// 수평 이동 속도 (m/s)
|
||||
Vector3 delta = transform.position - _lastPosition;
|
||||
delta.y = 0f;
|
||||
_lastPosition = transform.position;
|
||||
|
||||
// 프레임 편차로 인한 떨림 방지용 스무딩
|
||||
_smoothedSpeed = Mathf.Lerp(_smoothedSpeed, delta.magnitude / Time.deltaTime, 10f * Time.deltaTime);
|
||||
_anim.SetFloat(_speedHash, _smoothedSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user