🧠 오늘의 핵심 정리
- 플레이어 이동 감각 개선 : Lerp → MoveTowards로 변경
- 점프 무게감 보완 : 커스텀 중력(force) 적용
- 피격 애니메이션 추가 : PlayerCondition에서 Damaged()로 트리거 호출
- 속도 디버프는 일시적인 속도 변경 코루틴으로 처리
🛠️ 본캠프 35일차 : 여러 번의 수정 끝에…
오늘은 플레이어 움직임을 집중적으로 손봤습니다. 처음 구현했을 때는 “괜찮아 보이는” 수준이었는데, 실제로 계속 달려보니까 불편한 점이 꽤 보이더라고요. 그래서 오늘은 플레이 감각을 개선하는 데 시간을 많이 썼습니다.
↘️ 대각선(레인 이동) 개선 : Lerp → MoveTowards
기존에는 레인 이동을 Lerp로 처리했는데, 테스트해보니 속도가 일정하지 않아서 움직임이 살짝 부자연스러운 느낌이 있었습니다.
찾아보니 Lerp는 목표 지점에 가까워질수록 속도가 줄어드는 특성이 있어서 “레인 이동” 같은 게임에서는 미묘하게 답답하게 느껴질 수 있더라고요. 그래서 오늘은 MoveTowards로 변경해서 일정한 속도로 이동하도록 수정했습니다.
핵심 코드 : MoveTowards로 일정 속도 유지
// PlayerController.cs (Update)
float nextZ = transform.position.z + moveSpeed * Time.deltaTime;
Vector3 newPos = new Vector3(targetPosition.x, transform.position.y, nextZ);
transform.position = Vector3.MoveTowards(transform.position, newPos, smoothSpeed * Time.deltaTime);
레인 변경 입력도 targetX를 쓰는 방식에서 targetPosition.x를 직접 갱신하는 방식으로 바꿔서 로직이 좀 더 명확해졌습니다.
레인 변경 시 목표 X 갱신
// PlayerController.cs
public void OnMoveLeft(InputAction.CallbackContext context)
{
if (context.performed && currentLane > 0)
{
currentLane--;
targetPosition.x = (currentLane - 2) * laneDistance;
}
}
🪂 점프 느낌 보완 : 커스텀 중력 추가
처음엔 점프가 너무 “붕 뜨는 느낌”이 강했습니다. 러너 게임은 점프가 짧고 리듬감 있게 떨어져야 하는데, 중력감이 약하니까 조작감이 좀 떠있더라고요.
그래서 커스텀 중력을 추가했습니다. 공중에 있을 때는 중력을 더 강하게(배율 2배) 적용해서 내려오는 느낌을 더 빠르고 무게감 있게 만들었습니다.
핵심 코드 : 공중에서 중력 강화
// PlayerController.cs (FixedUpdate)
float gravityMultiplier = IsGrounded() ? 1f : 2f;
rb.AddForce(Vector3.down * customGravity * gravityMultiplier, ForceMode.Acceleration);
점프 파워도 기존보다 올려서(jumpPower = 20) “올라갈 때는 확실히, 내려올 때는 빠르게” 느낌을 맞춰보는 중입니다.
💥 피격 애니메이션 추가 : PlayerCondition.Damaged()
오늘은 PlayerCondition.cs에 Damaged() 메서드를 만들어서, 피격 시 애니메이션 트리거가 켜지도록 연결했습니다.
애니메이션이 워낙 많다 보니 “뭐가 제일 자연스러운지” 고르는데 시간이 많이 걸렸고, 결국 어울리는 걸 골라서 타이밍도 조정했습니다. 내일은 여기에 피격 이펙트까지 붙여서 좀 더 생동감 있게 만들 예정입니다.
핵심 코드 : 피격 시 트리거 호출
// PlayerCondition.cs
public void Damaged()
{
health -= 1;
if (health <= 0)
{
Die();
return;
}
animationHandler.DamagedAnimation();
}
AnimationHandler : Damaged / Die 애니메이션
// AnimationHandler.cs
public void DieAnimation()
{
anim.SetBool("IsDie", true);
}
public void DamagedAnimation()
{
anim.SetTrigger("Damaged");
}
죽음 처리도 아직 WIP지만, 일단 IsDie bool을 세팅해서 죽는 애니메이션으로 넘어갈 수 있게 길을 열어뒀습니다.
🐌 속도 디버프 처리 : 일정 시간만 느려지게
피격이나 장애물에 닿았을 때 “잠깐 느려지는” 연출도 필요해서, ChangeSpeedTemporaily를 코루틴으로 만들었습니다. 오늘은 파라미터를 speed 값으로 직접 넣는 게 아니라 배율(multiplier)로 바꿔서 더 쓰기 편해졌습니다.
핵심 코드 : 속도 배율로 일시 변경
// PlayerController.cs
public void ChangeSpeedTemporaily(float speed, float duration)
{
StartCoroutine(ChangeSpeedCoroutine(speed, duration));
}
private IEnumerator ChangeSpeedCoroutine(float multiplier, float duration)
{
float originSpeed = moveSpeed;
moveSpeed = originSpeed * multiplier;
yield return new WaitForSeconds(duration);
moveSpeed = originSpeed;
}
그리고 PlayerCondition에서는 Slow()로 감싸서 “피격=느려짐” 같은 처리를 더 편하게 연결할 수 있게 해뒀습니다.
📌 오늘의 회고
오늘 작업은 “기능 추가”라기보단 플레이 감각을 다듬는 날이었습니다. 구현 당시엔 괜찮아 보이던 것도 실제로 계속 달려보면 불편한 점이 보이더라고요.
Lerp → MoveTowards 변경, 커스텀 중력 추가만 해도 조작감이 훨씬 게임 같아졌고, 피격 애니메이션까지 들어가니 “맞는 느낌”이 확실히 생겼습니다.
🔜 내일 할 일
- 피격 이펙트(VFX/파티클) 추가해서 타격감 강화
- 죽음 처리(WIP) 마무리 : 게임 오버 연출 + 입력/이동 정지
- 점프/중력 수치 조금 더 튜닝해서 “너무 무겁거나 너무 가볍지 않게” 맞추기
'내일배움캠프 본캠프' 카테고리의 다른 글
| [내일배움캠프 37일차 TIL] 애니메이션 문제 (0) | 2025.11.19 |
|---|---|
| [내일배움캠프 36일차 TIL] 몬스터 애니메이션 (0) | 2025.11.18 |
| [내일배움캠프 34일차 TIL] 3D팀 프로젝트 (0) | 2025.11.14 |
| [내일배움캠프 33일차 TIL] 개인 프로젝트 제출날 (0) | 2025.11.13 |
| [내일배움캠프 32일차 TIL] 개인 프로젝트 제출 D-1 (0) | 2025.11.12 |