정명직의 게임개발

[Unity] 오브젝트를 움직여 보자! 본문

Unity

[Unity] 오브젝트를 움직여 보자!

정명직 2023. 7. 5. 23:53

오브젝트를 이동 시키는 것은 게임에서 가장 중요한 요소 중에 하나 입니다.
유니티에서는 상황에 맞게 여러가지 방법을 통해 오브젝트를 이동 시킬 수 있습니다. 이제 간단한 방법들을 살펴보겠습니다.

Transform

private void Update()
{
    // 오브젝트를 상대적으로 이동시키기
    transform.Translate(Vector3.right * Time.deltaTime);
}

Transform.Translate 함수는 현재 게임오브젝트의 위치를 기준으로 상대적인 Vector3의 방향으로 이동합니다.

장점

  • 사용이 간단하며, 기본적인 이동을 요구하는 간단한 게임에 적합합니다.
  • 추가적인 컴포넌트나 스크립트가 필요하지 않습니다.

단점

  • 충돌 감지와 관련해서 문제를 일으킬 수 있습니다.

Rigidbody

private void Start()
{
    // 이동할 오브젝트의 Rigidbody 컴포넌트 가져오기
    Rigidbody rigid = gameObject.GetComponent<Rigidbody>();

    // 이동할 방향 설정
    Vector3 dir = new Vector3(1f, 0f, 0f);

    // 힘을 가해 오브젝트 이동
    rigid.AddForce(dir);
}

Rigidbody.AddForce 함수는 오브젝트에 힘을 가해 이동시킵니다.

장점

  • 이 방법은 물리 기반 이동을 요구하는 게임에 적합하며, 현실적인 움직임과 충돌 감지가 가능합니다.

단점

  • 물리 시뮬레이션에 의존하기 때문에 다른 물체와 상호작용할 때 예측하기 어려운 동작을 보일 수 있습니다.

CharacterController

CharacterController characterController;

private void Start()
{
    // 이동할 오브젝트의 CharacterController 컴포넌트 가져오기
    CharacterController characterController = GetComponent<CharacterController>();
}

private void Update()
{
    // 이동할 방향 설정
    Vector3 dir = new Vector3(1f, 0f, 0f);

    // 캐릭터 이동
    characterController.Move(dir * Time.deltaTime);
}

CharacterController.Move 함수는 주어진 방향으로 오브젝트를 이동시킨다.

장점

  • 정확한 충돌 감지가 가능하며, 정밀한 이동이 필요한 게임에 적합합니다. 예를 들어 FPS나 액션 게임 등에서 많이 사용됩니다.

단점

  • CharacterController을 사용하면 Rigidbody를 사용할 수 없으므로, 중력효과의 연출을 위해서 별도의 처리과정이 필요하게 됩니다.

NavMeshAgent

private NavMeshAgent navMeshAgent;

private void Start()
{
    // NavMeshAgent 컴포넌트 가져오기
    navMeshAgent = GetComponent<NavMeshAgent>();
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        // 마우스 클릭한 위치로 Ray 생성
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            // 클릭한 위치로 이동 목적지 설정
            navMeshAgent.SetDestination(hit.point);
        }
    }
}

NevMeshAgent.SetDestination 함수는 NavMesh 상에서 이동 목적지를 설정하는 역할을 합니다. 이 함수를 사용하여 오브젝트가 원하는 위치로 이동하도록 지시할 수 있습니다.

장점

  • 방법은 AI와 관련된 게임에서 쉽게 사용할 수 있으며, 경로 탐색과 이동을 자동으로 처리하기 때문에 코딩이 쉽다.

단점

  • 메서드를 호출하는시점에 이동 경로를 계산하기 때문에, 경로 계산에 시간이 걸릴 수 있습니다.
  • 자동으로 경로를 계산하기 때문에, 특정 상황에서는 세밀한 제어가 어려울 수 있습니다.

이 중에서 프로젝트의 요구사항과 상황에 맞는 방법을 선택하여 오브젝트를 이동시키면 됩니다.

오브젝트 이동 방법에는 더 많은 기능과 세부 옵션이 있으니, 관심 있는 내용을 더 탐구하시길 권장합니다.