본문 바로가기

Unity3d

유니티에서 물리 기반 캐릭터 이동 구현하기

오늘의 포스팅에서는 유니티에서 물리 기반 캐릭터 이동을 구현하는 방법에 대해 알아보겠습니다. 유니티의 Rigidbody 컴포넌트와 C# 스크립트를 사용하여 캐릭터에 물리적인 힘을 가해 이동시키는 방법을 설명하겠습니다.

 

  1. 먼저 유니티 프로젝트를 생성하고, 필요한 게임 오브젝트와 캐릭터 모델을 씬에 배치합니다.
  2. 캐릭터 모델에 Rigidbody 컴포넌트를 추가합니다. Rigidbody 컴포넌트를 추가하면, 캐릭터에 물리적인 힘을 가할 수 있게 됩니다. Rigidbody의 Mass, Drag, Angular Drag 등의 속성을 적절한 값으로 설정합니다.
  3. 캐릭터 이동을 제어할 C# 스크립트를 작성합니다. 스크립트에서는 입력을 받아 캐릭터에 힘을 가하는 로직을 구현합니다. 다음은 기본적인 캐릭터 이동 스크립트 예제입니다.
using UnityEngine;

public class CharacterController : MonoBehaviour
{
    public float speed = 5.0f;
    private Rigidbody rb;

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

    void Update()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0, moveVertical);
        rb.AddForce(movement * speed);
    }
}

 

  1. 작성한 스크립트를 캐릭터 게임 오브젝트에 붙여넣습니다.
  2. 키보드 입력에 따라 캐릭터가 움직이는지 확인합니다. 프로젝트를 실행하여 키보드의 화살표 키나 WASD 키를 사용하여 캐릭터를 움직여 봅니다.
  3. 필요에 따라 카메라의 위치와 각도를 조정하여 캐릭터가 움직일 때 적절한 시점에서 보이도록 합니다

이상으로 유니티에서 물리 기반 캐릭터 이동 구현 방법에 대해 알아보았습니다. Rigidbody를 활용하면 더욱 다양한 물리적 효과를 캐릭터에 적용할 수 있습니다. 앞으로의 포스팅에서는 이와 관련된 다양한 주제를 다루도록 하겠습니다.

추가로 고려할 수 있는 물리 기반 캐릭터 이동 구현 관련 주제들은 다음과 같습니다.

 

  1. 점프 구현하기: 캐릭터가 점프하는 기능을 추가하려면, 점프 버튼 입력 시 캐릭터에게 수직 방향으로 힘을 가해주면 됩니다. 이 때, 캐릭터가 바닥에 닿아 있는지 확인하는 로직을 추가하여 공중에서 점프가 반복되지 않도록 해야 합니다.
  2. 경사로 처리: 캐릭터가 경사로를 올라갈 수 있도록 처리하려면, 캐릭터의 이동 벡터를 계산할 때 경사로의 각도에 따라 수정해야 합니다. 이를 위해 Raycast를 사용하여 캐릭터의 위치에서 아래 방향으로 레이를 발사하여 땅과의 거리와 노멀 벡터를 얻을 수 있습니다.
  3. 마찰력 및 미끄럼 처리: 캐릭터가 미끄러운 물체 위에서 움직일 때 마찰력을 줄여주는 것이 필요합니다. 이를 위해 물리 소재(Physic Material)를 사용하여 캐릭터와 물체 간의 마찰력을 조절할 수 있습니다.
  4. 충돌 처리 및 데미지 시스템: 캐릭터가 다른 물체와 충돌했을 때 데미지를 입히거나 받는 시스템을 구현할 수 있습니다. 이를 위해 OnCollisionEnter, OnCollisionExit, OnTriggerEnter, OnTriggerExit와 같은 이벤트를 사용하여 충돌 및 트리거 이벤트를 처리할 수 있습니다.

 

이러한 주제들을 차례대로 다루면서, 유니티에서 물리 기반 캐릭터 이동 구현에 대한 지식을 확장해 나가겠습니다. 다음 포스팅에서 더 자세한 내용을 기대해 주세요!