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.

3.2 Fenêtre principale

Fenêtre de projet

La fenêtre est séparée en plusieurs blocs redimensionnables et déplaçable selon vos envies. Il est possible de superposer les blocs 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:

  • 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.

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