Problème : script de déclenchement d'animations randoms via UI

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Neropentacle
Messages : 5
Inscription : 19 Jan 2019 22:09

Problème : script de déclenchement d'animations randoms via UI

Message par Neropentacle » 19 Jan 2019 23:38

Tout d'abord, bonjour à tous !

Que tous les passionnés de problèmes ardus se réjouissent : j'en ai un :langue3:. Je tiens à préciser que ça sera certainement un problème de débutant, mais qui regroupe de nombreux facteurs qui risquent de rendre la chose plus complexe que prévu.

Je vais essayer d'être aussi clair que possible et de ne pas m'embrouiller dans mon explication :

Je suis actuellement sur un petit projet de jeu en 2D, et ce qui me pose problème se résume pour le moment à douze éléments => un petit carré rouge, dix tubes (regroupés en un seul sprite) et un bouton (UI).
Maintenant mon objectif (ou, en plus simple, ce que je n'arrive pas à faire) : quand j'appuie sur le bouton, je veux qu'un petit carré rouge passe dans l'un des tubes (choisi de manière aléatoire) une seule fois (pas de loop). Dans le cas présent, peu importe l'origine ou la destination, c'est uniquement une animation. A chacun des clics, un nouveau carré passe dans un tube aléatoire (ça peut en être un autre, ou plusieurs fois le même). Le bouton déclenche donc une animation random, et si le joueur déclenche le bouton huit fois en une seconde, il faut que chaque instance du clic déclenche une animation qui se poursuivra jusqu'à son terme (chaque "voyage de cube" durant entre deux et cinq secondes).
Problème supplémentaire maintenant. Il faut que les animations puissent se chevaucher (se jouer de manière simultanée, que chacune se joue jusqu'à la fin même si plusieurs autres animations ont été lancé par ce même script) et ce même si c'est la même animation : si le random a décidé que l'animation du "tuyau 1" se jouerait deux fois de suite, on doit pouvoir voir deux petits carrés rouges passant par le même tube "à la queue-leu-leu".

Ce que je sais faire :

Je sais déjà comment scripter le random et l'appliquer avec des conditions. Je sais créer des animations (les dix animations du carré sont déjà créée, et regroupées dans un même "animator"), je sais faire fonctionner un bouton pour des actions plus simples (changer des valeurs, jouer un effet sonore, etc...), je sais enlever le loop d'une animation... pour l'instant, dans le cadre de ce problème, j'en suis là :rouge:.

Ce que je ne sais pas faire :

Pour commencer, je ne sais pas comment déclencher une animation en passant par le script (pour que le bouton qui est un élément UI puisse s'occuper de cela). Je ne sais pas non plus vraiment comment configurer l'Animator pour que tout fonctionne comme je le souhaite. Enfin, tout ce qui en découle me semble compliqué, faire en sorte que les animations puissent se chevaucher en particulier.

Questions :

Est-ce une bonne idée de passer par un Animator unique comptant toutes les animations du même GameObject, sachant que ce dernier est sensé se "dupliquer" du coup ? Suis-je d'ailleurs obligé de passer par un GameObject, ou peut-on coder le carré rouge directement par script ? Comment lancer plusieurs animations simultanément ? Est-il possible de faire chevaucher plusieurs fois la même animation ? Et enfin, comment faire en sorte que ce procédé soit déclenché par un bouton ? :0

Si quelqu'un a la patience et les connaissances pour me proposer une solution toute faite (ou une direction que je pourrais étudier) pour arriver à ce résultat bien précis, je lui serais très reconnaissant. Je tâtonne dans le noir depuis trois jours sans trouver le moindre début de résolution. Merci à tous !!!

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème : script de déclenchement d'animations randoms via UI

Message par Max » 20 Jan 2019 12:03

Hello,
Neropentacle a écrit :
19 Jan 2019 23:38
...
Dans le cas présent, peu importe l'origine ou la destination, c'est uniquement une animation.
...
J'ai du mal à me faire une idée d'ensemble. Donc si je comprend bien, les déplacements se font sous la forme d'animations ?
Pourquoi ce choix ? Pourquoi ne pas être passer par la gestion des transforms ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Neropentacle
Messages : 5
Inscription : 19 Jan 2019 22:09

Re: Problème : script de déclenchement d'animations randoms via UI

Message par Neropentacle » 20 Jan 2019 14:39

Hello Max !

Je me suis simplement dit qu'il serait plus facile (ou tout du moins, plus faisable) de dupliquer une animation et d'en faire chevaucher plusieurs, plutôt qu'en passant par du déplacement scripté (ma logique était : il est sûrement plus faisable de créer de nombreuses instances d'un seul GameObject via des animations plutôt que par le déplacement "en dur" via script). Après, je suis ouvert à toutes les possibilités, s'il est possible de faire chevaucher le même GameObject sur plusieurs trajets différents (comme s'il se multipliait en fait), je veux bien essayer !

Je me suis également dit que je pouvais peut être mettre en place plusieurs carrés au lieu d'un seul... par exemple trente-six carrés (sachant qu'une personne moyenne peut au max cliquer douze fois par seconde, et que la plus long trajet de carré serait de trois secondes environ). Mais la théorie, et ce que j'aimerais atteindre, c'est que la création d'instance, si elle se fait l'une après l'autre, peut se chevaucher à l'infini (ou tout du moins en très grand nombre) : par exemple si (et seulement suivant la théorie), le joueur réussissait à cliquer vingt fois par secondes, et que le random décidait (toujours pure spéculation) de faire passer tous les carrés par le premier tube qui est le plus long (trois secondes de voyage environ), il faudrait donc créer soixante instances de ce petit carré rouge de trois pixels de côté.

