Questa funzionalità è in stato sperimentale, quindi puoi provarla, fornire un feedback e vedere cosa stiamo pianificando. Al momento non puoi pubblicare un progetto che utilizza Oggettizzazione.
Tieni presente che non è garantita la retrocompatibilità per gli asset creati in fase sperimentale. Le API per queste funzioni sono soggette a modifiche e potremmo rimuovere intere funzioni sperimentali o funzionalità specifiche a nostra discrezione. Prima di iniziare a usare questa funzionalità, consulta l'elenco dei problemi noti.
Il componente inventory_component è un componente Scene Graph utilizzato come contenitore per gli oggetti. Per informazioni su come aggiungere un componente alla tua entità, vedi Utilizzo di entità e componenti.
Le entità sono considerate oggetti solo se hanno un item_component. In sua assenza, le entità non verranno aggiunte correttamente agli inventari e le funzionalità degli oggetti personalizzati e degli inventari potrebbero non funzionare.
I riferimenti a un "oggetto" indicano un'entità con un
item_component.I riferimenti agli "inventari" indicano un'entità con un
inventory_component.
Descrizione classe
Il componente inventory_component viene utilizzato come contenitore per gli oggetti. Gli oggetti aggiunti all'inventario diventano figli dell'entità di inventory_component. Oltre alla normale funzionalità di gerarchia Scene Graph, gli inventari possono gestire se stessi e i propri oggetti con proprietà e metodi specifici:
Aggiungi o rimuovi oggetti utilizzando
AddItem()eRemoveItem().Per recuperare gli oggetti è possibile utilizzare
GetItem()eFindItems(). Le funzioni get restituiscono immediatamente figli, mentre le funzioni find restituiscono tutti i discendenti.Per trovare altri inventari sono disponibili
GetInventories()eFindInventories().Eventi a cui registrarsi, come
AddItemEventeRemoveItemEvent.GetEquippedItems()può essere utilizzata per la strumentazione e gli eventiEquipItemEvent, mentreUnequipItemEventviene usata per tenerne traccia.
Con un inventory_component, qualsiasi entità può diventare una borsa o uno zaino, una cassa contenente bottino o persino un equipaggiamento del personaggio con armi e abilità.
Gli inventari possono controllare quali oggetti vengono aggiunti o rimossi in diversi modi. Un metodo utile prevede gli eventi scena. Quando viene chiamata la funzione AddItem(), è trasmesso un evento di scena a cui i componenti possono rispondere. Quando un evento di scena arriva a un componente, viene generato l'evento OnReceive() che può essere sottoposto a override per attivare la logica.
La versione sperimentale degli oggetti e degli inventari personalizzati include anche un altro metodo per controllare l'aggiunta, la rimozione e l'unione di oggetti. Creando una sottoclasse di tipo inventory_rule_interface, è possibile scrivere nuovi override per CanAdd() , CanRemove() e CanMerge(). Queste regole si possono aggiungere a InventoryRuleList tramite AddRule(). Tieni presente che questa funzionalità non dovrebbe persistere oltre la versione sperimentale.
Il componente è elencato come inventory_component nell'elenco a discesa dei componenti. Per ulteriori informazioni, consulta
il riferimento API inventory_component dall'API Verse.
Inventari e Scene Graph
Il sistema di inventari oggetti personalizzati offre una configurazione di base che deve essere compresa per ottenere il massimo.
Tutti i giocatori inizieranno con un Inventario radice, ovvero un'entità con un inventory_component collegato all'entità giocatore. Questo Inventario radice ha anche una serie di sottoinventari fort_inventory_component. Sono necessari per preservare la funzionalità di Fortnite. Per maggiori dettagli su questi componenti, vedi Componente dell'inventario Fort.
A causa del metodo di attraversamento di Scene Graph, l'inventario radice sarà sempre il primo inventario trovato quando si cerca un'entità con un inventory_component in un albero delle entità. Per questo motivo, l'Inventario radice è un obiettivo sensibile per collegare nuovi inventari.
# 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]L'Inventario radice è collegato al giocatore e tutti i sottoinventari sono collegati all'Inventario radice. I nuovi inventari devono essere aggiunti all'Inventario radice in modo che altri sistemi debbano trovare e interfacciarsi con un solo inventario radice.
Esempio
L'aggiunta di un inventory_component a un'entità nell'editor di prefab permette di memorizzare gli oggetti come inventario.
Il forziere sottostante possiede un inventory_component. Ora può sfruttare tutte le funzionalità all'interno del componente.
Tuttavia, per ottenere il massimo dalla potenza degli inventari e degli oggetti personalizzati, dovrai utilizzare 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) :
Un requisito comune degli inventari è quello di applicare regole agli oggetti che possono esistere al loro interno. Di seguito è riportato uno script per un inventory_component personalizzato che esegue l'override del metodo
del componente OnReceive(). Qui è stato utilizzato per definire una regola per le dimensioni massime dell'inventario:
# 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
Se cerchi esempi di gameplay sugli inventari e vuoi sapere come utilizzare inventory_component, dai un'occhiata ai tutorial in Inventari e oggetti personalizzati con Scene Graph.