이 기능은 실험단계이므로, 사용해 보면서 피드백을 에픽에 전달하고 에픽에서 구상 중인 부분도 살펴보세요. 현재 아이템 제작을 사용하는 프로젝트는 퍼블리싱할 수 없습니다.
실험단계에서 생성된 에셋의 이전 버전 호환성은 보장되지 않는다는 점에 유의하세요. 이러한 기능의 API는 변경될 수 있으며, 에픽 재량에 따라 전체 실험단계 기능이나 특정 기능을 제거할 수 있습니다. 이 기능으로 작업을 시작하기 전에 알려진 문제 목록을 확인해 보세요.
inventory_component는 아이템의 컨테이너로 사용되는 씬 그래프 컴포넌트입니다. 엔티티에 컴포넌트를 추가하는 방법은 엔티티 및 컴포넌트 작업하기를 참고하세요.
item_component를 가지고 있는 엔티티만 아이템으로 간주됩니다. 이 컴포넌트가 없으면 인벤토리에 엔티티가 제대로 추가되지 않으며, 커스텀 아이템 및 인벤토리 기능이 손상될 수 있습니다.
'아이템'이라고 언급하는 경우 이는
item_component가 있는 엔티티를 의미합니다.'인벤토리'라고 언급하는 경우 이는
inventory_component가 있는 엔티티를 의미합니다.
클래스 설명
inventory_component는 아이템 보관 컨테이너로 사용됩니다. 인벤토리에 추가된 아이템은 inventory_component의 엔티티 자손이 됩니다. 일반 씬 그래프 계층구조 기능에 더해, 인벤토리는 특정한 프로퍼티 및 메서드로 인벤토리 자체와 보유 아이템을 관리할 수 있습니다.
AddItem()및RemoveItem()을 사용해 아이템을 추가하거나 제거합니다.아이템 회수를 위해
GetItem()및FindItems()를 사용할 수 있습니다. Get 함수는 직계 자손을 반환하고, Find 함수는 모든 후손을 반환합니다.다른 인벤토리를 찾기 위한
GetInventories()및FindInventories()가 있습니다.AddItemEvent,RemoveItemEvent등 등록할 이벤트입니다.GetEquippedItems()는 장비에 대해 사용할 수 있고,EquipItemEvent및UnequipItemEvent이벤트를 사용해 추적할 수 있습니다.
inventory_component를 사용하면 모든 엔티티가 가방 또는 배낭, 전리품이 든 상자, 심지어는 무기 및 기술이 있는 캐릭터 편성이 될 수 있습니다.
인벤토리는 여러 방법으로 어떤 아이템을 추가하고 제거할지 관리할 수 있습니다. 유용한 방법 중 하나는 씬 이벤트입니다. AddItem() 함수가 호출되면 컴포넌트가 응답 가능한 씬 이벤트가 송신됩니다. 컴포넌트에 씬 이벤트가 도달하면 OnReceive() 이벤트가 실행됩니다. 이 이벤트는 로직 트리거를 위해 오버라이드할 수 있습니다.
커스텀 아이템 및 인벤토리 실험단계 출시에는 아이템 추가, 제거, 병합 제어를 위한 다른 메서드도 포함됩니다. inventory_rule_interface 타입을 서브클래스로 만들면 CanAdd(), CanRemove(), CanMerge()에 새로운 오버라이드를 작성할 수 있습니다. 이러한 규칙은 AddRule()을 사용해 InventoryRuleList에 추가할 수 있습니다. 이 기능은 실험단계 출시 이후에도 유지되지 않을 것이라는 점을 참고하세요.
컴포넌트는 컴포넌트 드롭다운 목록에 inventory_component로 표시되어 있습니다. 자세한 내용은
Verse API의 inventory_component API 레퍼런스를 참고하세요.
인벤토리 및 씬 그래프
커스텀 아이템 및 인벤토리 시스템은 최대한 활용하기 위해 반드시 이해해야 하는 기본적인 구성을 제공합니다.
모든 플레이어는 루트 인벤토리를 갖고 시작합니다. 이는 플레이어 엔티티에 어태치된 inventory_component가 있는 엔티티입니다. 이 루트 인벤토리에는 다수의 fort_inventory_component 서브 인벤토리도 있습니다. 이는 포트나이트 기능 유지에 필요합니다. 포트나이트 인벤토리 컴포넌트에서 이러한 컴포넌트에 대해 자세히 알아보세요.
씬 그래프 이동 방법으로 인해, 루트 인벤토리는 항상 inventory_component가 있는 엔티티의 엔티티 트리 검색 시 발견되는 첫 인벤토리가 됩니다. 이러한 이유로, 루트 인벤토리는 신규 인벤토리를 어태치하기에 합당한 대상입니다.
# Helper function that gets the first descendant inventory component from an agent.
# This will be the root inventory.
GetAgentInventory(Agent:agent)<decides><transacts>:inventory_component=
TargetInventory := (for (I : Agent.FindDescendantComponents(inventory_component)) { I })[0]루트 인벤토리는 플레이어에게 어태치되고, 모든 서브 인벤토리는 루트 인벤토리에 어태치됩니다. 신규 인벤토리는 다른 시스템이 하나의 루트 인벤토리만 찾고 상호작용해도 되도록 루트 인벤토리에 추가되어야 합니다.
예시
프리팹 에디터에서 엔티티에 inventory_component를 추가하면 인벤토리로서 아이템을 보관할 수 있게 됩니다.
아래 상자에는 inventory_component가 있습니다. 이제 컴포넌트 내 모든 기능을 활용할 수 있습니다.
그러나 커스텀 아이템과 인벤토리를 최대한 활용하려면 Verse를 사용해야 합니다.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Itemization }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Itemization }
# This device will give an inventory to all players
# It will then make a dummy item and give it to the inventory.
inventory_giver_device := class(creative_device) :
일반적인 인벤토리 조건은 내부에 어떤 아이템이 존재할 수 있는지 규칙을 적용하는 것입니다. 아래는 커스텀 inventory_component 스크립트로서, 컴포넌트
메서드 OnReceive()를 오버라이드합니다. 여기서는 최대 인벤토리 크기 규칙을 만들기 위해 사용되었습니다.
# This custom inventory component overrides the OnReceive function.
# This will allow us to determine whether or not we want an entity with this inventory component, to receive items.
custom_inventory_component := class(inventory_component) :
# What is the maximum number of items allowed in this inventory?
@editable
MaximumItemSlots:int = 5
인벤토리 게임플레이 예시와 inventory_component 사용법은 씬 그래프가 있는 커스텀 아이템 및 인벤토리의 튜토리얼을 참고하세요.