본문 바로가기
유니티

B15 - 2D 플랫포머 - 플레이어 이동 구현하기

flyon 2025. 1. 5.

1. 플레이어 이동 스크립트 생성

  • Rigidbody와 AddForce 사용
    • AddForce로 물리 기반 이동을 구현. 키 입력에 따라 힘을 가해 이동.
    • 코드에서 rigid.AddForce(Vector2.right * move, ForceMode2D.Impulse); 부분에서 힘을 가하여 플레이어를 이동시킴.
  • 기본 이동 문제점
    • AddForce를 사용하면 가속도가 증가하는 문제가 발생할 수 있음. 이를 해결하기 위해 속도 제한을 설정.
    • rigid.linearVelocity로 속도를 직접 제어하여 문제 해결.

2. 속도 제한 및 최대 속도 설정

  • 속도 제한 논리
    • maxspeed를 설정하여 속도가 초과하지 않도록 제한.
    • 코드에서는 rigid.linearVelocity = new Vector2(maxspeed, rigid.linearVelocity.y); 로 최대 속도를 제한함.
    • 반대방향도 처리하여 rigid.linearVelocity.x < maxspeed * (-1)으로 속도를 제한.

3. 좌우 방향 이동 및 속도 감소 처리

  • 이동 방향 구현
    • Input.GetAxisRaw("Horizontal")로 좌우 이동 처리.
    • rigid.AddForce(Vector2.right * move, ForceMode2D.Impulse); 로 물리 기반 이동.
  • 속도 감소 처리
    • Input.GetButtonUp("Horizontal")을 사용하여 키를 뗐을 때 속도를 서서히 감소시킴.
    • rigid.linearVelocity = new Vector2(rigid.linearVelocity.normalized.x * 0.5f, rigid.linearVelocity.y);로 서서히 속도를 줄여줌.

4. 키 입력 처리의 세분화

  • FixedUpdate와 Update 사용 차이
    • Update: 키 입력 처리. 입력을 받으면 rigid.AddForce()로 이동을 처리.
    • FixedUpdate: 물리적 이동 처리. AddForce로 이동을 처리하지만 물리적 계산을 위한 최적화가 필요.

5. 이동 방향 벡터의 노멀화

  • Normalize 활용
    • rigid.linearVelocity.normalized.x를 사용하여 이동 방향을 정규화.
    • linearVelocity로 속도를 설정할 때 방향 벡터의 크기가 1로 맞춰서 일정하게 속도를 유지.

6. 스프라이트 방향 전환

  • SpriteRenderer의 FlipX
    • Input.GetAxisRaw("Horizontal")을 이용하여 좌우 방향에 맞게 spriteRenderer.flipX로 스프라이트를 반전
spriterenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;

 

7. 애니메이션 연결 및 상태 전환

  • Animator 사용
    • anim.SetBool("isWalking", true)와 anim.SetBool("isWalking", false)로 isWalking 상태에 따라 애니메이션 전환.
    • 속도가 0일 때는 Idle 애니메이션, 일정 속도 이상일 때는 Walk 애니메이션을 실행
if (Mathf.Abs(rigid.linearVelocity.x) < 0.3f) anim.SetBool("isWalking", false); else anim.SetBool("isWalking", true);

추가적으로 알아두면 좋은 점

  • 속도 감소 처리
    • 키를 떼었을 때 서서히 감속하는 방법을 linearVelocity를 조정하는 방식으로 처리.
  • 애니메이션 전환
    • isWalking 값을 통해 애니메이션 상태를 전환.
    • linearVelocity.x를 통해 이동 중인지 아닌지를 판별.
profile
작심삼일을 무한으로 반복하는 지식세포 키우기
✏️ ⚙️