Créer un jeu 2D basé sur une grille

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Salade Tomate Oignon
Messages : 4
Inscription : 15 Juin 2019 22:26

Créer un jeu 2D basé sur une grille

Message par Salade Tomate Oignon » 15 Juin 2019 22:38

Bonjour, je suis débutant sur Unity et je souhaite créer un jeu 2D basé sur une grille. Imaginez un puissance 4 par exemple.
Cependant je ne sais pas comment commencer, les tuto que j'ai suivi ne parlent que de jeux de plateforme… Moi je souhaite réaliser un jeu dont la caméra ne bouge pas et dont le principal élément serait une grille. Il faudrait que je sache insérer un élément dans une case et récupérer le contenu d'une case. En faite au vu de la programmation juste avoir un tableau 2D graphique…

Avez-vous des idées de départ avec éventuellement des tutos svp ?
Merci.

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Créer un jeu 2D basé sur une grille

Message par EmileF » 16 Juin 2019 09:52

Salut,

Selon les renseignements que tu donnes,
je mettrais la camera en 2D
et devant la camera, je disposerais des empty qui symboliseraient les positions des cases.
et ensuite tu pourras mettre ce que tu voudras dans tes empty pour ton gameplay

Tout cela est très facile à créer en script si c'est ce que tu souhaites
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Salade Tomate Oignon
Messages : 4
Inscription : 15 Juin 2019 22:26

Re: Créer un jeu 2D basé sur une grille

Message par Salade Tomate Oignon » 18 Juin 2019 00:48

Oui merci c'est ce que j'ai fais. J'ai un background qui couvre toute la caméra (qui est fixe) et tout le reste est géré avec des scripts. Je crée un gameObject vide pour chaque classe que je crée en faite.

J'ai pas mal avancé et maintenant je souhaite gérer les animations mais je bloque un peu.
Imaginez toujours un puissance 4, je souhaite faire tomber une pièce dans la grille. Je connais le point de départ et le point d'arriver, du coup j'utilise une coroutine et un lerp qui font "chuter" la pièce. Mais j'aimerais que le code qui suit le lancement de la coroutine s'effectue APRES la fin de la coroutine, donc qu'il y ait une sorte de pause durant l'animation.
J'ai vraiment du mal avec les coroutines, est-ce que vous auriez une solution svp ?

Merci.

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Créer un jeu 2D basé sur une grille

Message par EmileF » 19 Juin 2019 09:24

Salut,

Personnellement, je n'utilise pas les coroutines, c'est peut-être un tord, mais je n'arrive pas à bien les comprendre.

Dans ton cas, j'utilise un boolean, genre move = true, tant que l'animation est en cours, et quand le pion est arrivé à destination, je mets le move = false.

Ainsi ça me permet de bloquer le reste tant que le move est true.

Je pense que tu peux utiliser cette méthode avec les coroutines aussi.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un jeu 2D basé sur une grille

Message par boubouk50 » 19 Juin 2019 09:55

Les coroutines permettent l'exécution de code en dehors du thread principal. Elles peuvent donc être indépendantes du reste, du temps, des updates, etc. C'est vraiment utile pour éviter d'utiliser l'Update pour attendre de données.
Les coroutines renvoient toujours quelque chose, tu peux donc attendre la fin de celle-ci pour poursuivre, tu utiliseras donc une coroutine qui attend une coroutine.
https://docs.unity3d.com/ScriptReference/Coroutine.html
Dans cet exemple, tu peux voir que la fonction Start () (qui est ici une coroutine) attend la fin de la coroutine WaitAndPrint () grâce à l'instruction Yield.

Code : Tout sélectionner

IEnumerator Start()
    {
        print("Starting " + Time.time);

        // Start function WaitAndPrint as a coroutine
        yield return StartCoroutine("WaitAndPrint");
        print("Done " + Time.time);
    }
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Créer un jeu 2D basé sur une grille

Message par EmileF » 19 Juin 2019 12:00

J'avoue personnellement que j'ai beaucoup de mal avec les coroutines, il va falloir que je m'y penche dessus très sérieusement, si elles existent c'est sûrement très utile.

Mais dans l'exemple qui nous intéresse je n'arrive pas à voir comment l'exécution du reste du code peut-être évitée.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un jeu 2D basé sur une grille

Message par boubouk50 » 19 Juin 2019 13:32

Ici, pour une animation codée, il te faut définir un timing. Pour cela, tu peux utiliser l'Update () ou bien une coroutine.
L'Update sera exécuté à chaque frame, il te faut donc définir une condition de départ et d'arrêt (avec un booléen comme tu le suggères) ainsi que les paramètres de l'animation.
La coroutine ne sera quant à elle exécutée seulement lorsqu'elle sera appelée et ce terminera. Elle peut aussi avoir des paramètres en entrée, donc ne nécessite pas de variables dans le scope de la classe mais de la fonction seule. Enfin, elle renvoie une valeur qui peut être utilisée comme bon te semble.
Un peu comme une fonction qui s'update quand toi tu le décides.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Créer un jeu 2D basé sur une grille

Message par EmileF » 19 Juin 2019 15:24

Donc en fait si je comprends bien

la coroutine exécute l'animation et dans mon cas met à false mon boolean quand c'est terminé

et mon boolean gère le reste du code

Si c'est ça, c'est ce que je suggérais plus haut en fait, en utilisant la coroutine.

Mais donc quel est l'avantage dans ce cas, la coroutine est plus économique en ressource ?
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un jeu 2D basé sur une grille

Message par boubouk50 » 19 Juin 2019 15:46

Pas forcément, l'Update peut être proscrit pour le coup.
Ici, c'est un jeu au tour par tour, donc tu peux le traiter en événementiel. Pas besoin d'Update.

Un Update est gourmand en performance face à une coroutine (dans la majorité des cas). Pour l'utilisation de quelques Update ou coroutine, c'est infime vu les puissances de calculs actuels.

Ensuite, les coroutines ont l'avantage de savoir quand elles se terminent donc mettre en attente la suite d'un programme, et donc programmer une suite d'événements. Aussi, les coroutines sont des fonctions, donc tu peux les appeler quand bon te semble, a contrario des Updates qui sont tout le temps exécutés.
En anglais: https://forum.unity.com/threads/corouti ... ate.67856/
Tu as des tests de performances et des conseils d'utilisation.

Personnellement, je me proscris au maximum des update et j'utilise des coroutines.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Unity le logiciel »