il est indispensable d’utiliser un Version Control System lorsque l’on travaille sur un projet en Unity.
On remarque cependant que certains fichiers générés doivent tout de même être versionnés, en particulier les fichier .meta1.
Ceci est contre intuitif et semble aller à l’encontre de la philosophie de Git.
Les fichiers .meta servent en fait à stocker des metadonnées concernant les Assets importés dans les projets.
En particulier, si on sélectionne un Asset dans la fenêtre Project, on obtient une fenêtre Inspector qui ressemble à ça :
Dépréciée depuis Unity 2021 Depuis Unity 2021, il existe un template vide pour URP.
Il n’est dont plus nécessaire d’effectuer les étapes détaillées dans cette page.
Le pipeline de rendu utilisé dans ce cours est le Universal Render Pipeline (ou URP)1.
Il faut donc créer un projet Unity avec une configuration particulière pour pouvoir l’utiliser.
Bien que la documentation Unity suggère d’utiliser le template fourni2 pour créer un projet basé sur URP, celui-ci contient beaucoup de choses dont nous n’aurons pas besoin.
Ainsi, nous conseillons plutôt de commencer avec un projet vide (utilisant le Built-in Render Pipeline), puis de le configurer pour qu’il utilise URP3.
Lors de la création d’un nouveau projet, Unity affiche parfois l’erreur “Failed to resolve project template” comme indiqué sur la capture suivante :
Ceci est vraisemblablement causé par un bug 1 lorsque le path est trop long, ou contient des espaces.
Il suffit donc de changer le nom du projet, du répertoire parent, ou de déplacer le projet.
Dans Unity, quand vous accédez à une variable mal initialisée (ou pas initialisée du tout), vous récupérez une NullReferenceException1 ou une UnassignedReferenceException.
Ces erreurs apparaissent dans la console de la façon suivante :
Les erreurs les plus fréquentes sont :
utiliser une variable exposée dans l’Inspector mais non-assignée. Un simple drag and drop dans l’éditeur Unity suffit;
utiliser une variable non-initialisée (contenant une référence nulle);
mal épeler le nom d’un GameObject quand on utilise la fonction GameObject.Find()2;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclassExceptionsExample : MonoBehaviour
{
public GameObject unassignedRef1;
[SerializeField] private GameObject unassignedRef2;
private GameObject nullRef1;
private GameObject nullRef2;
private GameObject nullRef3;
// Start is called before the first frame updateprivatevoid Start()
{
// #1: not assigned in inspector Debug.Log(unassignedRef1.name);
// #2: not assigned in inspector Debug.Log(unassignedRef2.name);
// #3: not initialized Debug.Log(nullRef1.name);
// #4: typo so Find() returns nullvar nullRef2 = GameObject.Find("exceptionCubeWithTypo");
Debug.Log(nullRef2.name);
// #5: shadowing, so ok here, but not ok in Shadowing() nullRef3 = gameObject;
Debug.Log(nullRef3.name);
Shadowing();
}
privatevoid Shadowing()
{
// #5: shadowing GameObject nullRef3 = gameObject;
Debug.Log(nullRef3.name);
}
}
Il existe plusieurs types d’Events utilisables dans Unity : les UnityEvents1 et les Events C# natifs2. Les Events offrent un moyen simple et efficace de construire un système de diffusion de messages.
Ils suivent essentiellement le design pattern Observer3^.
Le seul avantage à utiliser les UnityEvents c’est qu’ils sont intégrés directement dans l’éditeur4.
Cependant les UnityEvents sont beaucoup plus lents que les Events C# natifs5.
En conclusion, utilisez les Events C# natifs de préférence.
Le pipeline de rendu (graphics pipeline ou rendering pipeline en Anglais)1 représente la suite d’étapes à effectuer pour transformer une scène 3D en points 2D sur l’écran (pixels).
Les étapes principales du pipeline de rendu pour OpenGL sont :
Unity propose 2 types de pipelines de rendu :
Built-in Render Pipeline2 : c’est le pipeline de rendu par défaut.
Scriptable Render Pipeline (ou SRP)3 : c’est un pipeline de rendu configurable et pilotable grâce à des scripts C#.
La vidéo suivante résume les principales différences des pipelines de rendu dans Unity :