내일배움캠프 18일차 TIL C# 미니프로젝트 플레이어이동

2025. 7. 23. 21:31내일배움캠프Unity_13기(스파르타코딩클럽)

728x90

 

using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]
public class PlayerMovement : MonoBehaviour
{
    [Header("플레이어 이동")]
    public float moveSpeed = 3f;

    private Rigidbody2D rb;
    private Vector2 moveInput;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        
        moveInput.x = Input.GetAxisRaw("Horizontal");
        moveInput.y = Input.GetAxisRaw("Vertical");

        
        moveInput = moveInput.normalized;
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + moveInput * moveSpeed * Time.fixedDeltaTime);
    }
}
[RequireComponent(typeof(Rigidbody2D))]

 

  • 이 스크립트가 붙은 게임 오브젝트에 Rigidbody2D가 없으면 Unity가 자동으로 추가함.
  • 안전장치 역할!
public float moveSpeed = 3f;

 

  • 이동 속도를 조절할 수 있는 변수. 유니티 인스펙터에서 조절 가능.
private Rigidbody2D rb;
private Vector2 moveInput;

 

  • rb: Rigidbody2D 참조용
  • moveInput: 이동 방향 입력 저장 (예: 왼쪽이면 (-1, 0))
void Start()
{
    rb = GetComponent<Rigidbody2D>();
}

 

시작 시 Rigidbody2D 컴포넌트를 찾아서 rb에 저장.

 

void Update()
{
    moveInput.x = Input.GetAxisRaw("Horizontal");
    moveInput.y = Input.GetAxisRaw("Vertical");

    moveInput = moveInput.normalized;
}

 

 

  • 키보드 입력을 실시간으로 받음
    • A/D → x축 (-1, 1)
    • W/S → y축 (1, -1)
  • normalized: 대각선 이동 시 속도 과속 방지 (속도를 1로 보정)
void FixedUpdate()
{
    rb.MovePosition(rb.position + moveInput * moveSpeed * Time.fixedDeltaTime);
}

 

 

  • FixedUpdate: 물리 연산 전용 업데이트 함수 (Rigidbody 이동은 여기서 해야 함)
  • MovePosition: Rigidbody를 이동시킬 때 사용하는 방식 (직접 transform.position 수정보다 안전)

구성요소 설명

RequireComponent(typeof(Rigidbody2D)) 이 스크립트가 붙은 오브젝트에 Rigidbody2D가 없으면 자동으로 추가해줌
moveSpeed 플레이어의 이동 속도
rb Rigidbody2D 컴포넌트를 저장할 변수
moveInput 키보드 입력을 저장하는 벡터 (x: 좌우, y: 상하)
Start() 게임 시작 시 Rigidbody2D 컴포넌트를 가져옴
Update() 매 프레임마다 입력을 받아 moveInput에 저장 (정규화 포함)
FixedUpdate() 물리 연산을 통해 Rigidbody2D를 이용해 이동 처리

 

 

항목 설명

입력 처리 Input.GetAxisRaw로 방향 입력을 가져옴
속도 보정 .normalized로 대각선 이동 속도 일관성 유지
물리 이동 Rigidbody2D.MovePosition()으로 부드럽고 충돌 가능한 이동 구현
Time.fixedDeltaTime FixedUpdate()에서 프레임 보정용 시간값 (프레임 수와 상관없이 일정하게 이동하기 위함)