Unity

De EduTech Wiki
Aller à : navigation, rechercher

1 Présentation

Unity est un moteur de jeu et un environnement de développement capable de créer des jeux en 2D ou en 3D. La licence personnelle est gratuite et disponible sur mac et windows. Les licences professionnelles sont payantes. Il y a un asset store accessible sur le site officiel et directement dans la fenêtre d'Unity pour acheter ou télécharger gratuitement (dépend des assets) des assets, que l'on peut utiliser dans des jeux qui seront monétisés ou non. Unity a permis le développement de jeux tels que Ori and the blind forest, Rust et Guns of icarus online.

2 Installation

Pour installer Unity, il suffit de télécharger l'exécutable sur le site officiel et suivre les étapes d'installation. Le site propose automatiquement la version adaptée à votre OS.

3 Utilisation

3.1 Créer un projet

Unity launcher

Lorsque vous démarrez Unity, le launcher ci-dessus s'affiche et permet de créer un nouveau projet ou de charger un projet existant. Si vous créez un nouveau projet, il vous sera possible de définir le projet en 2D ou en 3D, et de sélectionner des assets particuliers à charger avec le projet. Il est possible de charger des assets par la suite selon les besoins.

Si vous débutez, il vaut mieux n'importer aucun asset à cet étape, afin de ne pas alourdir le projet inutilement.

Unity nécessite un compte afin de travailler « online ». Il est aussi possible de travailler « offline » mais l’accès à l’assets store ne sera pas possible. Dans tous les cas il est possible de démarrer hors ligne et de se connecter plus tard.

3.2 Fenêtre principale

Fenêtre de projet

Unity est composé de plusieurs fenêtres que l'on peut les ouvrir/fermer et arranger à notre guise. Il est possible de les superposer pour créer un système d'onglets qui ont tous les mêmes dimensions et positions. Évitez de superposer Hierarchy, assets et scene. Cela rendra votre travail pénible. Le bouton "window" tout en haut de la fenêtre permet d'afficher ou de masquer des blocs particuliers. Les blocs principaux sont:

Unity Layout
Unity Layout
  • Scene. C'est ici que vous déplacez les assets et que vous créez une scène pour votre jeu.
  • Hierarchy. Les objets qui constituent votre scène sont listés ici en arborescence. Il est possible de les lier ou délier par drag and drop. Il est aussi possible d'y importer d'autres objets avec un clic droit.
  • Project. Contient les dossiers d'assets que vous voulez utiliser. Il est possible d'en créer et d'en importer de nouveaux par clic droit. Vous pouvez aussi drag and drop des fichiers dans cette zone pour les importer dans Unity directement. Vous pouvez drag and drop les assets directement dans la scène pour les utiliser dans votre projet.
  • Inspector. Permet d'éditer des propriétés des objets ou des scripts sélectionnés dans la scène et/ou la hiérarchie.
  • Game. Cette fenêtre s'affiche automatiquement en premier plan lorsque vous cliquez sur le bouton "play" au centre de l'interface. Cela vous permet de tester le jeu sans devoir "build" à chaque fois.

Il est possible d'enregistrer sa propre configuration des fenêtre en faisant : Window > Layouts > Save layout...

3.2.1 Fenêtre Scene

Gizmo unity
Gizmo unity

Il y a, par défaut, une caméra et une lumière dans la fenêtre de scène. C’est ici que l’on va insérer tous les modèles composant notre jeu (personnages, objets) ainsi que les caméras et les lumières. C’est un espace en 3D représenté par le cube de navigation se trouvant en haut à droite de cette fenêtre. L'espace en 3D est agencé de la manière suivante : X pour la largeur, Y pour la hauteur, et Z pour la profondeur. le plus simple pour bien le comprendre, est de placer un cube dans la scène : GameObject > 3D Object > Cube.

