Hachaisse le site

11 juin 2013

Tutorial pour Unity 3D (2)

Classé dans : Article, Informatique — Mots-clefs :, , — admin @ 13 h 31 min

Première partie du tutorial : http://raphp.fr/blog/?p=167

Création d’un simple Menu fonctionnel

public enum MenuStep

{

Start,

VideoSettings,

InGame,

MenuInGame,

Player1Win,

Player2Win

}

protected MenuStep mMenuStep = MenuStep.Start;

void Start () {

Debug.Log(« MyGUI – Start »);

}

void Update () {

}

void OnGUI()

{

float MenuY = 10, MenuHeight=  30, MenuBlank = 5, MenuWidth = 200;

switch(mMenuStep)

{

case MenuStep.Start:

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Démarrer une partie ») )

{

mMenuStep = MenuStep.InGame;

}

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Configuration vidéos ») )

{

mMenuStep = MenuStep.VideoSettings;

}

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Quitter le jeu ») )

{

Application.Quit();

}

break;

case MenuStep.VideoSettings:

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Fullscreen ») )

{

Screen.fullScreen = !Screen.fullScreen;

}

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Retour ») )

{

mMenuStep = MenuStep.Start;

}

break;

case MenuStep.InGame:

break;

case MenuStep.MenuInGame:

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Retour ») )

{

mMenuStep = MenuStep.InGame;

}

if( GUI.Button(new Rect(10f,MenuY += MenuHeight + MenuBlank,MenuWidth,MenuHeight), « Quitter la partie ») )

{

mMenuStep = MenuStep.Start;

}

break;

case MenuStep.Player1Win:

break;

}

}

On peut lancer play de suite, mais comme j’utilise 2 notions tel que le Screen.Fullscreen et le Application.Quit(), je vous montre de suite l’étape de sortie d’un projet car ces 2 options n’effectuent rien en mode lecture (debug) d’Unity3D.

Nous analyserons dans un autre chapitre les différentes options de sortie de projet, pour PC ou Android.

Mais pour l’instant on se contente d’une sortie simple.

Depuis le menu File -> Build settings…

Nous retrouvons les options de sortie : Windows ou Mac, ou Android et iPhone disponible selon la licence.

Il est important de noter qu’une fois un type de projet choisi, avec le player settings, l’Inspector vous donne différentes informations importantes. Modifiable selon les besoins.

Ensuite une fois choisi le chemin de sortie, vous pouvez exécuter le projet.

Comme je n’ai rien modifié dans les options de base on retrouve au démarrage ceci :

Ensuite notre application avec un menu des plus simples !

Le menu Démarrer une partie qui lance le jeu, c’est-à-dire un joli fond bleu inutile.

Le menu Configurations vidéos vous permet de passer en plein écran et inversement.

Et Quitter le jeu vous permet de … bah vous avez compris.

En fait, comme certains vont peut-être comprendre, techniquement il est possible de faire une application « Software » sans jeux 3D ou autre pour Android et iPhone rien qu’en manipulant le GUI.

Dans mon domaine professionnel c’est ce qu’on va faire. Nous avons un vrai projet en c# que nous souhaitons faire en version Web, Android et iPhone.

Problème : chaque outil demandant en général un langage différent, le support de différents outils et surtout le recodage de certaines classes sont une perte de temps et un support fastidieux.

Grâce à ça, il est possible de faire une app simple et d’avoir un minimum de support pour un petit logiciel de saisie simple.

Après rien n’empêche d’ajouter un petit côté graphique sympa même pour une app bureautique.

Ou même de reconvertir la boite en société de jeux vidéos. ;)

Mais revenons à notre jeu.

Création des objets 3D

Pour être honnête, j’aurais pu vous faire un topo sur la modélisation d’objet sur 3D max ou autre, j’ai touché un tout petit peu et faire des cartes n’aurais pas été un problème. Mais c’est vite long et chiant pour quelqu’un comme moi qui ne suis pas graphiste.

Trouver les images pour les matériaux (texture des objets) et faire un mapping proprement, …

Ou alors on peut même trouver les objets directement sur le net. C’est tout à fait faisable.

Techniquement, j’estime que mon temps coûterait plus cher qu’il ne faudrait et que je pourrais rentabiliser cela autrement.

Donc voilà, je me suis servi de l’Asset Store d’Unity3D ! En principe, sauf contre-indication, tout est utilisable même commercialement.

J’ai fait une recherche simple avec « Cards » et voilà en deux secondes ce que l’on trouve :

Bingo !

Pour la modique somme de 2$ je peux trouver mon bonheur, j’ai gagné un max de temps.

Alors bien sûr il ne faut pas succomber à chaque tentation de gagner un peu de temps ! Mais il suffit d’un minimum de réflexion pour comprendre que 2$ pour des heures de boulot c’est rentable.

Pour être sûr de son coup on va analyser le packaging !

