이 기능은 실험단계이므로, 사용해 보면서 피드백을 에픽에 전달하고 에픽에서 구상 중인 부분도 살펴보세요. 현재 커스텀 인벤토리 및 아이템을 사용하는 프로젝트는 퍼블리싱할 수 없습니다.
실험단계에서 생성된 에셋은 이전 버전과의 호환성이 보장되지 않는다는 점에 유의하세요. 실험단계 기능의 API는 변경될 수 있으며, 에픽게임즈의 재량에 따라 전체 실험단계 기능 또는 특정 기능이 제거될 수도 있습니다. 이 기능으로 작업을 시작하기 전에 알려진 문제 목록을 확인해 보세요.
아이템과 인벤토리 시스템은 다양한 종류의 게임에서 중요한 역할을 합니다. 씬 그래프의 엔티티와 컴포넌트를 사용하면 포트나이트의 플레이어 인벤토리를 커스터마이징하고 섬에만 있는 고유한 커스텀 아이템을 만들 수 있습니다.
아이템은 플레이어와 에이전트가 사용하고 소유할 수 있는 섬의 오브젝트입니다. 인벤토리에는 기존 포트나이트 플레이어 인벤토리는 물론, inventory_component를 사용하여 만든 커스텀 인벤토리도 포함됩니다. 커스텀 인벤토리 및 아이템은 아이템 제작, 관리, 보관을 위한 시스템입니다. 이 시스템은 프로젝트 세팅에서 활성화해야 하는 실험단계 기능으로, UEFN과 Verse에서 씬 그래프와 함께 사용할 수 있습니다.
씬 그래프 기본 사항
씬 그래프는 Verse를 기반으로 구축된 엔티티 및 컴포넌트 시스템입니다. 엔티티는 컴포넌트의 컨테이너이며 컴포넌트는 엔티티에 기능을 부여합니다. 부모-자손 관계로 엔티티를 서로 연결하면 계층구조가 만들어집니다. 엔티티와 컴포넌트의 재사용 가능한 배열을 프리팹이라고 합니다. 엔티티와 컴포넌트 사용에 대한 자세한 내용은 엔티티 및 컴포넌트 작업하기를 참고하세요. 씬 그래프의 프리팹에 대한 자세한 내용은 프리팹 및 프리팹 인스턴스를 참고하세요.
알려진 문제
커스텀 인벤토리와 아이템은 UEFN에서 씬 그래프를 활용하는 첫 시스템입니다. 이로 인하여, 해당 시스템 사용 시 실험단계 출시에서 여러 버그가 발생할 수 있습니다. 여기에서 알려진 문제 목록을 확인하세요. 팀에서 다수의 해결책 및 개선을 작업 중이며, 이는 추후 게임 업데이트에 포함될 것입니다.
아이템
아이템은 item_component가 있는 씬 그래프 내의 엔티티입니다. 기본적으로 아이템은 병합 및 중첩이 가능하며, 비교와 분류를 위한 카테고리가 있으며, 장착 및 장착 해제가 가능합니다.
커스텀 인벤토리 및 아이템 시스템은 씬 그래프를 사용하므로, 기능 향상을 위해 아이템에 컴포넌트를 추가할 수 있습니다. 시스템에는 시작을 위해 몇 가지 기본 컴포넌트가 있으며, 이는 아래 표에 나와 있습니다.
| 컴포넌트 | 설명 |
|---|---|
| 이 컴포넌트는 엔티티를 아이템으로 만듭니다. 또한 엔티티가 중첩될 수 있게 하고, 인벤토리로 소유하고 관리할 수 있게 합니다. |
| 포트나이트 UI에 표시되는 아이템의 아이콘을 저장합니다. |
| 여기에는 아이템의 이름과 설명과 같은 텍스트 데이터가 포함되어 있습니다. |
| 게임에서 아이템을 표현해 주는 메시 에셋을 저장합니다. |
| 이 컴포넌트는 아이템이 포트나이트 아이템 픽업과 동일하게 취급될 수 있게 합니다. 여기에는 아이템을 줍기 위한 상호작용 프롬프트, UI, 픽업/드롭 애니메이션이 포함됩니다. |
아이템은 각 유형의 컴포넌트를 하나만 가질 수 있는데, 아이템에 이미 어태치되어 있는 다른 컴포넌트로부터 상속된 컴포넌트도 마찬가지입니다.
예를 들어, item_component의 자손인 특정 아이템에 대해 커스텀 컴포넌트를 만들 경우, 일반 아이템 컴포넌트 대신 커스텀 아이템 컴포넌트가 표시됩니다.
아이템 모듈식 활용
커스텀 인벤토리와 아이템을 사용하면 적절한 모듈형을 더할 수 있습니다. 즉, 컴포넌트를 사용하여 아이템 기능을 추가로 만들 수 있습니다. 아래에 기능을 부여하는 아이템 엔티티에 연결된 컴포넌트의 예가 나와 있습니다.
엔티티
item_component: 엔티티를 아이템으로 만듭니다.item_details_component: 아이템의 이름과 설명과 같은 텍스트 데이터를 저장합니다.item_icon_component: 포트나이트 UI에 표시되는 아이템의 아이콘을 저장합니다.mesh_component: 게임에서 아이템을 표현해 주는 메시 에셋을 저장합니다.
인벤토리
인벤토리는 inventory_component를 가지는 엔티티입니다.
인벤토리는 아이템 엔티티를 보관하는 컨테이너로, 인벤토리는 이러한 아이템에 일어나는 일을 제어합니다.
커스텀 인벤토리와 아이템 시스템은 인벤토리와 서브 인벤토리를 사용해 아이템을 구분합니다. 이를 통해 아이템을 보다 쉽게 정리하고, 인벤토리 내에서 아이템을 추가하고 가져올 수 있습니다. 아이템은 한 번에 하나의 인벤토리 내에서만 존재할 수 있으므로, 인벤토리는 아이템 엔티티의 소유권도 결정합니다.
기본적으로 인벤토리에는 종류와 무관하게 무한한 수의 아이템을 보관할 수 있습니다. 단, 어떤 아이템을 추가할 수 있는지 제한과 규칙을 생성할 수 있습니다. 이러한 제한 및 규칙의 몇 가지 예시는 다음과 같습니다.
필수 유형 쿼리를 충족하는 경우에만 인벤토리에 아이템을 추가합니다.
인벤토리 내 아이템 개수를 제한합니다.
인벤토리가 가득 차면 우선순위가 높은 아이템이 우선순위가 낮은 아이템을 내보낼 수 있도록 허용합니다.
인벤토리를 단일 아이템으로 제한합니다.
AddItem() 함수가 대상 인벤토리를 해석할 수 없는 경우 아이템을 보관할 수 있는 다른 인벤토리를 찾습니다. 이 함수는 씬 그래프 계층구조를 사용합니다.
먼저 아이템을 형제 인벤토리(처음 대상 인벤토리와 부모를 공유하는 인벤토리)에 추가한 다음, 자손 인벤토리(처음 대상 인벤토리가 부모로 지정된 인벤토리)를 살펴봅니다. 이 함수는 실패를 반환하기에 앞서 계층구조의 모든 인벤토리를 확인해 봅니다.
씬 이벤트로 인벤토리 필터링하기
AddItem() 함수 호출로 인벤토리가 대상으로 지정되면 씬 이벤트(add_item_event)를 수신합니다. 컴포넌트의 OnReceive() 함수를 오버라이드하면 커스텀 로직을 트리거해 아이템 항목에 영향을 줄 수 있습니다. 이를 통해 아이템 허용 전 타입 확인, 인벤토리 내 특정 개수의 아이템만 허용 등 인벤토리 규칙을 지정할 수 있습니다. OnReceive() 이벤트는 기본 컴포넌트 클래스에 구현되어 있으며, 모든 씬 그래프 컴포넌트에 사용할 수 있습니다.
add_item_event는 모든 인벤토리가 도달하는 응답을 수집합니다. 인벤토리 컴포넌트가 이벤트를 수정하도록 하고, 해당 인벤토리 컴포넌트가 자체적으로 제공되도록 하여 추가되는 아이템을 수신하게 할 수 있습니다. 이벤트에는 대상 인벤토리로 설정 및 업데이트 가능한 inventory_with_priority라는 배열이 포함되어 있습니다. 이를 통해 아이템 수신 우선순위를 사용해 대상 인벤토리를 후보로 선정할 수 있습니다. 씬 이벤트가 방송되면 우선순위가 설정된 모든 인벤토리가 아이템 수신 가능 후보로 간주되며, 우선순위가 가장 높은 인벤토리가 아이템을 수신합니다.
커스텀 인벤토리 및 아이템 실험단계 출시에서는 add_item_event만 이용 가능합니다. 추후 업데이트에서 다른 이벤트가 추가될 수 있습니다.
포트나이트 인벤토리
커스텀 인벤토리 및 아이템에는 fort_inventory_components라 불리는 다수의 inventory_component 서브 클래스가 있습니다. 여기에는 포트나이트 배틀로얄 플레이어 인벤토리를 모사하는 아이템 필터링 및 UI 요소가 있습니다.
| 컴포넌트 | 설명 |
|---|---|
| 기본 포트나이트 플레이어 인벤토리의 채집 툴 슬롯에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 단축바에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 건설 툴 단축바에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 함정 슬롯에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 화폐 섹션에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 수집품 섹션에 해당합니다. |
| 기본 포트나이트 플레이어 인벤토리의 탄약 섹션에 해당합니다. |
또한 서브 인벤토리 환경설정을 직접 만들어 기본 플레이어 인벤토리에서 추가 또는 제거하거나, 기본 인벤토리를 대체할 수도 있습니다.
아이템과 인벤토리는 아이템 또는 인벤토리 엔티티에 여러 컴포넌트가 추가됨에 따라 간단하거나 복잡해질 수 있습니다. 커스텀 인벤토리와 아이템 시스템은 계속 개발되며, 더욱 많은 기능을 제공하는 더 많은 컴포넌트가 추가될 것입니다.