La navigation en 3D se fait de la manière suivante :

  • tourner autour du cube = enfoncer le bouton droit de la souris en se déplaçant.
  • translater la vue = en cliquant au milieu de la roulette de la souris tout en se déplaçant.
  • zoomer/dézoomer = à l’aide de la roulette de la souris.

En cliquant sur le bouton « Persp » juste en dessous du cube de navigation - c’est la même chose que de cliquer sur le petit cube gris au centre -, on passe d’un mode de projection en perspective à un mode isométrique. Dans ce mode (iso), peu importe la distance à la caméra d’un objet, sa taille sera toujours la même à l’écran. Cela facilite beaucoup l’édition, même si le résultat est moins impressionnant. A noter que cela n’influence en rien la vue qu’il y aura dans le jeu, c’est uniquement pour l’édition.

Filtre Unity scene
Filtre Unity scene

Près de l'onglet de la fenêtre (# Scene), se trouve le réglage pour passer de la 3D à la 2D, dans le cas où l’on souhaite faire un jeu en 2D. Unity est pas mal utilisé pour des jeux en 2D. On peut aussi activer/désactiver la lumière, le son et d’autre options. À la même hauteur, sur la droite de la fenêtre de scène, se trouve une liste déroulante intitulée « Gizmos ». En anglais, un gizmo c’est un gadget. Les gizmo sont les icônes présents dans la fenêtre de scène. Par exemple le système d’axe d’un objet, l’icône de la caméra, de la lumière. Dans ce menu, on peut modifier leur taille, si on les veut en 2D/3D, et en activer/désactiver. Il est aussi possible d’activer/désactiver la grille.

La barre de recherche permet de mettre en évidence les objets que l’on souhaite (dans la scène) en tapant leur nom (on peut renommer les objets) ou leur type. C’est très léger mais on le remarque. Exemple en image pour la caméra (camera), la lumière (light) et le cube.

Hierarchy Unity
Hierarchy Unity

3.2.2 Fenêtre Hierarchy

La fenêtre " Hierarchy " regroupe tous les éléments que l’on insère dans la scène. Il devrait donc y avoir pour l’instant une caméra (Main Camera), une lumière (Directional Light) et un Cube. De nouveau, il est possible d’effectuer une recherche dans le cas où il y a beaucoup d’éléments. De plus, il est possible de créer des objets directement en cliquant sur la liste déroulante " Create ", à la place de passer par le lien de menu " GameObject ".

En double cliquant sur l’un des composants, la vue de la fenêtre de scène se déplace dessus, ce qui est très pratique si on est perdu ou que l’on ne trouve plus quelque chose.

Le clic droit donne accès aux fonctions suivantes : copier/coller/renommer/dupliquer/effacer.

3.2.3 Fenêtre Project

Cette fenêtre n’est pas liée à la scène en cours mais au projet du jeu vidéo dans l’ensemble. Elle va permettre d’explorer l’intégralité des " Assets " qui seront utilisés pour construire la totalité du jeu vidéo. C’est un explorateur de fichier. Il est aussi possible d’y créer directement des éléments qui seront partagés dans tout le jeu. On verra cela plus tard.

3.2.4 Fenêtre Inspector

Inspector Unity
Inspector Unity

Le contenu de cette fenêtre change en fonction de l’élément sélectionné. Vous l’aviez peut-être déjà remarqué en cliquant sur le cube. Ce sont les propriétés de l’élément sélectionné qui s’affichent. On peut en rajouter et les modifier. Exemple, modifier le cube de la sorte : Scale > X=5, Y=1, Z=5 (Scale = dimension).

A noter que ces propriétés sont regroupées par catégories. Pour notre cube on a :

  • Transform
  • Cube (Mesh Filter)
  • Box Collider
  • Mesh Renderer

En fait notre Cube est un " GameObject " auquel sont attachés des propriétés regroupées par catégories. Certaines le sont automatiquement et d’autres pourront être rajoutées par la suite. Il faut bien comprendre que se sont ces propriétés qui lui confère toutes ses fonctionnalités. Sans elles il ne sert à rien.

