Contrairement au système d'acteur classique trouvé dans l'Unreal Engine, Scene Graph utilise un système d'entités et de composants pour définir des objets dans le monde. Les entités agissent comme des conteneurs pour des composants et d'autres entités, et les composants fournissent des relations aux entités auxquelles ils sont associés. La création d'un objet de jeu avec Scene Graph implique de partir d'une entité de base et d'ajouter des données et des comportements à l'aide de composants. Chaque composant apporte un nouveau comportement et, en les combinant, vous pouvez créer des objets complexes que vous pouvez réutiliser et sur lesquels vous pouvez itérer.
Bases de la création
Pour illustrer ce point, jetez un œil à la série de lampadaires dans la première section de la salle de modèles. Chaque lampadaire est un préfabriqué ou une collection d'entités et de composants enregistrés sous la forme d'un seul objet. L'objet de préfabriqué partage les caractéristiques, le comportement, les propriétés et les attributs des entités et des composants à partir desquels il est créé. Pour en savoir plus sur les entités et les composants, consultez le document Utiliser des entités et des composants.
Itération via l'instanciation
Les préfabriqués sont des ressources, ce qui vous permet de les instancier dans vos niveaux lors de la modification ou pendant le jeu. Chaque fois que vous faites glisser un préfabriqué hors du navigateur de contenu ou que vous créez une copie à l'aide d'un code Verse, vous instanciez une nouvelle instance de ce préfabriqué Scene Graph dans le monde.
Bien que chaque instance des préfabriqués dispose de sa propre surcharge de mémoire et de traitement, instancier de nouveaux préfabriqués ne double pas la mémoire, car les ressources utilisées dans un préfabriqué sont partagées entre les instances.
Bien que l'instanciation de plusieurs instances du même objet soit puissante, les préfabriqués offrent également un moyen utile d'itérer rapidement sur une conception. Dans le navigateur de contenu, ouvrez le dossier Lampadaire. Ce dossier stocke les ressources utilisées pour créer la conception de préfabriqué finale P_LightPost.
Chaque lampadaire de la salle représente une partie de ce préfabriqué. Au fur et à mesure que vous avancez dans la salle, un nouveau composant est ajouté à chaque étape, jusqu'à arriver à la conception finale du préfabriqué.
Le premier lampadaire est une configuration simple composée de trois entités : un lampadaire, un pivot et une lanterne. Chacune de ces trois entités possède un transform_component qui détermine où elles se trouvent dans le niveau. Les entités parent et Lanterne ont toutes deux un mesh_component pour les rendre visibles et afficher les modèles du lampadaire et de la lanterne respectivement. Ils sont connectés par une entité Pivot qui représente la connexion entre le lampadaire et la lanterne.
Le deuxième lampadaire lumineux reprend la conception d'origine en ajoutant une nouvelle entité avec un sphere_light_component comme descendant de la Lanterne, ce qui la fait briller.
Le simple fait de briller n'est pas très intéressant, donc le troisième lampadaire ajoute un particle_system_component pour simuler des papillons de nuit volant autour de l'entité SphereLight, de façon à apporter une touche visuelle.
Passons maintenant à la quatrième instance de lampadaire qui ajoute à la fois un simple_movement_component et un keyframe_movement_component personnalisés à l'entité Pivot. Ces composants fonctionnent ensemble pour simuler le déplacement de l'entité et de l'un de ses descendants, permettant ainsi à la lanterne de se balancer d'avant en arrière.
Ces composants utilisent Verse pour déterminer le trajet de la lanterne, la distance parcourue sur ce trajet, ainsi que la rotation de la lanterne pour imiter le souffle du vent sur la lumière. Le composant de déplacement associé à une image clé crée un déplacement fluide et continu basé sur les coordonnées du simple_movement_component.
Enfin, la dernière instance de lampadaire ajoute un lantern_interaction_component Verse personnalisé au lampadaire, ainsi qu'un composant interactable_component à la lanterne. Lorsque le joueur s'approche et interagit avec la lanterne, le lantern_interaction_component allume et éteint la lanterne en activant et en désactivant chaque light_component et particle_system_component sur l'ensemble du lampadaire.
Remplacements
Lorsque vous instanciez un préfabriqué, il démarre avec les mêmes valeurs par défaut que la définition de préfabriqué à partir de laquelle vous l'avez instancié. Mais que faire si vous souhaitez modifier un aspect particulier de l'une de vos instances de préfabriqués ? Peut-être souhaitez-vous une lumière de couleur différente ou un poteau en métal au lieu d'un lampadaire en bois. C'est là que les remplacements entrent en jeu.
Les remplacements vous permettent de modifier les valeurs des instances d'une classe de préfabriqués pour personnaliser chaque instance sans modifier le préfabriqué parent. Lorsque vous modifiez les options d'un composant imbriqué dans une instance de préfabriqué, ces modifications remplacent les options du préfabriqué parent et affectent le comportement de l'entité à ce niveau de composant, uniquement pour cette instance.
Des remplacements et des modifications peuvent être effectués sur des instances de préfabriqués individuelles pour créer de la variété dans la scène. Si, au contraire, vous souhaitez propager les modifications à toutes les instances du préfabriqué, vous pouvez utiliser l'éditeur de préfabriqués pour refléter ces modifications sur chaque préfabriqué de la scène.
Fonctionnalité Verse dans Scene Graph
Scene Graph est un système natif de Verse, ce qui vous permet d'exploiter les deux, ensemble, de nombreuses manières puissantes. Les préfabriqués que vous créez dans votre projet sont exposés en tant que classes de ressources dans Verse via votre fichier Assets.digest.verse, et vous pouvez les référencer dans le code, aussi bien dans les composants Verse que dans les appareils Verse.
Vous pouvez également utiliser Verse pour interroger des entités et des composants individuels dans votre scène. La fonction GetComponents() vous permet d'obtenir des composants spécifiques en fonction de leur type, et GetEntities() vous permet de renvoyer toutes les entités enfants sous un parent particulier. Vous pouvez également parcourir la hiérarchie de Scene Graph vers le haut et vers le bas pour trouver des entités descendantes et parentes. Le préfabriqué P_LightPost utilisé dans ce modèle utilise Verse pour créer le mouvement de balancement et l'interactivité avec la lanterne.
Pour en savoir plus sur la création d'objets de jeu fonctionnels, passez à la section suivante, Déplacement et interaction.
Déplacement et interaction
Apprenez comment l'ajout de déplacements à des entités crée des objets de jeu fonctionnels avec un composant Verse et le composant de déplacement associé à une image clé.