Je vais fonctionner un petit peu à l'envers, car je vais vous présentez le plus intéressant et finir par vous expliquez mes petits traquas (et si vous avez lu la description de ce blog, vous comprennez que c'est du au choix artistique).
Les hamsters
Parlons des plus intéressants, des plus importants, mais surtout des plus mignons, les hamsters !
public string name; // Nom de l'hamster
public Genre genre; // Genre de l'hamster
public int age; // Age de l'hamster
public State state; // Etat de santé de l'hamster
public float thirsty; // Soif de l'hamster
public float starvation; // Faim de l'hamster
public Color[] colors; // Couleurs de l'hamster
Voici quelques paramètres concernant les hamsters, chacun ont : un nom, genre, âge, etc...
J'aimerais ne pas leur mettre une barre de santé, mais plutôt un "état", c'est peut-être finalement une fausse bonne idée, mais ça peut devenir intéressant.
Comme vous pouvez le voir, colors
est au pluriel, il est possible d'avoir jusqu'à 3 couleurs personnalisés différentes par hamster, nommé comme suit : Primaire, Secondaire et Tertiaire.
Les couleurs sont directement modifiés dans le shader (c'est à dire entre la demande d'afficher et le fait qu'il soit affiché).
Je pensais créé de façons dynamique une texture pour chaque hamster, mais j'ai préféré laisser la carte graphique y travailler, plutôt que le GPU (surtout que ça libère naturellement de la RAM).
Et comme j'ai pu déjà vous en parler, les couleurs seront un aspect très important pour les hamsters.
Nom-nom
Finalement, pas grand chose à dire, simplement que les hamsters ont une petite animation pour manger, sous 2 sprites. Au passage, les texture sheet sont paramétré ainsi :
{
"type": "TextureSheet",
"content": {
"texturePath": "hamster_0.png",
"frameSize": {"x": 32, "y": 15}
}
}
C'est très simple, mais efficace !
Du texte
Il est assez difficile pour moi, de mettre (même temporairement) du texte de mauvaise qualité à l'écran. Une solution que j'avais utilisé pour Minesweeper Basic était d'avoir une police d'écriture n'ayant pas de bords adoucies. mais vous le devinez bien que ça limite énormément mes possibilités.
Je dois avouer que pour moi le soucis était surtout d'adapter cette police d'écriture à différente taille d'écran. Car en plus l'interface utilisateur s'adapte à l'écran en grandissant si nécessaire.
Dans les anciens jeux, si on y joue ajourd'hui, avec nos grand écran, on peut souvent remarquer que soit l'interface sera ridiculement petit, soit elle sera agrandi sans modifier la taille du texte. (ce qui donne un grand espace pour un petit texte comme on le voit sur l'image).
Comment on affiche du texte ?
Il y a en soit 3 méthodes pour afficher du texte à l'écran :
1. Bitmap
On génère celon la police d'écriture, une texture qui contient alors tous les charactères souhaités et disponibles.
Un bitmap que j'ai généré dans le moteur XYEngine
Pendant sa génération, on récupère toute les informations le concernant et où précisément on le dessine dans la texture. Ensuite, pour afficher n'importe quel texte à l'écran, on génère un maillage qui va découper chaque lettre que nous avons besoin pour l'afficher à l'écran.
Ainsi, nous avons besoins que d'une seule texture, pour afficher notre texte.
C'est le moyen le plus simple à faire, mais bien-sûr si on souhaite un texte ayant une taille plus grande ou plus petite, on doit alors créé une nouvelle texture pour celui-ci.
C'est même là qu'on comprends que le texte sur l'image ci-dessus reste en petit, car le texte est affiché via un bitmap qui une fois agrandi donnerait un résultat flou.
2. Vectoriel
Techniquement, si on souhaite généré une texture à partir d'une police d'écriture, il faut que cette police d'écriture soit vectoriel, ce qui permet de généré la texture sur n'importe quel taille.
Alors pourquoi ne pas l'utiliser tout simplement ?
Parce qu'il est assez couteux de le produire, les fichiers vectoriels ne sont pas des pixels, mais plutôt des points qui se relis, aini il suffit selon la taille de garder une cohérence entre les distances des points pour les reliers et afficher l'image en pixel.
Mais comme je l'ai dit, c'est très couteux, peu importe la taille de police...
On l'utilise surtout pour les logos, ainsi, si on souhaite le généré en grande ou petite qualité ça se fait simplement.
2. SDF (Signed Distance Field)
C'est peut-être la meilleur solution possible !
Elle a été popularisé par Valve (oui, oui les créateurs de Steam) et ce qui est intéressant c'est qu'avec une seule texture il est possible d'afficher du texte plus grand ou plus petit sans perte de qualité notable.
C'est un cas un spécial, il suffit de regarder la texture qu'il faut générer :
Un SDF que j'ai généré dans le moteur XYEngine
C'est étonnant, mais cette texture toute flou permet d'afficher du texte sur des résolutions différentes sans perte de qualité. Mais il demande un effort en plus, car il faut interpréter cette texture dans un shader, pour donner un affichage correcte.
Mon choix
En soit, que ce soit du bitmap ou du SDF les deux sont plutôt correct, mais je me suis plutôt intéressé à un cas plus classique et simpliste qui est le bitmap.
Principalement, parce que je n'ai pas eu le temps de m'intéressé un peu plus au fonctionnement du SDF. Je pourrais bêtement copier des shaders fonctionnant sans soucis, mais à ce niveau là, pourquoi ne pas retourner tout simplement sur Unity.
Mais je pense, bien-sûr, ajouter la possibilité d'avoir du texte SDF dans de futur mise à jour !
Je ne suis pas un artiste
Je m'efforce à réaliser les choses moi-même tout en essayant d'avoir un résultat qui me plait sans que ça fasse trop amateur.
En 2D, sur le choix de faire un jeu top-down, il y a tout de même plusieurs manière de dessiner par exemple un mur. Bah sachez simplement que je n'arrive à faire un choix.
J'ai testé beaucoup de style et j'ai vraiment du mal à savoir lequel est le plus adapté. Donc, j'ai en soit passé énormément de temps à dessiner et à mettre ça en place dans le jeu pour finalement pas grand chose...
J'ai mit alors en pause le design et je verrais ça plus tard, pour le moment je vais simplement me contenter d'un sol et d'attendre de réaliser certaine mécanique pour voir quel style serait le plus adapté.
Donc dans le futur, si vous voyez des textures très simpliste ou de bête carré coloré, vous comprendez que c'est parce que je n'ai pas réussi à me décider sur le style à appliquer sur le jeu. (J'y ai vraiment passé des heures et des heures...)
Je met beaucoup, beaucoup de temps à sortir mes blogs...
C'est qu'il est assez difficile de travailler sur des choses qui sont en plus très mals documentés. Rien que pour la police d'écriture, le fait de l'écrire sur une texture a été un réel défi de compréhension (même la documentation en C était illisible).
J'ai toujours cette objectif de faire un travail professionnel et comme il y a différent système à prendre en compte, ça peut vite devenir très difficile et prendre plus de temps que prévu !
Mais le résultat me plait et me permet au moins d'avancer efficacement.