3.3 Importer des assets

Vous pouvez utiliser l'asset store pour trouver des assets. Si vous les téléchargez directement depuis Unity, ils seront ajoutés automatiquement au projet. Sinon, vous pouvez drag and drop depuis vos documents dans la fenêtre Unity pour les importer. Il est possible d'importer des objets 3D créés avec Blender, 3D Studio max, Maya etc, mais uniquement s'ils sont exportés en format ".fbx". Unity ne reconnaît pas les formats propriétaires et le format ".obj".

Plus de détails sur les formats importables.

3.4 Ajouter des objets dans une scène

Il suffit de drag and drop les objets directement depuis le bloc "projet" ou le bloc "hiérarchie" dans la scène. Vous pouvez sélectionner les objets avec un clic gauche et tourner la caméra avec un clic droit. Vous pouvez défiler la vue avec un clic sur la molette de la souris et zoomer ou dézoomer en roulant la molette en avant ou en arrière.

Objet sélectionné

Vous pouvez déplacer les objets au moyen des flèches verte, rouge et bleue qui apparaissent sur l'objet sélectionné. Il est possible de réorienter la caméra rapidement selon un axe en cliquant sur les flèches de même couleur en haut à droite de la scène.

Options de modification

Vous pouvez utiliser les boutons en haut de la fenêtre pour effectuer d'autres actions sur les objets (rotation, redimensionnement). Vous pouvez faire la même chose en regardant le bloc "inspector" et en modifiant les valeurs numériques pour plus de précision.

3.5 Ajouter des scripts sur les objets

Pour créer de nouveaux scripts, il est possible de faire un clic droit dans le bloc "projet" et créer un script C# ou javascript. Les deux types de scripts utilisent une bibliothèque propre à Unity. Pour les assigner à un objet, il suffit de drag and drop le script depuis le bloc "projet" sur l'objet concerné dans le bloc "hiérarchie". Le bloc "inspector" permet de modifier rapidement certains paramètres d'un script assigné à un objet (pas le script seul !) sans avoir besoin d'éditer le code.

3.5.1 Exemples de scripts pour réaliser un jeu de plateforme

Si vous désirez réaliser un petit jeu de plateforme 2D, vous pouvez commencer par copier le script suivant et le lier au personnage principal, ce script permettra de diriger le personnage de gauche à droite et de le faire sauter à une certaine hauteur:

public class SimplePlatformController : MonoBehaviour {

    [HideInInspector] public bool facingRight = true;
    [HideInInspector] public bool jump = false;
    public float moveForce = 365f;
    public float maxSpeed = 5f;
    public float jumpForce = 1000f;
    public Transform groundCheck;


    private bool grounded = false;
    private Animator anim;
    private Rigidbody2D rb2d;


    // Use this for initialization
    void Awake () 
    {
        anim = GetComponent<Animator>();
        rb2d = GetComponent<Rigidbody2D>();
    }
    
    // Update is called once per frame
    void Update () 
    {
        grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));

        if (Input.GetButtonDown("Jump") && grounded)
        {
            jump = true;
        }
    }

    void FixedUpdate()
    {
        float h = Input.GetAxis("Horizontal");

        anim.SetFloat("Speed", Mathf.Abs(h));

        if (h * rb2d.velocity.x < maxSpeed)
            rb2d.AddForce(Vector2.right * h * moveForce);

        if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
            rb2d.velocity = new Vector2(Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);

        if (h > 0 && !facingRight)
            Flip ();
        else if (h < 0 && facingRight)
            Flip ();

        if (jump)
        {
            anim.SetTrigger("Jump");
            rb2d.AddForce(new Vector2(0f, jumpForce));
            jump = false;
        }
    }


    void Flip()
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}