On clique sur le moins cher et on obtient les détails, commentaires du créateur, date, etc.

On peut également consulter les objets en dessous en cliquant sur les objets .fbx (les objets 3D de base) ou .prefab (les objets préfabriqué que l’on étudiera plus tard).

Au lieu d’avoir « import » vous trouverez « Buy » mais j’ai un peu d’avance et je l’ai donc déjà acheté.

Par la suite, vous pouvez l’importer depuis toutes les installations Unity3D loggées à votre nom. En gros si vous avez 2 pc, vous n’avez pas à transférer les packages, il suffira de retélécharger depuis votre compte dans l’asset store.

Donc il vous propose de l’importer dès l’achat (mastercard, paypal etc.)

Vous pouvez retrouver les objets avec le bouton en haut à gauche (juste à côté de la maison).

Il est important de vérifier de temps en temps les packages achetés, ils sont souvent mis à jours par l’éditeur et il faut re-télécharger la dernière version.

Une petite phrase vous l’indique à côté du bouton import qui se transforme en bouton update si c’est le cas.

Exemple :

Donc nous lançons l’import :

Il est possible de ne prendre qu’une partie du package, par exemple, je n’ai besoin que des cartes de cœur, je peux choisir chaque objet (en n’oubliant pas les matériaux/textures) et ne pas prendre d’autres en les décochant. Pratique pour gagner de la place.

Ici dans ce package, il y a une table de poker, totalement inutile et qu’on pourrait ignorer.

C’est assez important si on souhaite une application pas trop volumineuse.

La taille d’une app Android est limitée par exemple. Il faudrait faire un système de téléchargement de ressources et s’arranger pour que notre jeu n’ait pas besoin des objets directement.

Par programmation on peut chercher une ressource par son chemin, mais il faudra alors le placer soi-même sur la scène aux bonnes coordonnées.

Pour l’instant on se contente d’un jeu de carte pc alors on ne se souciera pas de cela.

Dans mon projet j’obtiens ceci :

La scene01 c’est ma sauvegarde de notre scène que je n’ai pas précisé durant l’explication.

Si vous avez bien suivi, vous avez noté mon explication sur les besoins de sauvegardes fréquentes et il faudra l’assumer de vous-même !

Autrement vous le payerez cher !

Il y a dans ce package la scène de l’éditeur pour exemple. Ce n’est pas toujours le cas, mais c’est une chose que j’apprécie dans l’asset store, c’est souvent assez complet.

Retournons donc à notre création de jeu.

Il y a le répertoire Models qui représente l’objet 3D de base. C’est-à-dire une carte totalement blanche.

Il y a le répertoire prefabs, c’est ce qu’on appelle un objet préfabriqué et destiné à un certain usage. Dans notre exemple ça sera les 52 cartes avec chacune leur texture définie.

Si on sélectionne un prefabs/cards/hearts/2c je me retrouve avec l’aperçu de la carte 2 de coeur :

On y constate qu’il s’agit bien d’un objet 3D (mesh).

Les options de rendu de l’objet, ombre etc.

L’animation de l’objet, ici il n’y en a pas, mais souvent un personnage aura des animations de bases comme « idle » (l’attente), « Walk » pour marcher, etc.

Et on pourrait choisir l’animation par défaut à exécuter en boucle ou non.

Ici il n’y en a pas, et comme ma carte ne contient pas de sous objet « Bones » (Squelette), il ne lui serait pas possible d’affecter une animation par le Mecanim, donc si on souhaite l’animer, ça sera avec des options de base, comme la rotation, la translation, etc.

On trouve aussi la texture utilisée, modifiable mais inutile, c’est un prefab prévu pour cette texture.

Donc on va juste glisser l’objet « 2h » sur la scène et la placer un peu.

Alors j’ai de suite repositionné depuis l’Inspector la carte en x :-0.2,y :0,z :0

Une rotation en x de 180 sinon elle n’était pas dans le bon sens. Et j’ai déplacé ma caméra en : x :0,y :0,z :-1.

Car sinon c’était trop loin et c’était invisible.

Nous avons l’aperçu dans la fenêtre game (aperçu réel en jeu).

Et nous voilà donc avec un premier objet sur notre scène (Sauvegardez… un petit ctrl-s n’a jamais tué quelqu’un ! C’était mon dernier avertissement !).

Maintenant on peut ajouter une 2ème carte et les séparer dans chacun des écrans pour simuler la carte retourné de chaque joueur. (la 2è carte en 0.2,0,0)

Et on les renomme PlayerOne et PlayerTwo.

Troisième partie du tutorial : http://raphp.fr/blog/?p=312

Pour discuter de l’article, c’est ici : http://raphp.fr/fofo/viewtopic.php?f=2&t=2339

Pas de commentaire

Pas encore de commentaire.

Flux RSS des commentaires de cet article. Adresse web de rétrolien

Désolé, les commentaires sont fermés pour le moment.

Propulsé par WordPress