Scripting

Null Reference Exception et Unassigned Reference Exception

Unity, Scripting

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;
  • le Variable Shadowing3.

Le code suivant montre certaines de ces erreurs :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExceptionsExample : MonoBehaviour
{
	public GameObject unassignedRef1;
	[SerializeField] private GameObject unassignedRef2;
	private GameObject nullRef1;
	private GameObject nullRef2;
	private GameObject nullRef3;

	// Start is called before the first frame update
	private void 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 null
		var 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();
	}

	private void Shadowing()
    {
		// #5: shadowing
		GameObject nullRef3 = gameObject;
		Debug.Log(nullRef3.name);
	}
}

...

Les Events dans Unity

Unity, Scripting

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.

...

© HE-Arc 2020-2026 - Tous droits réservés.