Maison >développement back-end >C++ >Pourquoi mes instances de classe Unity sont-elles nulles malgré une affectation correcte des paramètres ?
Dépannage des instances de classe nulle dans Unity
Les développeurs Unity rencontrent souvent des instances de classe nulles, même avec des affectations de paramètres apparemment correctes. Cela provient généralement du comportement unique des classes héritant de MonoBehaviour
.
L'MonoBehaviour
énigme
Les scripts héritant de MonoBehaviour
deviennent des composants Unity, sous réserve de sa gestion de cycle de vie. Cela signifie que l'utilisation directe du mot-clé new
pour créer des instances est incorrecte. Unity impose l'utilisation de méthodes spécifiques d'instanciation.
Instanciation correcte : GameObject.AddComponent()
Pour une classe dérivée de MonoBehaviour
comme « Rule », l'instanciation doit exploiter GameObject.AddComponent()
:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
Cela garantit une bonne intégration avec le système Unity.
Instancier des classes non MonoBehaviour
Si 'Règle' n'hérite pas de MonoBehaviour
, le mot-clé new
est acceptable :
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = new Rule(3); }</code>
Ici, l'instanciation directe et l'affectation des paramètres fonctionnent comme prévu.
Considérations sur la fonction de rappel
Les anciennes versions d'Unity présentaient des problèmes subtils lors de l'utilisation de new
avec des classes dérivées de MonoBehaviour
; les fonctions de rappel comme Start()
peuvent ne pas se déclencher correctement. Bien que cela puisse être moins évident dans les versions plus récentes, les meilleures pratiques imposent toujours d'utiliser les méthodes d'instanciation appropriées.
Clé à retenir
Une instanciation appropriée dépend du fait que votre classe hérite de MonoBehaviour
. L'utilisation de GameObject.AddComponent()
pour les classes dérivées de MonoBehaviour
et de new
pour les autres évite les erreurs de référence nulle et garantit un comportement correct du script dans Unity.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!