본문 바로가기
Unity

[Unity] 2D 플레이어 조작법 및 주의사항

by leejiwoo21 2026. 2. 3.

1. transform.Translate()

public float speed = 10f;

void Update(){

    horizontalInput = Input.GetAxisRaw("Horizontal");
    verticalInput = Input.GetAxisRaw("Vertical");

	Vector3 move = new Vector3(horizontalInput, 0, verticalInput);
    transform.Translate(move * speed * Time.deltaTime);

}

 

Translate는 물리엔진을 거치지 않고 로컬좌표를 기준으로 순간이동하는 것입니다.

물체와 충돌인식이 불완전하고, Update문에서 이루어져야합니다.

 

 

2. RigidBody.AddForce()

public float speed = 10f;
private Rigidbody playerRb;

// 권장하는 방법
void Update(){

    horizontalInput = Input.GetAxisRaw("Horizontal");
    verticalInput = Input.GetAxisRaw("Vertical");

    Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput).normalized;
    playerRb.AddForce(moveDirection * speed, ForceMode.Impulse);
}

// 권장하지 않는 방법
void Update(){

    horizontalInput = Input.GetAxisRaw("Horizontal");
    verticalInput = Input.GetAxisRaw("Vertical");

	playerRb.AddForce(Vector3.right * speed * horizontalInput, ForceMode.Impulse);
    playerRb.AddForce(Vector3.forward * speed * verticalInput, ForceMode.Impulse);

}

AddForce는 지정한 방향으로 힘을 가해 이동하는 것으로, 무게, 마찰, 힘을 적절하게 결정해야합니다.

충돌을 완전하게 인식하며 FixedUpdate문에 작성해야합니다.

 

* 2D인경우 권장하지 않는 방법이나 Y축을 고정하지 않을 경우 충돌하여 Y축으로 이동이 생길 수 있으니, Y축까지 명시하는 것이 좋다.

 

 

3. Rigidbody.MovePosition

public float speed = 10f;
private Rigidbody playerRb;

void FixedUpdate(){

    horizontalInput = Input.GetAxisRaw("Horizontal");
    verticalInput = Input.GetAxisRaw("Vertical");

    Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput).normalized;
    playerRb.MovePosition(playerRb.position + moveDirection * speed * Time.fixedDeltaTime);
    
}

 

MovePosition은 다음 물리 프레임에 이 위치로 이동한다는 것입니다. 

충돌을 안정적으로 인식하며 FixedUpdate문에 작성해야합니다.

반응형

'Unity' 카테고리의 다른 글

[Unity] Unity에서 AI 활용하기, MCP for Unity  (0) 2026.02.07
[Unity] 버전 6.3 LTS 업데이트  (0) 2026.02.05
[게임 개발] 증강 테트리스  (0) 2026.01.27
[Unity] Unity learn Local multiplay  (0) 2026.01.26
[Unity] Script 사용법  (0) 2026.01.24

댓글