Hachaisse le site

28 mai 2013

Tutorial pour Unity 3D (1)

Classé dans : Article, Informatique — Mots-clefs :, , — admin @ 19 h 52 min

Introduction

Qu’est-ce qu’un jeu vidéo ?

Nan mais si vous avez besoin de le savoir, c’est que vous sortez trop souvent de votre grotte. Et je ne vois pas l’intérêt de vous parler. Vous auriez mieux fait de finaliser l’objectif ultime de l’être humain : se sédentariser suffisamment pour ne plus avoir besoin de sortir de chez soi.

Qu’est-ce qu’Unity3D ?

Ça c’est une question intéressante !

C’est un logiciel qui vous place dans un écosystème de développement de jeux.

-        Il est composé d’un moteur 3D pour vous permettre d’y mettre différents objets 2D/3D.

-        D’une gestion d’animation pour vous permettre de donner vie à vos objets.

-        Mais aussi le processus de traitement, qui permet de programmer les actions de vos objets.

-        Sans oublier le gestionnaire de ressources (L’Asset Store) qui permet d’utiliser ou d’acheter des composants pour votre jeu (images, modèles 3D, musiques et même des bouts de code).

Le principal atout de cet environnement, c’est qu’il est conçu pour le multiplateforme, pour le développement sur Mac ou PC. Mais aussi en sortie finale. Il est possible avec le même jeu d’en faire :

-        un pour le web (flash ou webplayer qui  vous permet de jouer depuis n’importe quel browser)

-         un pour ordinateur avec un .exe habituel

-        Mais aussi une application iPhone ou Android.

