Funkcja ta jest w stanie eksperymentalnym, więc możesz ją wypróbować, przesłać swoją opinię i zobaczyć, co planujemy wdrożyć. Aktualnie nie możesz opublikować projektu z zastosowaniem Itemization.
Pamiętaj, że nie gwarantujemy kompatybilności wstecznej zasobów utworzonych na etapie eksperymentalnym. Interfejsy API tych funkcji mogą ulec zmianie i możemy usunąć całe funkcje eksperymentalne lub określone funkcjonalności wedle własnego uznania. Przed rozpoczęciem pracy z tą funkcją sprawdź listę znanych problemów.
Komponent inventory_component jest komponentem Scene Graph używanym jako kontener na przedmioty. Aby uzyskać informacje na temat dodawania komponentu do jednostki, patrz: Praca z jednostkami i komponentami.
Jednostki są uznawane za przedmioty tylko wtedy, gdy mają komponent item_component. Bez niego jednostki nie zostaną poprawnie dodane do ekwipunków, a funkcjonalność systemu niestandardowych ekwipunków i przedmiotów może być nieprawidłowa.
Odwołania do przedmiotów to odwołania do jednostki zawierającej
item_component.Odwołania do ekwipunków odnoszą się do jednostki zawierającej
inventory_component.
Opis klasy
inventory_component służy jako kontener do przechowywania przedmiotów. Przedmioty dodane do ekwipunku stają się elementami podrzędnymi jednostki inventory_component. Wraz z normalną funkcjonalnością hierarchii grafu sceny ekwipunki mogą zarządzać same sobą i posiadanymi przedmiotami przy użyciu określonych właściwości i metod:
Dodawanie lub usuwanie przedmiotów przy użyciu funkcji
AddItem()iRemoveItem().Do pobrania przedmiotów można użyć funkcji
GetItem()iFindItems(). Funkcje z członem Get zwracają bezpośrednie elementy podrzędne, natomiast funkcje z członem Find zwracają wszystkie elementy potomne.Do wyszukiwania innych ekwipunków służą funkcje
GetInventories()iFindInventories().Zdarzenia do subskrybowania, takie jak
AddItemEventiRemoveItemEvent.GetEquippedItems()można używać do elementów wyposażenia, a do ich śledzenia można używać zdarzeńEquipItemEventiUnequipItemEvent.
Zastosowanie komponentu inventory_component sprawia, że dowolna jednostka może stać się torbą lub plecakiem, skrzynią zawierającą łup, a nawet wyposażeniem postaci z bronią i zdolnościami.
Za pomocą ekwipunków można sterować dodawaniem lub usuwaniem przedmiotów na różne sposoby. Jedną z przydatnych metod są zdarzenia sceny. Po wywołaniu funkcji AddItem() emitowane jest zdarzenie sceny, na które komponenty mogą reagować. Gdy do komponentu dociera zdarzenie sceny, zostaje wywołane zdarzenie OnReceive(), które można zastąpić logiką wyzwalania.
Wersja eksperymentalna niestandardowych przedmiotów i ekwipunków zawiera również inną metodę sterowania dodawaniem, usuwaniem i scalaniem przedmiotów. Tworząc podklasę typu inventor_rule_interface, można pisać nowe zastąpienia dla CanAdd(), CanRemove() i CanMerge(). Reguły te można dodać do InventoryRuleList za pomocą AddRule(). Pamiętaj, że funkcja ta nie będzie dostępna po premierze wersji eksperymentalnej.
Komponent zostanie wyświetlony jako inventor_component na liście rozwijanej komponentów. Aby dowiedzieć się więcej, zapoznaj się z
dokumentacją interfejsu API inventory_component z interfejsu API Verse.
Ekwipunki i Scene Graph
System niestandardowych przedmiotów i ekwipunków zapewnia podstawową konfigurację, z którą należy dobrze się zapoznać, aby maksymalnie wykorzystać możliwości systemu.
Wszyscy gracze rozpoczną grę z głównym ekwipunkiem, który jest jednostką z komponentem inventory_component dołączonym do jednostki gracza. Ten ekwipunek główny ma również szereg podekwipunków fort_inventory_component. Są one wymagane do zachowania funkcjonalności Fortnite. Szczegółowe informacje na temat tych komponentów, patrz: Komponent ekwipunku Fort.
Ze względu na specyfikę poruszania się po Scene Graph ekwipunek główny zawsze będzie pierwszym ekwipunkiem znajdowanym podczas przeszukiwania drzewa jednostek w celu wyszukania jednostki zawierającej komponent inventory_component. Z tego powodu ekwipunek główny jest dobrym miejscem do dołączania nowych ekwipunków.
# 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]Ekwipunek główny jest dołączony do gracza, a wszystkie podekwipunki są dołączone do ekwipunku głównego. Do ekwipunku głównego należy dodawać nowe ekwipunki, aby inne systemy musiały wyszukać jedynie ekwipunek główny i to z nim stworzyć interfejs.
Przykład
Dodanie komponentu inventor_component do jednostki w edytorze gotowców umożliwia przechowywanie przedmiotów jako ekwipunku.
Poniższa skrzynia ma komponent inventory_component. Może teraz wykorzystać wszystkie funkcje dostępne wewnątrz komponentu.
Aby jednak w pełni wykorzystać możliwości niestandardowych przedmiotów i ekwipunków, konieczne będzie użycie języka 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) :
Częstym wymogiem ekwipunków jest stosowanie reguł do przedmiotów, które mogą się w nich znajdować. Poniżej przedstawiono skrypt niestandardowego komponentu inventory_component, który zastępuje
metodę komponentu OnReceive(). W tym przykładzie został wykorzystany do utworzenia reguły maksymalnej wielkości ekwipunku:
# 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
Aby zapoznać się z przykładami rozgrywki z ekwipunkami i sposobem korzystania z komponentu inventory_component, sięgnij do samouczków w sekcji Przedmioty niestandardowe i ekwipunki z Scene Graph.