A differenza del sistema di attori tradizionale di Unreal Engine, Scene Graph utilizza un sistema di entità e componenti per definire gli oggetti nel mondo. Le entità fungono da contenitori per i componenti e altre entità e i componenti forniscono relazioni con le entità a cui sono collegati. La creazione di un oggetto di gioco con Scene Graph implica il partire da un'entità di base e l'aggiunta di dati e comportamenti utilizzando i componenti. Ogni componente introduce un nuovo comportamento e, combinandoli tra loro, puoi costruire oggetti complessi che puoi riutilizzare e su cui puoi iterare.
Conoscenze di base per costruire
Per illustrare questo punto, dai un'occhiata alla serie di lampioni nella prima sezione della sala modello. Ogni lampione è un prefab o una raccolta di entità e componenti salvati come un singolo oggetto. L'oggetto prefabbricato condivide le caratteristiche, il comportamento, le proprietà e gli attributi delle entità e dei componenti da cui è costruito. Per saperne di più su entità e componenti, dai un'occhiata al documento Lavorare con entità e componenti.
Iterazione tramite istanziazione
I prefab sono asset e ciò ti permette di effettuare la loro istanziazione nei tuoi livelli durante la modifica o il gameplay. Ogni volta che trascini un prefab da Esplora contenuti o crei una copia utilizzando il codice Verse, stai istanziando una nuova istanza di quel prefab Scene Graph nel mondo.
Sebbene ogni istanza del prefab abbia il proprio sovraccarico di memoria e di elaborazione, l'istanziazione di nuovi prefab non raddoppia la memoria perché le risorse asset utilizzate in un prefab sono condivise tra le istanze.
Sebbene l'istanziazione di più istanze dello stesso oggetto sia efficace, i prefab rappresentano anche un modo utile per iterare rapidamente un progetto. In Esplora contenuti, apri la cartella LightPost. In questa cartella sono memorizzati gli asset utilizzati per creare il progetto finale del prefab P_LightPost
Ogni lampione nella sala rappresenta una parte di questo prefab. Man mano che ti muovi lungo la sala, un nuovo componente viene aggiunto a ogni passaggio, fino ad arrivare al progetto finale del prefab.
Il primo lampione luce è una semplice configurazione composta da tre entità: un lampione, un pivot e una lanterna. Ognuna di queste tre entità ha un transform_component che determina dove si trovano nel livello. Entrambe le entità genitore e Lanterna hanno un mesh_component per renderle visibili e visualizzare i modelli rispettivamente del lampione e della lanterna. Sono collegate da un'entità Pivot che rappresenta la connessione tra il lampione e la lanterna.
Il secondo lampione ripete il design originale aggiungendo una nuova entità con un sphere_light_component come discendente della Lanterna, facendola brillare.
Tuttavia, il solo fatto di illuminare non è molto interessante, quindi il terzo lampione aggiunge un partition_system_component per simulare le falene che volano intorno all'entità SphereLight per un tocco visivo.
Andando avanti, la quarta istanza del lampione aggiunge sia un simple_movement_component che un keyframe_movement_component personalizzati all'entità Pivot. Questi componenti interagiscono per simulare il movimento dell'entità e dei suoi discendenti, facendo oscillare la lanterna avanti e indietro.
Questi componenti utilizzano Verse per determinare il percorso della lanterna, la distanza percorsa dalla lanterna su quel percorso e la rotazione della lanterna per imitare il vento che soffia sulla luce. Il componente di movimento del keyframe crea un movimento fluido e continuo in base alle coordinate in simple_movement_component.
Infine, l'ultima istanza del lampione aggiunge un lantern_interaction_component Verse personalizzato al lampione e un interactable_component alla Lanterna. Quando il giocatore si avvicina e interagisce con la lanterna, lantern_interaction_component accende e spegne la lanterna abilitando e disabilitando ogni light_component e partition_system_component sull'intero lampione.
Override
Quando crei un'istanziazione di un prefab, inizia con gli stessi valori predefiniti della definizione del prefab da cui è stato istanziato. Ma cosa succede se si desidera modificare un aspetto particolare di una delle istanze prefab? Forse vuoi una luce di colore diverso o un palo di metallo invece di un lampione in legno. Qui è dove entrano in gioco gli Override.
Gli override ti permettono di modificare i valori delle istanze di una classe prefab per personalizzare ogni istanza senza modificare il prefab genitore. Quando si applicano modifiche alle opzioni di un componente nidificato in un'istanza prefab, le modifiche eseguono l'override delle opzioni nel prefab genitore e influiscono sul modo in cui l'entità agisce a livello di componente solo per tale istanza.
È possibile eseguire override e modifiche su singole istanze prefab per creare varietà nella scena. Se invece vuoi propagare le modifiche a tutte le istanze del prefab, puoi utilizzare l'Editor prefab per applicare le modifiche a ogni prefab della scena.
Funzionalità Verse in Scene Graph
Scene Graph è un sistema nativo di Verse e questo ti permette di sfruttarli entrambi insieme in molti modi potenti. I prefab creati nel progetto vengono esposti come classi di asset in Verse tramite il file Assets.digest.verse e puoi farvi riferimento nel codice sia sui componenti Verse che sui dispositivi Verse.
Puoi utilizzare Verse anche per eseguire query su singole entità e componenti nella tua scena. La funzione GetComponents() ti permette di ottenere componenti specifici in base al loro tipo e GetEntities() ti permette di restituire tutte le entità figlio sotto un determinato genitore. Puoi anche cercare in alto e in basso nella gerarchia di Scene Graph per trovare i discendenti e le entità antenate. Il prefab P_LightPost utilizzato in questo modello utilizza Verse per creare il movimento di oscillazione e l'interattività della lanterna.
Per saperne di più sulla creazione di oggetti di gioco funzionali, vai alla sezione successiva, Movimento e interazione.
Movimento e interazione
Scopri come l'aggiunta di movimenti alle entità crea oggetti di gioco funzionali con un componente Verse e il componente di movimento keyframe.