Du coup, est-ce judicieux de passer par des animations, ou bien par du script via transform ? Dois-je nécessairement m'appuyer sur un GameObject (ou sur plusieurs), ou devrais-je "faire spawner" cette forme simple via script ?
En ce moment je suis confronté à plusieurs bugs concernant le mouvement de ma caméra d'un point fixe à un autre via transform (enfin, le déplacement, ça va, mais la transition ne se fait que sur le premier trajet... je bosse dessus !), du coup, me lancer dans du code transform pour dix trajets différents à travers dix tuyaux qui font des coudes et des virages, ça me semble difficile, même en théorie :-|...

Je sais que j'ai un peu du mal à expliquer mon soucis. Après, si la méthode finale pour arriver à ce que je veux n'est pas "propre" (une dizaine de scripts différents, des codes hybrides, etc...) je m'en contenterais :malin2:. Merci en tout cas de ne pas avoir été directement rebuté par mes questions !

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème : script de déclenchement d'animations randoms via UI

Message par Max » 20 Jan 2019 16:59

Re,

un ou deux screens permettent souvent de mieux cerner la situation ;)
Pour ce qui est des mouvements et déplacement, personnellement d'instinct, je pars sur du script. Après, si des chemins précis doivent être suivit, ben tu implantes par exemple un système de waypoints. Faire les animations pour suivre ce même chemin ne doit pas être forcément plus simple (ou alors je quelque chose m’échappe).
Après que cela soit un script ou une animation, niveau instanciation cela ne change rien. Regarde du coté des prefabs.
Neropentacle a écrit :
20 Jan 2019 14:39
Dois-je nécessairement m'appuyer sur un GameObject (ou sur plusieurs), ou devrais-je "faire spawner" cette forme simple via script ?
Là je ne comprends pas la question . Tout élément de ta scène est forcément basé sur un GO à la base (au pire basé sur un empty). Après si ta question est "doivent-ils être présent dans ma scène au départ ?", alors la réponse est non. On revient sur les deux mots clé: Prefabs et Instanciate.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »