|
Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Coucou tout le monde,
Je vais enclencher un wip pour vous parler du moteur de jeu Godot et d'un projet que j'ai commencé il y a quelques mois. Dans ce wip, je vais juste "raconter ma vie" et en même temps, j'ai envie de vous faire découvrir le moteur. Un petit prologue: J'ai pratiqué le BGE, de manière intense, et ce dans les alentour de 2016 (un peu plus tôt genre 2014 ? Je ne me souvient plus). J'ai tout de suite compris que sans connaissances en python, j'irai pas bien loin. Je me souvient que je me débrouillai plus ou moins bien avec le Batch pour Windows et le Bash chez Linux (très peu) mais sans plus car c'était plus à l'école qu’ailleurs... Du coup j'avais dû apprendre le python, en plus des autres compétences requises pour la 3D, l'animation, la création de texture, etc. Donc, je reviens à Godot: Celui qui exploites encore le BGE/upBGE ne sera pas dépaysé (sur la technique) en passant sur Godot. Cela dit, on semble vendre Godot comme "facile", "accessible"... je ne dirai pas ça personnellement. C'est pas plus facile qu'Unity ou l'UE4 (maintenant le 5 ?). Il y a des tutos "prise en main" sur le site officiel, mais ça s’arrête à ce terme: il sera nécessaire de chercher l'information ailleurs pour aller plus loin. Pour l'adepte qui découvre le logiciel, ce qui est dommage, c'est qu'on le guide d'office sur la programmation, donc ce dernier risque d'être perdu, au départ. Il y a bien un système en brique logique (ou système nodal) mais on ne le vend pas aussi bien que la programmation, peut-être est-ce réservé aux ateliers pour enfants, et encore ? Bref, programmation = plus de liberté, 'faut pas se le cacher. GDScript = python (enfin, dans la façon de coder, le BGE pour ça, c'était plus "pur python") C# = C# (c-sharp pour la prononciation), les exploitants d'Unity connaissent. Ce qui est bien cependant, c'est que l'on peut télécharger des exemples "jouable" et analyser le contenu mais sans aides si pas de commentaires dans les lignes de code... Donc, vu que j'ai déjà des notions de base, l'adaptation n'a pas été très difficile mais j'ai voulu rester prudent, j'ai estimés commencer par un projet 2D "simple" et j'ai choisi de faire un STR (stratégie temps réel). J'ai ressortit du grenier mon tout premier jeu pc, un jeu Canadien, j'avais même acheté le deuxième quelques années plus tard, plus moderne. À l'époque, on était à la mode Command & Conquer (si je ne dis pas de bêtises). Et donc, c'est ce concept que je souhaites reproduire. Je ne compte pas aller trop loin non plus, juste le minimum, à savoir, le bulldozer, le camion-benne, le camion-citerne, la jeep, le tanker, le char d'assaut et les bâtiments pour la génération des ressources et unités. J'en raconterai plus plus tard.
Contribution le : 20/09/2021 15:05
|
|
![]() ![]() |
|
Re: Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Screenshot de l'interface et mon travail.
Tout comme dans le BGE, il est nécessaire d'organiser son travail, ses blends et ses scripts. Godot permet d'organiser cela sans le quitter. Par contre, sur Godot, on parle en noeud, pas vraiment en objets. C'est-à-dire que, dans un premier temps, il faut un noeud principal, tout le reste devra se mettre dans celui-ci, que ce soit de la même scène ou non (comme le HUD, par exemple). Ce concept est assez compliqué à appréhender au début mais en pratiquant, l'organisation vient naturellement, cela dépend de l'individu et de sa vision des choses. Vu que mon projet concerne de la 2D et que je désires générer aléatoirement une carte, je dois pour cela mettre un noeud "tilemap 2D". Comme je l'ai dis plus haut, ce sont des noeuds, pas des objets et donc les scripts s'attachent et s'organisent sur le noeud qui le concerne. Par exemple, le script sur mon noeud "tilemap" se charge de générer le terrain de jeu et à placer mon point de départ, soit le quartier général et un bulldozer. Le script de la camera gère la camera, du noeud "camera2D", pour le déplacer et le contraindre à des évènements bien précis que j'exposerai plus tard. Chose importante dans Godot: la manière de positionner les noeuds aura un impact sur la visibilité de ceux-ci, je m'expliques: j'ai deux noeuds "simples", "BuildingObj" et "unitObj", qui doivent contenir respectivement les bâtiments et les unités. J'aurai très bien pu mettre directement ceux-ci en tant qu'enfants, juste après "showpoint" mais en fonction de la génération de chacun, il y aurai des problèmes à long terme, comme une unité qui se cacherai derrière un bâtiment. Or, l'unité doit être visible, en tout circonstance, donc on dessine le bâtiment d'abord, puis l'unité par dessus. En fait, c'est comme si on posait une feuille transparente sur une feuille blanche. Faire l'inverse cacherai l'un d'entre eux.
Contribution le : 21/09/2021 09:30
|
|
![]() ![]() |
|
Re: Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Salut WinZs,
C'est bon à savoir pour la partie VR ! webm et ogv concerne que la VR ou n'importe quel vidéo ? Par exemple, une vidéo d'introduction à l'ouverture du jeu ? Citation :
Dans l'état actuel, oui, car je dois souvent aller chercher des informations du Tilemap pour les autres scripts des noeuds enfants. Par exemple, récupérer les coordonnées X & Y du monde converti en pixel. Donc ça me semblait judicieux de le mettre en root, ça reste un node2D mais en tant que varient après tout. --------------- Bien que j'ai mis en place la base, je dois configurer celle-ci. Afin de pouvoir générer une carte, je dois lui indiquer les "tuiles" comme matière première. Vu que je me concentre sur la mécanique d'abord, je n'ai pas pensé utile de faire des textures élaborées, ça viendra après. Au départ, j'avais réalisé un code qui prenait aléatoirement un point, le définissais comme une tuile de terre puis je faisais faire un second passage pour créer des îles (ou des continents si ces même "îles" se touchent) et un troisième passage pour ajouter des "ilots" de rocher sur la terre. Ça faisait le travail, mais ça me posait problème, car dans le jeu original, j'avais un concept à conserver: que le monde est rond, c'est-à-dire que si je vais à l'extrême gauche, je dois voir ce qui se trouve à droite. Or, mon générateur, si je collais une copie de l'original à côté, ça n'était pas du tout raccordé ! Il fallait que je trouve une solution, que j'expliquerai dans un prochain post.
Contribution le : 22/09/2021 08:50
|
|
![]() ![]() |
|
Re: Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Ah, c'est embêtant...
As-tu tenté cette solution ? Sinon, essaies un peu ? Tu m'en dira des nouvelles.
Contribution le : 23/09/2021 08:10
|
|
![]() ![]() |
|
Re: Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Citation :
C'est une bonne chose que tu sois passé à autre chose après la disparition du BGE, tu pourras continuer tranquillement à réaliser des projets dans de bonnes conditions. J'espère que ce sera le cas ![]() Citation : ...est-ce qu'un NativeScript ne pourrait pas permettre de lire... Il y a bien "VideoStreamGDNative" dans la documention qui pointe vers ce git, ça semble être un dépendance qui permet de, mais je peux pas l'affirmer. Citation : J'arrête de polluer ton topic Redstar... Tu ne pollues pas, si je peux aider à résoudre ton problème, ça peut me faire plaisir ![]() ----------------------- La solution, je l'avais trouvée, c'était l'outil nommé "OpenSimplexNoise". Cet outil permet de générer une image type nuage (comme on ferait dans gimp), dans lequel on peut régler les paramètres de taille, l'octave, la période, l'éparpillement et le "lacunarity" (mais je ne comprends pas ses effets, qui ressemblent à l'éparpillement). Un petit code ici. Afin de le rendre "raccordable", je devais le spécifier, puis "bloquer" l'objet (ou la variable). Ensuite, il me suffisait de calquer les tuiles selon la plage 0 à 1 d'un des canaux couleur (R,G,B) afin d'avoir quelque chose de plus réaliste. Ensuite faire des "clones" des tuiles du terrain généré et les disposer sur le pourtour. Voici un exemple de ce que ça donne. Le cadre rouge signifie mon terrain central, ce qui est autour sont les clones de ce terrain. J'ai encore un peu du mal à maitriser cet outil car rarement, ça me génère des toutes petites îles et ça me provoque des erreurs pour placer les points de ressources terrestre. Le prochain post, je vous parlerai de l'élaboration des unités et bâtiments et du déplacement Astar.
Contribution le : 24/09/2021 12:30
|
|
![]() ![]() |
|
Re: Godot Engine - Projet Arsenal |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
19/03/2016 15:30 De Belgique
Post(s): 2030
|
Bonjour tout le monde,
Donc, la configuration d'une unité: Tout comme se fut le cas avec le bge, il faut configurer des composant de bases qui constituent l'unité, comme la collision, l'image, l’interaction avec la souris et d'autre choses propre à l'unité. Et, cette fois-ci, j'ai choisi un noeud 2D classique, j'ai pas besoin de plus car pas de physique (attraction, je parles) nécessaire. La boite de sélection, c'est pour indiquer quelle unité sera sélectionnée ou non, le sprite animé, c'est pour changer l'image au moment ou l'unité dois tourner avant d'avancer, comme dans l'oeuvre original. L'encadré bleu ciel, c'est ce qui définit la zone de collision, on peut choisir un carré, ou une ellipse, ça dépends ce dont on a besoin. Dans mon cas, j'ai besoin d'un système de collision qui réagira au cadre se sélection que je dessinerai, afin de sélectionner plusieurs unités. Enfin, les deux timers, c'est pour gérer l'intervalle entre la transition d'image et une action. Tout comme le bge, on peut créer des signaux à la différence que ça fonctionne comme la connexion des actionneurs (actuators) pour générer une action pour le script. Autrement dit, quand je définis un temps x, quand il est écoulé, un signal est envoyé au script pour faire ce que contient le signal (sur BGE, delays = x -> controller en mode script). Enfin, je définis un groupe sur mon noeud principal pour utilisation ultérieur, je fais pareil sur mon noeud "area". Si j'ai besoin de déplacer mon unité entièrement, ce sera ce groupe là que j’appellerai. Si je dois interagir avec l'unité, ce sera l'autre groupe assigné à mon "area" que j’appellerai. J’envisagerai de rajouter un second groupe quelque part, afin de filtrer le type d'unité que je veux garder. Je précise que, dans le noeud "animated sprite", on peut changer la sprite si je génère autre chose qu'un bulldozer. Je précise aussi que le dessin que j'ai réalisé n'est pas définitif, c'est juste pour différencier la seconde unité que j'intégrerai. Il faudra que je fasse de jolies textures quand tout sera au point.
Contribution le : 27/09/2021 10:21
|
|
![]() ![]() |