본문 바로가기

Unreal

Unreal Engine에서 NPC 상호작용 시스템 개발

플레이어의 몰입감과 게임 플레이 경험을 향상시키는 중요한 게임 개발 요소 중 하나는 매력적인 비플레이어 캐릭터(NPC) 상호작용 시스템을 만드는 것입니다. 강력한 도구와 기능 세트를 제공하는 Unreal Engine은 상호작용하는 NPC를 구축하기 위한 훌륭한 플랫폼을 제공합니다. 이 블로그 포스트는 Unreal Engine을 사용하여 NPC 상호작용 시스템을 만드는 단계를 안내하며, Blueprints와 C++를 사용한 구현에 초점을 맞춥니다.

NPC 상호작용 시스템 개요

Unreal Engine에서의 NPC 상호작용 시스템은 일반적으로 다음 구성 요소를 포함합니다:

  • NPC 캐릭터: 플레이어가 상호작용할 수 있는 캐릭터입니다.
  • 대화 시스템: 플레이어와 NPC 간의 대화를 관리하는 시스템입니다.
  • 상호작용 트리거: NPC에 접근하거나 키를 누르는 등 상호작용을 시작하는 메커니즘입니다.
  • UI 요소: 대화 및 상호작용 옵션을 표시하는 시각적 요소입니다.

단계 1: NPC 캐릭터 설정

먼저 게임에 NPC 캐릭터가 필요합니다. 이것은 간단한 스켈레탈 메쉬와 기본 애니메이션을 가진 캐릭터일 수 있습니다. 다음은 Unreal Engine을 사용하여 기본 NPC를 설정하는 방법입니다.

// NPCCharacter.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "NPCCharacter.generated.h"

UCLASS()
class YOURGAME_API ANPCCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    ANPCCharacter();

    UFUNCTION(BlueprintCallable, Category = "Interaction")
    void Interact();
};

// NPCCharacter.cpp
#include "NPCCharacter.h"

ANPCCharacter::ANPCCharacter()
{
    // Constructor logic here
}

void ANPCCharacter::Interact()
{
    // Interaction initiation logic, e.g., start dialogue
}

이 코드 스니펫은 Interact 함수를 호출하여 상호작용을 시작할 수 있는 기본 NPC 캐릭터 클래스를 정의합니다.

단계 2: 대화 시스템 생성

대화 시스템의 경우, 대화를 데이터 구조에 저장하고 대화 관리자 클래스를 통해 관리할 수 있습니다. 다음은 C++를 사용하여 간단한 대화 시스템을 만드는 예제입니다.

// DialogueManager.h
#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "DialogueManager.generated.h"

UCLASS()
class YOURGAME_API UDialogueManager : public UObject
{
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue")
    TArray<FString> Dialogues;

    int32 CurrentDialogueIndex;

    UDialogueManager();

    FString GetNextDialogue();
};

// DialogueManager.cpp
#include "DialogueManager.h"

UDialogueManager::UDialogueManager() : CurrentDialogueIndex(0)
{
    // Initialize dialogues here
}

FString UDialogueManager::GetNextDialogue()
{
    if (CurrentDialogueIndex < Dialogues.Num())
    {
        return Dialogues[CurrentDialogueIndex++];
    }
    return TEXT("");
}

이 시스템은 대화를 저장하기 위해 간단한 배열을 사용하고 순서대로 다음 대화를 가져오는 기능을 제공합니다.

단계 3: 상호작용 트리거 구현

Unreal Engine에서는 트리거를 사용하여 상호작용을

시작할 수 있습니다. 이것은 플레이어가 입력할 때 대화를 트리거하는 충돌 상자일 수 있습니다.

// Add this to NPCCharacter.cpp

void ANPCCharacter::BeginPlay()
{
    Super::BeginPlay();

    // Setup interaction trigger
    UBoxComponent* InteractionTrigger = CreateDefaultSubobject<UBoxComponent>(TEXT("InteractionTrigger"));
    InteractionTrigger->SetCollisionProfileName("Trigger");
    InteractionTrigger->OnComponentBeginOverlap.AddDynamic(this, &ANPCCharacter::OnTriggerEnter);
    RootComponent = InteractionTrigger;
}

void ANPCCharacter::OnTriggerEnter(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, the FHitResult &SweepResult)
{
    // Check if the OtherActor is the player
    if (APlayerCharacter* Player = Cast<APlayerCharacter>(OtherActor))
    {
        Interact();
    }
}

단계 4: UI 요소 표시

마지막으로, UMG (Unreal Motion Graphics)를 사용하여 대화 텍스트와 상호작용 옵션을 보여주는 UI 요소를 통합합니다. 대화 변경을 듣고 화면을 accordingly 업데이트하는 UI 블루프린트를 만듭니다.

결론

Unreal Engine에서 NPC 상호작용 시스템을 구축하는 것은 캐릭터 설정, 대화 관리, 상호작용 트리거, UI 통합과 같은 여러 구성 요소를 포함합니다. 이러한 요소들을 신중하게 결합함으로써 개발자는 게임 플레이 경험을 크게 향상시키는 복잡하고 매력적인 NPC 상호작용을 만들 수 있습니다. 이 가이드는 기초적인 이해를 제공하지만, 게임의 요구에 따라 깊이와 복잡성을 상당히 확장할 수 있습니다.