Sans rien toucher ! Tout est dans le même langage (le c# !), donc plus besoin d’apprendre différents langages par système (comme le java pour Android habituellement).

Remarquons qu’il est possible d’exporter le projet Unity3D en version java pour Eclipse et de pouvoir le modifier par la suite.

Mais j’ignore si cela est possible dans le sens inverse.

On se demandera pour qui est conçu ce petit bijou ?

Et bien à « tout le monde » !

Que cela soit pour des entreprises ou personnellement. Pourquoi ? Et bien c’est simple, il est « gratuit » pour la plupart des fonctionnalités. (IPhone et Android nécessite au minimum 400$ chacun pour la version de base).

Autrement la sortie en Webplayer ou Windows ou Mac est gratuite, la seule vraie contrainte étant le logo Unity3D qui est obligatoire au démarrage du jeu. Ce n’est franchement pas grand-chose !

Ensuite si vous en avez vraiment besoin de manière un peu plus pro, il coûte « seulement » 1500$ (on ajoute 1500$ pour chaque option comme iPhone ou Android, cependant si vous avez pris la version 400$ avec la version gratuite d’Unity3D, seul le complément sera demandé).

Alors, attention ! Il y a eu en avril 2012 une promotion exceptionnelle qui offrait la version Android et iPhone gratuitement, 800$ d’économie, j’ai regretté de l’avoir loupé.

J’ignore si cela peut se reproduire mais cela vaut le coup de vérifier de temps en temps en cas de besoin.

Le logiciel en action.

Installation

On télécharge simplement le logiciel depuis le site officiel (http://Unity3D.com/unity/download/)

Ne vous en faites pas, il ne fait même pas 700mo !

Disponible pour PC ou Mac, attention, cela influe sur la sortie de projet, seul un dev sur Mac permet de faire un jeu Mac et seul un dev sur PC permet de faire un jeu pour PC.

Présentation

Voici la bête :

Il est possible de configurer sa présentation soi-même ou d’en choisir une prédéfinie dans la liste en haut à droite de l’écran.

Exemple en « 4 split »

Les onglets :

Scene : vue 3D de votre scène, pour l’instant  rien de visible car il n’y a que la caméra de base. Mais c’est ici qu’on place nos objets 3D.

Game : L’aperçu en temps réel de votre jeu. Permet de lancer le jeu en « debuggage » et de voir tout ce qui se passe.

Projects : liste des fichiers que votre jeu utilise ou peut utiliser en cours de route.

Si on copie un fichier dans le répertoire Assets de votre projet, il s’importe automatiquement dans le logiciel.

Plus il  y a de fichiers, plus l’application sera grosse !

Hierarchy : liste des objets sur la scène.

Inspector : propriétés d’un fichier ou d’un objet sélectionné.

Il y a d’autres onglets qu’on affiche ou non selon les besoins. Exemples.

L’Asset Store :

C’est ici qu’on retrouve la liste des ressources (image, objet 3D, sons, code source pour des scripts, etc) gratuites ou non.

Il y a des promotions spéciales, comme actuellement le mixamo store à 50%. C’est une liste d’animation pour tout type de jeux disponible pour 1 an. C’est intéressant mais cela coûte quand même 750$ par an. Il vaut mieux être sûr de ce dont on a besoin et d’être vraiment dispo pour en profiter à fond.

J’ai récemment vu que « régulièrement » du mardi  au mercredi il y a plusieurs choses en promo également.

C’est souvent intéressant vu certains objets !

L’onglet Animation :

Permet de gérer les animations basiques.

Exemple, on clique sur la frame 0, on place un objet, on demande l’enregistrement et on va à la frame 10 et on déplace l’objet.

Celui-ci durant la lecture fera le mouvement du point A au point B. il gère lui-même « le virage » de la course si ce n’est pas une ligne droite.

Mecanim/Animator : le nouvel outil d’animation d’Unity3D v4 que l’on verra plus tard.

Explication rapide : dans l’ancienne version, il fallait ajouter une animation à un objet avec l’aide d’un outil 3D et cela rendait l’animation disponible pour cet objet uniquement. Maintenant, une animation prévue pour un « squelette » 3D sera disponible pour tous les objets du même type.

Exemple : si j’ai une animation de marche à pied pour un être humain, il sera disponible pour un autre. Mais pas pour un chien. Car le squelette interne de l’objet ne sera pas défini de la même manière.

Création d’un jeu animé.

La seule notion requise ici est la connaissance de c# !

Sauf erreur on peut faire la même chose en javascript, mais il faudra recoder de la bonne manière.

Pour bien comprendre le logiciel, le mieux est de suivre un exemple.

Tout d’abord, il faut partir sur une idée simple, ce qui est souvent difficile. Personnellement je vois toujours un truc trop compliqué et je m’emmêle les pinceaux et le projet finit par partir en vrille et disparaître.

Donc on va oublier Skyrim, WoW ou autre jeux de suite !

Mais ne soyez pas déçus ! Nous allons faire un jeu de stratégie, d’action et de suspense. Un jeu qui demande de l’adresse et du doigté.

Un formidable jeu de bataille.

Nan nan, pas un jeu de bataille navale ! Juste une bataille de carte…

Comme je disais, faut vraiment faire simple mais rien que cet exemple nous montrera la notion d’objet 3D, de scripts d’animation pour animer un petit peu les cartes avec du code, de notion de caméra, de GUI (L’interface utilisateur comme le menu)…

Etc.

Je vous recommande de partir sur un simple jeu de carte (As, Roi, Dame, etc) pour vous faire la main et avoir un aperçu global d’un projet complet, des interactions des scripts…

Voici le résultat que l’on peut obtenir assez facilement :

http://media.visyr.ch/Unity3D/Tuto01/

Création du projet :

Si vous venez de lancer le projet, sauvegardez-le directement dans un répertoire, ici Tuto01.

Ne jamais oublier de sauvegarder avec un bon CTRL+S (ou le menu) ! L’exécution du projet en « debug » ne sauvegarde pas. Les habitués seront perturbés, mais faut être au courant. J’ai déjà perdu des heures de boulot en plantant pendant l’exécution du projet.

Même la sauvegarde d’un script depuis mono ne sauvegarde pas la scène en cours d’Unity3D.

Création d’un script et du GUI :

L’interface utilisateur sera basique mais il est possible de le perfectionner avec des scripts et des ressources sur l’Asset Store.

Création du premier script c# :

Qu’on nommera MyGUI. Attention, contrairement à Visual Studio, Unity3D n’accepte pas qu’une classe ne porte pas le même nom que son fichier. Sûrement une contrainte lié à Java ou Mono derrière.

Ne pas nommer son fichier GUI, car GUI est un mot clé d’Unity3D et on risque de le « surcharger » et le GUI standard ne serait plus disponible.

Quand on lance le fichier (par double clic par exemple) on tombe directement sur Mono qui permet de dev  du c# sur des systèmes différents.

C’est nettement moins bien que Visual Studio selon moi, mais l’essentiel est présent.

Pour l’instant on se contentera d’un simple affichage de texte pour vérifier l’exécution du script.

void Start () {

Debug.Log(« MyGUI – Start »);

}

Si vous lancez le projet depuis Unity3D avec l’aide du bouton play, il ne se passera rien et votre fenêtre Game n’affichera rien d’autre que votre fond bleu.

Votre script doit être lié à un élément du jeu.

Dans le menu GameObject on peut créer différent objets :

Mais pour l’instant on se contentera de créer un objet « vide » avec le « Create Empty »

Ça sera un objet transparent qui servira de noyau.

Remarque : on aurait très bien pu affecter le script à la caméra déjà existante.

On retrouve donc l’objet que je renomme Core dans l’onglet Hierarchy :

Si on regarde dans l’Inspector on retrouve ceci :

Sa position dans la scène, sa taille etc.

Ici cela a peu d’importance car il est invisible.

On peut lui ajouter des options avec AddComponent ou juste glisser un composant de notre projet comme notre script dans la fenêtre Inspector.

D’où l’intérêt de bien faire son interface !

Sur un seul écran je suis généralement comme ça :

J’ai une vision de ma scène, de l’affichage en temps réel et des 3 onglets principaux.

Je drag&drop (je glisse l’objet d’un point à l’autre) le script MyGUI à l’Inspector :

On retrouve mon script comme prévu dans l’Inspector, on y trouvera aussi toutes variables déclarées « public » pour les modifier depuis Unity3D plutôt que dans Mono.

Si je lance la lecture on retrouve ceci :

Rien !

Normal : nous n’avons pas d’objet autre qu’une caméra et un objet invisible, mais en dessous on trouve la fenêtre de debuggage avec mon texte !

Si on clique dessus cela nous ouvre l’onglet de la console :

En général je garde cette fenêtre pour l’afficher à côté de la fenêtre Game.

Donc bien entendu, la méthode Start ne s’exécute qu’une seule fois et n’est jamais rappelée.

Maintenant nous pouvons créer notre GUI !

Nous retournons dans notre code et ajoutons ceci :

void OnGUI()

{

if( GUI.Button(new Rect(10f,10f,100f,30f), « Test ») )

{

Debug.Log(« Test »);

}

}

La méthode OnGUI est appelée à chaque frame pour afficher uniquement des objets de type GUI.

Si on souhaite faire quelque chose avec un objet 3D ou autre, on fera le code dans Update() qui est appelé également à chaque frame.

En comparaison d’un bouton standard du c#, il n’y a pas d’event pour l’appui. On ne peut même pas tester si le curseur survole le bouton. Il faudra le faire soi-même en testant la position de souris.

Il faut pour ce genre d’option passer par un autre principe que l’on ne verra pas ici. Je ferai peut-être un prochain tuto dessus.

On va se contenter d’une simple condition test s’il est cliqué.

De plus, contrairement à une application logicielle, un moteur 3D fonctionne différemment. L’affichage « s’efface » continuellement et réactualise tous les objets présents (visible ou non), donc c’est dans l’OnGUI qu’on créera le bouton pour qu’il soit toujours présent, et non pas dans le Start.

Il faudra donc penser à une condition pour masquer le menu par la suite.

Seul les plus traditionnels (pour ne pas dire vieux de la vieille) dans mon genre ont l’habitude de ça car c’est ainsi que fonctionnait DirectX en C et on devait coder nous-même l’effacement et le ré affichage.

Maintenant nous avons un simple bouton qui sera visible à la position inscrite si on lance play.

Lorsque l’on clique dessus, le texte « Test » s’ajoute dans la console.

Seconde partie du tutorial : http://raphp.fr/blog/?p=227

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