Unity 3D est un engin de jeux complets avec un éditeur. Si Unity vous est totalement inconnu, je vous recommande de visiter leur site:
http://unity3d.com/. Ce tutoriel assume que vous avez déjà un peu joué avec Unity 3D et que vous êtes familier avec l'interface. Les scripts sont en C#. Le but du tutoriel est d'apprendre à instancier des objets durant l'exécution du jeu et non dans l'éditeur.
|
L'éditeur d'Unity. |
La première étape consiste à créer un nouveau projet dans Unity. Je l'ai appelé
"
RandomObjectsCreator". À la création du projet, Unity crée les répertoires
Assets,
Library et
Temp. Le répertoire
Assets sert de
librairie pour les objets que nous ajoutons aux jeux. C'est le seul des trois
répertoires que nous allons utiliser.
L'instanciation d'objet dans Unity se fait à l'aide de prefabs. Prefab
est la version raccourcie de Préfabriquée. Le prefab est l'équivalent
d'un plan de construction. L'objet a telle forme, telle couleur et va
réagir de telle et telle façon dans telles et telles conditions. Une fois
le prefab créé, il est possible de créer des milliers de versions du
même objet à l'intérieur du jeu et chaque objet aura la forme et le comportement
spécifié dans le prefab.
Pour créer un prefab, aller dans l'onglet
Projet->click droit->Create->Prefab.
Renommer ce prefab "Cube".
|
Menu pour la création d'un prefab. |
L'icône du prefab est une boîte blanche vide. Cette icône indique que le prefab est vide. Pour le remplir, nous allons ajouter un cube à la scène. Dans le menu supérieur:
GameObject->Create Other->Cube.
|
Création d'un cube dans Unity. |
Dans le menu "Hierarchy", sélectionnez
Cube et glissez le sur le prefab
Cube. L'icône du prefab devient une boîte bleue, indiquant que le prefab contient un objet. Vous pouvez maintenant effacer le Cube de la scène. Si vous glissez le prefab Cube sur la scène, un cube apparaît! Magika!
|
Ajout d'un objet au prefab. |
Il est temps de créer notre script. Dans le tab "Project",
click droit->Create->C# Script.
Nommons-le: "RandomObjectsCreator". En double cliquant sur le script, l'éditeur par défaut de Unity
ouvre le script. Dans mon cas, c'est MonoDevelop qui est ouvert. Unity a créé automatiquement une
classe nommée
RandomObjectsCreator avec la fonction Start et la function Update:
using UnityEngine;
using System.Collections;
public class RandomObjectsCreator : MonoBehaviour
{
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
}
La classe hérite de la classe générique MonoBehavior. Les scripts attachés
sur des objets dans la scène doivent obligatoirement hériter de MonoBehavior
pour fonctionner. La classe MonoBehavior permet d'accéder aux propriétés
et aux composants de l'objet auquel est attaché le script.
Le code pour instancier un prefab est:
Instantiate( _prefab, position, rotation);
La fonction Instantiate va créer un clone du prefab contenu dans la variable _
prefab,
l'afficher dans la scène à la position "position" avec la rotation "rotation" et va
retourner une référence de l'objet avec le type
Object. Le type
Object
est le type de base en C#. Dans le précédent code, nous n'avons pas mis de variable
pour récupérer la référence à l'objet. Pour ce faire, le code sera:
Transform newGameObj =
Instantiate( prefab, position, rotation) as Transform;
Transform est un type générique d'Unity qui permet d'accéder à toutes les
propriétés de l'objet de la scène. Le
as Transform est un casting.
Instantiate
retourne une référence de type
Object. Or, nous voulons une référence de type
Transform. Nous indiquons la transformation de la référence de type
Object
en une référence de type
Transform avec le
as Transform. Il est à remarquer
que cette notation est identique à la suivante:
Transform newGameObj =
(Transform)Instantiate( _prefab, position, rotation);
Personnellement, je préfère le
as, car c'est plus proche de l'anglais que
l'opérateur de casting avec parenthèse.
Pour faire apparaître un cube, le joueur doit peser sur la touche espace. Le code
est entré dans la fonction Update qui est appelée chaque fois que l'écran est
rafraichi. La commande nécessaire est:
Input.GetKey("space");
Cette fonction retourne vrai si la touche espace est enfoncée et faux autrement.
La position de notre cube sera choisi aléatoirement dans une sphère d'un rayon
déterminé par la variable
_radius:
Vector3 rndPos = Random.insideUnitSphere * _radius;
et avec une rotation aléatoire:
Quaternion rndRotation = Random.rotation;
Le script complet est le suivant:
using UnityEngine;
using System.Collections;
public class RandomObjectsCreator : MonoBehaviour
{
public Transform _prefab;
public float _radius = 10;
// Update is called once per frame
void Update ()
{
if ( Input.GetKey("space") )
{
//Create a random position.
//The insideUnitSphere return a random position inside a sphere of radius 1.
Vector3 rndPos = Random.insideUnitSphere * _radius;
//Create a random rotation.
Quaternion rndRotation = Random.rotation;
//Instantiate a new object at a random position with a random rotation.
Transform newGameObj = Instantiate( _prefab, rndPos, rndRotation) as Transform;
}
}
}
Ce script doit être attaché à un GameObject dans la scène pour fonctionner. Nous allons
créer un GameObject vide. Dans le menu
GameObject->Create Empty.Un objet nommé
GameObject est crée. Renommons le
ObjectsCreator. Sélectionner
ObjectsCreator
et glisser le script
RandomObjectsCreator dans l'onglet Inspector. Le script
contient deux variables
prefab,
radius. Glisser le prefab
Cube
sur le
none à droite de la variable
prefab. Le nom Cube apparaît avec
une icône de manipulateur 3D.
|
Ajout d'un script et assignation de la variable prefab aux prefab Cube. |
Appuyer sur Play et ensuite sur la touche "espace". Des cubes vont apparaître aléatoirement
à l'écran. Je vous recommande d'ajouter une lampe directionnelle dans la scène pour embellir
votre rendu.
-->
Aucun commentaire:
Enregistrer un commentaire