Unreal Engine을 사용한 인벤토리 시스템 구현: 코드 중심 가이드

많은 비디오 게임, 특히 RPG와 생존 장르에서 효과적인 인벤토리 시스템을 만드는 것은 필수적인 부분입니다. Unreal Engine에서 인벤토리 시스템을 구현하는 것은 복잡해 보일 수 있지만, 올바른 접근 방식으로는 관리가 가능해집니다. 이 블로그 게시물은 Unreal Engine의 Blueprints와 C++를 사용하여 기본 인벤토리 시스템을 설정하는 과정을 안내하며, 실용적인 예제 코드를 제공합니다.


인벤토리 시스템 이해하기


게임에서의 인벤토리 시스템은 플레이어가 게임 내에서 아이템을 저장, 관리, 사용할 수 있게 해줍니다. 인벤토리 시스템의 기본 구성 요소는 다음과 같습니다:


  • 아이템 데이터베이스: 게임에서 존재할 수 있는 모든 가능한 아이템의 저장소입니다.
  • 인벤토리 슬롯: 플레이어의 인벤토리 내 아이템이 저장되는 특정 장소입니다.
  • 아이템 클래스: 이름, 아이콘, 효과와 같은 속성을 포함하는 모든 아이템의 기반 블루프린트입니다.

단계 1: 아이템 클래스 설정


인벤토리에 저장될 수 있는 모든 아이템의 기반 클래스를 생성하는 것이 첫 번째 단계입니다. 이 작업은 유연성과 재사용성을 보장하기 위해 C++을 사용하여 수행됩니다.


// Item.h
#pragma once

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

UCLASS(Blueprintable, Abstract)
class YOURGAME_API UItem : public UObject
{
    GENERATED_BODY()

public:
    UItem();

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Item")
    FString Name;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Item")
    UTexture2D* Icon;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Item")
    FString Description;
};

// Item.cpp
#include "Item.h"

UItem::UItem()
{
    Name = TEXT("Unknown Item");
    Description = TEXT("No Description");
    Icon = nullptr;
}

이 코드 스니펫은 UItem이라는 추상 클래스를 생성합니다. 이 클래스는 무기, 포션 등 특정 아이템 유형에 의해 확장될 수 있으며, Name, Icon, Description과 같은 속성을 포함합니다.


단계 2: 인벤토리 컴포넌트 생성


다음으로, 플레이어나 다른 게임 엔티티에 첨부할 수 있는 인벤토리 컴포넌트를 생성합니다.


// InventoryComponent.h
#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "Item.h"
#include "InventoryComponent.generated.h"

UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class YOURGAME_API UInventoryComponent : public UActorComponent
{
    GENERATED_BODY()

public:    
    // 인벤토리가 수용할 수 있는 최대 아이템 수 정의
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Inventory")
    int32 Capacity;

    // 인벤토리에 현재 있는 아이템 목록
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Inventory")
    TArray<UItem*> Items;

    // 인벤토리에 아이템을 추가하는 함수
    bool AddItem(UItem* Item);
};

// InventoryComponent.cpp
#include

 "InventoryComponent.h"

bool UInventoryComponent::AddItem(UItem* Item)
{
    if(Items.Num() < Capacity)
    {
        Items.Add(Item);
        return true;
    }
    return false;
}

이 컴포넌트는 UItem 포인터의 배열을 관리하며, 충분한 용량이 있는지 확인하면서 아이템을 인벤토리에 추가하는 AddItem 메서드를 제공합니다.


단계 3: Blueprints와 통합하기


Unreal Engine의 진정한 힘은 C++와 Blueprints의 통합에서 나타납니다. InventoryComponent를 Blueprints에 노출시켜 레벨 디자이너 및 기타 팀 구성원이 추가 C++ 코드를 작성하지 않고도 상호 작용을 스크립팅할 수 있게 합니다.


  1. Blueprint 버전 생성: UItemUInventoryComponent에서 파생된 Blueprint 클래스를 생성하여 쉽게 사용자 정의하고 확장할 수 있습니다.
  2. UI 설정: UMG (Unreal Motion Graphics)에서 플레이어에게 인벤토리 슬롯 및 아이템 세부 정보를 표시할 수 있는 UI 시스템을 개발합니다.

결론


Unreal Engine에서 인벤토리 시스템을 구현하는 것은 아이템 클래스 생성, 인벤토리 컴포넌트 생성 및 Blueprints를 사용한 통합을 포함합니다. 이 설정은 특정 아이템 동작 추가나 UI를 애니메이션과 피드백으로 향상시키는 등 추가적인 사용자 정의를 위한 견고한 기반이 됩니다. 게임의 기능을 확장함에 따라 새로운 아이템 유형 및 상호 작용을 수용할 수 있도록 인벤토리 시스템을 계속해서 반복 개선하면서 플레이어에게 원활한 경험을 보장하세요.

다음 이전