[Unity] 입력 처리를 기반으로한 오브젝트 이동

김나정·2024년 8월 5일

오브젝트 이동

transform 변수의 의미

  • 모든 GameObject는 transform을 가짐
  • Why?: GameObject가 생성될 때 Transform컴포넌트가 자동으로 추가됨

Transform 컴포넌트

  • Transform 컴포넌트는 오브젝트의 공간적 정보를 관리
    - 위치(position), 회전(rotation), 크기(scale)
    • 다른 컴포넌트들이 이 정보를 사용하여 오브젝트를 조작할 수 있게됨

.Translate(Vector3)

  • 오브젝트를 이동시키는 간단한 메서드
  • 이 메서드는 Vector3 타입의 인자를 받아, 오브젝트를 해당 벡터 크기만큼 이동시킴
  • EX) transform.Translate(new Vector3(1, 0, 0))은 오브젝트를 x축 방향으로 1만큼 이동

이동 메서드를 처리하는 생명주기에 따라 다른 효과

  • Start(): 오브젝트가 즉시 해당 벡터 위치만큼 이동
  • Update(): 오브젝트가 점진적으로 이동하며, 입력에 따라 이동 방향과 속도가 실시간으로 변경됨

Time.deltaTime

  • 의미: 이전 프레임과 현재 프레임 사이의 시간 간격(초)

  • Update() 메서드는 매 프레임마다 호출됩니다. 따라서 프레임률(프레임 속도)이 높거나 낮을 때마다 Update() 메서드가 호출되는 빈도가 달라질 수 있음

  • 따라서 만약 Time.deltaTime을 사용하지 않고 이동 속도를 설정하면, 프레임률이 높을 때 오브젝트는 더 빠르게 이동하고, 프레임률이 낮을 때는 더 느리게 이동할 수 있음

  • Update() 메서드 안에 이동 코드를 작성하면, 오브젝트는 프레임마다 점차적으로 이동하게 되는데, 벡터값에 Time.deltaTime을 곱하면 이동 속도가 프레임 수에 관계없이 일정하게 유지됨


입력 처리를 활용한 오브젝트 이동

인자가 되는 벡터값에 입력값이 들어가도록 코드를 작성하면됨!

Input.GetAxis("버튼 이름") / GetAxisRaw("")

using UnityEngine;

public class MoveObject : MonoBehaviour
{
    void Update()
    {
        // 키보드 입력을 받아 오브젝트를 이동
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        // 이동 벡터 계산
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Transform 컴포넌트를 사용하여 오브젝트를 이동
        transform.Translate(movement * Time.deltaTime);
    }
}
profile
molbwa

0개의 댓글