아이템 및 인벤토리 시스템은 다양한 게임에서 중요한 역할을 합니다. 씬 그래프의 엔티티와 컴포넌트를 사용하여 포트나이트의 플레이어 인벤토리를 커스터마이징하고 내 섬만의 고유한 아이템을 만들 수 있습니다.
아이템은 플레이어와 에이전트가 사용하고 소유할 수 있는 오브젝트입니다. 인벤토리에는 기존 포트나이트 플레이어 인벤토리는 물론, inventory_component를 사용하여 만든 커스텀 인벤토리도 포함됩니다. 커스텀 아이템 및 인벤토리는 아이템을 생성, 제어 및 저장하는 시스템입니다. 이 시스템은 프로젝트 세팅에서 활성화해야 하는 실험단계 기능으로, 포트나이트 언리얼 에디터(UEFN)에서 씬 그래프 및 Verse와 함께 사용할 수 있습니다.
씬 그래프 기본 사항
씬 그래프는 Verse를 기반으로 구축된 엔티티 및 컴포넌트 시스템입니다. 엔티티는 컴포넌트의 컨테이너이며 컴포넌트는 엔티티에 기능을 부여합니다. 부모-자손 관계로 엔티티를 서로 연결하면 계층구조가 만들어집니다. 엔티티와 컴포넌트의 재사용 가능한 배열을 프리팹이라고 합니다.
엔티티와 컴포넌트에 대한 자세한 내용은 엔티티 및 컴포넌트 작업하기를 참고하세요. 프리팹에 대한 자세한 정보는 프리팹 및 프리팹 인스턴스를 참고하세요.
아이템
아이템은 씬 그래프에서 엔티티에 item_component를 배치하여 생성됩니다. 인벤토리는 컴포넌트를 오브젝트처럼 처리합니다. item_component는 다음과 같은 기능을 제공합니다.
item_component 자체는 아이템에 제한된 옵션만을 제공합니다. 추가 컴포넌트가 있어야 향상된 기능으로 더 흥미로운 아이템을 만들 수 있습니다.
자세한 내용은 아이템 컴포넌트를 확인하세요.
인벤토리
인벤토리는 아이템을 위한 컨테이너이며, 해당 아이템에서 수행되는 작업을 제어합니다. 인벤토리는 inventory_component가 포함된 엔티티이며, 다음과 같은 방식으로 작동합니다.
인벤토리에 있는 모든 아이템을 인식합니다.
인벤토리에 들어오거나 나갈 수 있는 아이템을 관리합니다.
들어오는 아이템이 인벤토리 안에 이미 있는 기존 아이템과 병합되려고 할 때 수행할 작업을 결정합니다.
아이템은 한 번에 하나의 인벤토리 안에만 있을 수 있으므로, 인벤토리는 아이템 엔티티의 소유권 또한 결정합니다. 인벤토리의 서브 엔티티는 item_component까지 있어야 인벤토리 안에 있는 아이템으로 간주되며, 그렇지 않으면 자손 서브 엔티티가 됩니다.
기본적으로 인벤토리에는 다양한 종류의 아이템을 무한히 보관할 수 있습니다. Verse를 사용하면 아이템 추가 및 제거에 영향을 주는 제한과 규칙을 만들 수 있습니다. 예시:
올바른 카테고리가 있는 경우에만 인벤토리에 아이템을 추가합니다.
인벤토리 내 아이템 개수를 제한합니다.
인벤토리에서 마지막 아이템이 제거되지 않도록 방지합니다.
인벤토리가 가득 차면 우선순위가 높은 아이템이 우선순위가 낮은 아이템을 내보낼 수 있도록 허용합니다.
인벤토리를 단일 아이템으로 제한합니다.
인벤토리 트리
인벤토리는 씬 그래프 계층구조에서 자신 아래에 있는 모든 인벤토리를 인식합니다. 이러한 자손 인벤토리를 서브 인벤토리라고 합니다. 인벤토리 트리는 여러 가지 방식으로 활용할 수 있습니다.
예를 들어, 아이템을 부모 인벤토리에 추가하면 더 특화된 자손 인벤토리로 이동할 수 있습니다. 플레이어에게 코인을 줄 때 인벤토리 시스템을 통해 코인이 지갑으로 이동하는 것이라고 생각하세요(플레이어 인벤토리 > 배낭 인벤토리 > 돈주머니 인벤토리).
더 고급 인벤토리 비헤이비어를 만들려면 Verse를 사용해 기능을 작성해야 합니다.
Verse: 인벤토리
두 가지 방법으로 인벤토리에 아이템을 추가할 수 있습니다.
하나의 인벤토리에 하나의 아이템만을 추가하려면
AddItem()을 호출합니다.AddItemDistribute()함수를 호출하고 인벤토리 계층구조를 사용하여 가장 적합한 인벤토리나 서브 인벤토리를 찾습니다.
AddItemDistribute() 함수가 호출되면 대상 인벤토리와 해당하는 모든 서브 인벤토리가 아이템을 평가하고 요청할 기회를 갖게 됩니다. 각 인벤토리를 모두 확인한 후에 가장 적합한 인벤토리가 아이템을 추가하려고 시도합니다.
플레이어 인벤토리 루트
플레이어는 기본적으로 인벤토리 하나를 가지게 됩니다. 이를 인벤토리 루트라고 합니다. 다른 인벤토리와 달리, 플레이어의 인벤토리 루트는 아이템을 받을 수 없습니다. 대신 그 아래의 서브 인벤토리의 부모로 작동합니다. 이렇게 하면 처음 대상 인벤토리가 아이템을 받을 수 없는 경우에도, AddItemDistribute()로 인벤토리 루트를 대상으로 지정해 아이템이 적합한 인벤토리를 찾을 수 있습니다.
플레이어가 아이템을 받으려면 인벤토리 루트 아래에 하나 이상의 서브 인벤토리가 있어야 합니다.
위 설명은 Verse 또는 프리팹 에디터를 통해 추가된 inventory_component가 있는 엔티티에는 적용되지 않습니다.