Je prévois le développement d'un jeu dans Unity3D, et j'essaie de comprendre ce que le moteur a déjà fourni et ce que je dois coder moi-même.
Le jeu lui-même va être un jeu de rythme, ce qui signifie synchroniser les événements audio et graphiques afin qu'ils jouent toujours quand ils sont censés le faire. Ce que je cherche à éviter, c'est un scénario potentiel de décalage où l'audio ou les graphiques commencent à progresser plus rapidement que l'autre.
Lorsque nous avons discuté de ce type de système de coordination dans ma classe de conception de jeux à l'université, mon professeur a appelé ce type de conception une classe "Chronologie". L'idée étant que vous pouvez instancier une ou plusieurs d'entre elles pour progresser à des rythmes différents, planifier des événements futurs et synchroniser des événements périodiques. Cependant, appeler cela une classe "Timeline" semble avoir été limité à mon professeur lui-même, car googler pour savoir si certaines fonctionnalités d'API "Timeline" ont été une tentative infructueuse.
Existe-t-il un nom plus courant pour ce type de fonctionnalité? Unity dispose-t-il de méthodes préexistantes pour coordonner la planification d'événements comme celui-ci, ou est-ce le genre de chose qui doit être intégrée au moteur? Et si c'est le cas, j'apprécierais d'être pointé vers des tutoriels!
la source
Réponses:
Bien que cette fonctionnalité ne soit pas disponible dans Unity, une implémentation de base d'une telle chronologie ne devrait pas être trop difficile à faire.
Voici comment je procéderais à ce sujet:
timeline.AddEvent(0.25f, MyCallback)
.Avec chaque
Update
, la classe de chronologie:float
) du temps écouléSi vous avez besoin d'une sorte de fonctionnalité de rembobinage ou de relecture , il serait bien sûr stupide de supprimer tous les événements de la file d'attente (ce qui signifie que vous devrez les ajouter à nouveau lors du rembobinage). Au lieu de cela, vous pouvez également utiliser un tableau contenant vos événements . Un événement consisterait en un
Time
etCallback
. Vous devez conserver votre tableau trié parTime
.Ensuite, au lieu de supprimer des éléments du tableau, vous garderiez une trace de l' index du tableau actuel , et à chaque mise à jour, vous chercherez à l'avance à partir de cet index et exécuterez tous les rappels avec
Playhead >= Time
tout en augmentant également l'index en conséquence.L'implémentation d'une vitesse de lecture plus rapide fonctionne avec les deux implémentations et serait aussi simple que:
la source
Non, Unity3D n'a pas une telle API prête à l'emploi.
Il prend en charge les coroutines, cependant, et je vous suggère de les examiner. Les coroutines facilitent généralement la planification et la synchronisation des événements.
la source
Je ne sais pas si c'est nouveau depuis les réponses de 2012, mais Unity prend en charge le contrôle de la chronologie via l' éditeur d'animation (hérité) .
Bien que cette fonctionnalité soit principalement destinée à l'animation de paramètres d'objet avec des courbes, elle inclut la possibilité de déclencher des scripts sur des événements d'animation . Ces scripts pourraient piloter vos graphiques et vos fichiers audio.
la source