Dans le script ci-dessus, vous pouvez modifier la vitesse du personnage (moveForce) et sa hauteur de saut (jumpForce) comme vous le souhaitez. Afin de pouvoir faire fonctionner ce script avec l'objet qui représente le personnage principal du jeu, il est important de rajouter des "components" à ce dernier (dont le script du contrôle évidemment). Regardez l'image ci-dessous et copiez les "components" ci-trouvant.

Voici les components à rajouter sur son personnage pour un jeu de plateforme 2D

Maintenant que le personnage se déplace comme il faut, il vous faudra une plateforme sur laquelle le placer, plateforme que vous appellerez "Ground". Cette plateforme pour bien interagir avec le personnage devra posséder les "components": Transform, Cube (Mesh Filter), Mesh renderer, Box Collider 2D et Rigidbody 2D.

3.5.2 Autres scripts pour un jeu de plateforme

Les scripts vous permettront d'ajouter des comportements à vos objets, vous les trouverez facilement sur internet. Ci-dessous, nous vous en proposons plusieurs, pour mieux comprendre comment les implémenter, regardez ce tutoriel qui les utilise: Unity - Creating a basic platformer game.

Script pour faire apparaître des plateformes procéduralement. Vous pouvez sans problème changer les valeurs pour que les plateformes apparaissent plus près ou plus loin.

using UnityEngine;
using System.Collections;

public class SpawnPlatforms : MonoBehaviour {

    public int maxPlatforms = 20;
    public GameObject platform;
    public float horizontalMin = 7.5f;
    public float horizontalMax = 14f;
    public float verticalMin = -6f;
    public float verticalMax = 6;


    private Vector2 originPosition;


    void Start () {

        originPosition = transform.position;
        Spawn ();
    
    }

    void Spawn()
    {
        for (int i = 0; i < maxPlatforms; i++)
        {
            Vector2 randomPosition = originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax));
            Instantiate(platform, randomPosition, Quaternion.identity);
            originPosition = randomPosition;
        }
    }

}

Script pour faire tomber les plateformes lorsque le personnage marche dessus.

using UnityEngine;
using System.Collections;

public class PlatformFall : MonoBehaviour {

    public float fallDelay = 1f;


    private Rigidbody2D rb2d;

    void Awake()
    {
        rb2d = GetComponent<Rigidbody2D>();
    }

    void OnCollisionEnter2D (Collision2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            Invoke ("Fall", fallDelay);
        }
    }

    void Fall()
    {
            rb2d.isKinematic = false;
    }



}

Script pour faire apparaître des pièces procéduralement sur les plateformes. Il faudra créer des pièces au préalable et les placer sur la plateforme principale.

using UnityEngine;
using System.Collections;

public class SpawnCoins : MonoBehaviour {

    public Transform[] coinSpawns;
    public GameObject coin;

    // Use this for initialization
    void Start () {
    
        Spawn();
    }

    void Spawn()
    {
        for (int i = 0; i < coinSpawns.Length; i++)
        {
            int coinFlip = Random.Range (0, 2);
            if (coinFlip > 0)
                Instantiate(coin, coinSpawns[i].position, Quaternion.identity);
        }
    }

}

Script pour que le personnage prenne les pièces.

using UnityEngine;
using System.Collections;

public class PickupCoin : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }

    void OnTriggerEnter2D (Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
            Destroy(gameObject);
    }
}

Script pour que la scène se relance lorsque le personnage tombe. Pour cela il faudra créer un objet à poser en-dessous des plateformes et le lier avec ce script. Lorsque le personnage touchera cet objet, la partie se relancera.

using UnityEngine;
using System.Collections;

public class Reset : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }

    void OnTriggerEnter2D (Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
            Application.LoadLevel(Application.loadedLevel);
    }
}

4 Communauté

La communauté est très active et Unity est régulièrement mis à jour. Ce qui veut dire que vous aurez facilement de l'aide, vous trouverez beaucoup de tutoriaux et la stabilité est assurée.

5 Liens