본문 바로가기

Unity3d

Unity에서 AI 적 캐릭터 구현하기

안녕하세요! 오늘은 Unity에서 AI(Artificial Intelligence)를 이용해 적 캐릭터를 구현하는 방법에 대해 알아보겠습니다. Unity는 NavMesh와 같은 도구를 이용해 상당히 쉽게 적 캐릭터의 이동 경로를 지정하고, 기본적인 인공지능을 구현할 수 있게 도와줍니다.

1. NavMesh의 이해와 적용

NavMesh(Navigation Mesh)는 Unity에서 제공하는 AI의 기본적인 경로 탐색 시스템입니다. 기본적으로 3D 공간에서 어느 위치로 이동해야 하는지, 어떤 경로를 따라야 하는지를 알려주는 역할을 합니다.

 

먼저 NavMesh를 적용하기 위해서는 환경의 네비게이션 메시를 빌드해야 합니다. Unity의 네비게이션 시스템은 매핑할 수 있는 물리적인 표면을 감지하여 AI 캐릭터가 이동할 수 있는 경로를 생성합니다.

 

  1. 먼저 상단 메뉴의 'Window > AI > Navigation'을 선택해 Navigation 창을 열어줍니다.
  2. 'Bake' 탭에서 'Bake' 버튼을 클릭하여 네비게이션 메시를 빌드합니다. 이 단계에서 네비게이션 메시의 특성을 설정할 수 있습니다.

이렇게 네비게이션 메시를 설정하고 빌드한 후에는, 적 캐릭터에 NavMesh Agent 컴포넌트를 추가하여 이용할 수 있습니다.

2. 적 캐릭터에 NavMesh Agent 추가하기

적 캐릭터에 NavMesh Agent를 추가하려면, 먼저 적 캐릭터 오브젝트를 선택하고 인스펙터 창에서 'Add Component > Navigation > NavMesh Agent'를 선택하여 추가합니다.

 

NavMesh Agent 컴포넌트는 캐릭터의 이동 속도, 회전 속도, 충돌 반경 등의 설정을 할 수 있게 해줍니다. 이 설정들을 적절히 조절하면 적 캐릭터의 이동 행동을 다양하게 구현할 수 있습니다.

3. 스크립트를 이용한 적 캐릭터의 목표 지점 설정

적 캐릭터의 이동을 제어하려면, 목표 지점을 설정해주어야 합니다. 이 목표 지점은 스크립트에서 NavMeshAgent.destination 속성을 통해 설정할 수 있습니다.

 

다음은 플레이어의 위치를 적 캐릭터의 목표 지점으로 설정하는 예제 스크립트입니다.

 

using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
    public Transform player;  // 플레이어의 위치
    private NavMeshAgent agent;  // NavMeshAgent 컴포넌트

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

    void Update()
    {
        agent.destination = player.position;  // 목표 지점 설정
    }
}

 

이 스크립트를 적 캐릭터에 붙이면, 적 캐릭터는 플레이어를 계속 추적하게 됩니다. 이렇게 간단히 적 캐릭터의 이동을 제어할 수 있습니다.

4. 적 캐릭터의 행동 패턴 구현하기

적 캐릭터에 좀 더 다양한 행동을 추가하려면, 상태 기계(State Machine) 패턴을 이용할 수 있습니다. 상태 기계는 캐릭터가 현재 어떤 상태에 있는지를 나타내고, 그 상태에 따라 캐릭터의 행동을 결정합니다.

예를 들어, 적 캐릭터가 플레이어를 발견하면 추적 상태로 전환하고, 일정 거리 이내로 접근하면 공격 상태로 전환하는 등의 행동을 구현할 수 있습니다.

 

이러한 상태 기계 패턴을 구현하기 위해서는, 먼저 각 상태를 나타내는 클래스를 정의해야 합니다. 각 상태 클래스는 상태에 진입할 때, 상태를 유지하는 동안, 상태에서 빠져나올 때의 행동을 정의합니다. 또한 상태 전환 조건을 검사하여 적절한 시점에 상태를 전환하는 역할도 합니다.

 

이후에는 각 상태 객체를 이용하여 캐릭터의 행동을 제어하게 됩니다. 이 방법은 코드의 구조를 체계적으로 관리할 수 있게 해주며, 캐릭터의 행동을 유연하게 추가하거나 수정할 수 있게 해줍니다.

마치며

이렇게 Unity를 이용하면, 간단한 추적 AI부터 복잡한 행동 패턴을 가진 AI까지 다양하게 구현할 수 있습니다. NavMesh와 상태 기계 패턴을 이용하여, 게임에 적 캐릭터를 추가해보세요!

 

다음 포스팅에서는 적 캐릭터의 공격 패턴과 피해 반응을 구현하는 방법에 대해 알아보겠습니다. 기대해주세요!