비플레이어 캐릭터(Non-player character, NPC) 비헤이비어는 수많은 게임에서 중요한 역할을 합니다. 동료부터 보스, 상인부터 경비까지, NPC가 주변의 월드와 상호작용하는 방식은 매력적이고 몰입감 있는 게임플레이를 구현해 줍니다. 얼핏 보면 NPC 비헤이비어가 부담스럽게 느껴질 수도 있지만, 실제로 대부분의 NPC는 엄격한 논리적 규칙 세트를 따릅니다. 이러한 규칙을 이해하는 것이 NPC 제작의 핵심으로, 이 페이지에서는 NPC가 월드와 상호작용하는 방식과 NPC 비헤이비어를 시각화 및 조작하여 자신만의 고유한 경험을 제작하는 방법에 대해 알아봅니다.
NPC 생성 장치는 수많은 NPC 및 AI 상호작용을 구현할 수 있게 해 줍니다. 이 장치에 대한 자세한 내용은 NPC 생성 장치, NPC 캐릭터 정의, 커스텀 NPC 비헤이비어 생성하기 페이지, 애니메이션과 함께 NPC 생성 장치 사용하기를 참고하세요.
논리 규칙
대부분의 NPC는 랜덤으로 행동하지 않으며, 상태를 기반으로 다음 액션을 선택합니다. NPC의 상태는 특정 시점에 NPC 월드를 보여주는 스냅샷이라고 이해하면 됩니다. NPC가 취하는 액션, 플레이어가 취하는 액션, NPC가 알 수도 있는 다른 모든 변수가 모두 NPC의 상태를 구성합니다. NPC는 하나의 상태에서 다른 상태로 전환하는 시점을 결정하기 위해 논리적 규칙을 사용하며 현재 상태에 따라 여러 다양한 규칙을 가질 수 있습니다.
유한 스테이트 머신
상태를 시각화하는 일반적인 하나의 방법은 유한 스테이트 머신(Finite-State Machine, FSM)을 사용하는 것입니다. 유한 스테이트 머신은 NPC가 취할 수 있는 다양한 상태와 하나의 상태에서 다른 상태로 넘어가는 전환을 설명합니다. 노드는 다양한 상태를 나타내며 노드 사이의 화살표는 하나의 상태에서 다음 상태로의 전환에 필요한 조건을 설명합니다. 기본 FSM 다이어그램은 다음과 같습니다.
여기의 FSM에는 3개의 상태가 있으며 상태 1에서 시작합니다. 특정 조건이 달성되면 NPC는 하나의 상태에서 다른 상태로 넘어가며 조건이 변하면 계속해서 다른 상태로 넘어갑니다.
예를 들어, 단순한 전투 의무병 캐릭터의 FSM을 생각해 보겠습니다. 부상을 입은 팀원이 근처에 있는 경우 의무병은 팀원을 치유합니다. 적이 근처에 있는 경우 의무병은 적을 공격합니다. 그 외의 경우 유휴 상태를 유지합니다. 이 캐릭터의 기본 FSM은 아마 다음과 같을 것입니다.
FSM은 캐릭터가 작동하는 방식을 시각화하고 이해하도록 도와주며, 캐릭터가 이벤트와 주변 월드에 반응하는 방식을 매핑할 수 있게 해 줍니다.
경비의 예시 유한 스테이트 머신
게임 내 예시로 경비 NPC를 살펴보겠습니다. 경비 NPC는 경비 생성 장치에서 생성되거나 또는 경비 타입 NPC 캐릭터 정의로 생성됩니다. 경비 타입 NPC는 특정한 논리 규칙 세트를 따르며, 다음과 같이 경비가 취할 수 있는 다양한 활성 상태가 이러한 규칙에 해당합니다.
유휴(Idle)
순찰(Patrolling)
의심(Suspicious)
경계(Alert)
공격(Attacking)
경비가 생성되면 경비는 유휴 상태가 되거나 순찰 옵션이 활성화되어 있는 경우 순찰을 시작합니다. 경비가 타깃을 탐지하면 의심 미터가 채워지기 시작합니다. 미터가 채워지면 경비는 경계 단계에 진입하며 채워지지 않을 경우 순찰로 돌아갑니다. 경계 상태일 때 경비는 타깃을 향해 계속 이동하며 범위 내에 들어올 때 공격합니다. 타깃이 처치되거나 경비에게서 달아나는 경우 경비는 다시 순찰로 돌아갑니다. 다음 FSM으로 경비의 로직을 시각화할 수 있습니다.
이 FSM이 경비 비헤이비어를 대략적으로 보여주지만, 경비가 사용하는 규칙과 액션이 더 많이 있을 수 있습니다. NPC는 한 번에 여러 가지 요소를 바탕으로 행동할 수 있으며, 경험에 NPC를 추가할 때는 환경 요인을 고려하는 것이 중요합니다.
NPC 상태 및 Verse
UEFN에서 NPC는 AI 모듈에서 상속받으며 상태를 직접 제어하는 데 사용할 수 있는 함수를 노출합니다. 예를 들어, navigatable 인터페이스는 NPC가 영역으로 이동하도록 해 주는 반면, focus_interface는 캐릭터가 특정 오브젝트 또는 에이전트에 강제로 포커스하도록 해 줍니다. Verse 장치 또는 NPC 비헤이비어에서 이러한 인터페이스를 사용하면 커스텀 NPC를 만들어 경험을 다양하게 채울 수 있습니다.
자신만의 NPC 비헤이비어 생성하기에 대한 자세한 내용은 커스텀 NPC 비헤이비어 생성하기 페이지를 참고하세요.
예를 들어, 다음과 같은 NPC 비헤이비어를 고려해 주세요.
using { /Fortnite.com/AI }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Game }
using { /Verse.org/Simulation }
on_damaged_behavior<public> := class(npc_behavior):
# This function runs when the NPC is spawned in the world and ready to follow a behavior.
OnBegin<override>()<suspends>:void=
if:
모든 NPC에는 피해 받기를 가능하게 하는 damageable 인터페이스가 구현되어 있습니다. 함수로 damageable 인터페이스의 DamagedEvent를 등록하면 NPC가 피해를 받을 경우 알리며, 이에 대한 반응으로 코드를 실행하도록 합니다. 위의 스크립트에서 이 비헤이비어를 구현한 NPC가 피해를 받을 경우 피해를 준 에이전트를 가져와 변수 InstigatingAgent에 저장합니다. 그런 다음 NPC의 navigatable 인터페이스를 사용하여 인스티게이터를 NavigationTarget으로 설정하여 추적합니다.
이러한 비헤이비어는 NPC의 원래 비헤이비어에서 확장된 것입니다. 이 스크립트가 경비 타입 캐릭터에 연결되어 있는 경우 캐릭터는 계속해서 일반적인 모든 경비 비헤이비어를 수행하지만 피해를 받을 경우 바로 타깃을 향해 이동합니다. 이는 야생동물 및 커스텀 타입 캐릭터에도 동일하게 적용됩니다. NPC 비헤이비어 스크립트는 NPC 기능을 확장하는 강력한 도구로, 게임 경험에 맞는 자신만의 커스텀 NPC를 제작할 수 있게 해 줍니다. 자신만의 커스텀 NPC 비헤이비어 스크립트 생성하기에 대한 자세한 내용은 커스텀 NPC 비헤이비어 생성하기를 참고하세요.
NPC 타입
다양한 타입의 NPC마다 서로 다른 베이스 비헤이비어를 구현할 수 있으며 해당 NPC 타입에서 생성하는 커스텀 NPC는 이러한 비헤이비어를 상속합니다. 서로 다른 타입의 NPC와 연결된 비헤이비어에 대한 자세한 내용은 NPC 타입을 참고하세요.
월드 내에서 탐색하기
월드를 탐색할 때 NPC는 목적지에 도달하기 위한 최상의 경로를 선택해야 합니다. 경비가 벽을 넘어가야 할지, 벽을 뚫고 통과해야 할지 물을 수영해서 통과해야 할지, 우회해야 할지 등이 이에 해당합니다. NPC는 월드의 내비게이션 메시를 기반으로 결정을 내립니다. NPC는 내비게이션 메시를 사용하여 경로 찾기 결정을 내리고 주변의 월드가 업데이트됨에 따라 선택을 업데이트합니다. 내비게이션 메시 사용 및 시각화에 대한 자세한 내용은 내비게이션 메시 페이지를 참고하세요.