web-dev-qa-db-fra.com

Pourquoi devrais-je utiliser SerializeField?

Je viens de commencer à apprendre C # et Unity, et il y a une chose à laquelle je ne peux pas m'habituer:

Pourquoi et quand devrais-je utiliser [SerializeField]?

Est-il mauvais de laisser des variables codées en dur malgré l'utilisation de [SerializeField] et avoir plus de zones de texte dans mon interface d'unité?

Merci d'avance pour votre attention et votre patience.

Pourquoi et quand dois-je utiliser [SerializeField]?

L'utilisation de l'attribut SerializeField oblige Unity à sérialiser toute variable private. Cela ne s'applique pas aux variables statiques et aux propriétés en C #.

Vous utilisez l'attribut SerializeField lorsque vous avez besoin que votre variable soit private mais que vous souhaitez également qu'elle apparaisse dans l'éditeur.

Par exemple, ceci ne serait pas apparaît dans l'éditeur:

private float score;

Et c'est parce que c'est une variable private mais celle ci-dessous devrait apparaître dans l'éditeur:

[SerializeField]
private float score;

En effet, vous lui avez appliqué SerializeField et vous dites à Unity de le sérialiser et de l'afficher dans l'éditeur.


Notez que les variables private ont plus à voir avec C # qu'avec Unity. Il existe également des variables variables publiques. Marquer votre variable private signifie que vous ne voulez pas qu'un autre script puisse accéder à cette variable. Il existe également un qualificatif public. Le marquage de votre variable public signifie que vous souhaitez que vos autres scripts puissent accéder à cette variable.

Parfois, vous souhaitez que d'autres scripts puissent accéder à votre variable à partir d'un autre script, mais vous ne voulez pas que la variable public apparaisse dans l'éditeur. Vous pouvez masquer la variable public avec le [HideInInspector] attribut.

Cela montrera dans l'éditeur:

public float score;

Cela ne sera pas afficher dans l'éditeur:

[HideInInspector]
public float score;

Est-il mauvais de laisser des variables codées en dur malgré l'utilisation de [SerializeField] et d'avoir plus de zones de texte dans mon interface d'unité?

Oui, c'est surtout mauvais surtout pour les nouveaux utilisateurs. Cela ne devrait pas être un gros problème pendant longtemps pour les programmeurs Unity et C #. La raison pour laquelle cela est mauvais est que lorsque vous avez le code ci-dessous:

[SerializeField]
private float score = 5f;

La valeur par défaut est 5 dans l'éditeur. Une fois que vous avez enregistré le script, cette variable est maintenant mise à jour dans l'éditeur sous la forme 5. Le problème est que vous pouvez changer cela de l'éditeur en 14. Une fois que vous le modifiez à partir de l'éditeur, la valeur dans le script sera toujours 5 mais lorsque vous l'exécutez, Unity utilise la valeur que vous avez définie dans l'éditeur, qui est 14. Cela peut vous faire perdre beaucoup de temps à résoudre quelque chose qui n'est même pas un problème simplement parce qu'une autre valeur est utilisée qui est définie dans l'éditeur alors que vous attendez que la valeur par défaut définie dans le script soit utilisée.

Le seul moyen pour que la variable score revienne à sa valeur par défaut 5 variable signifie que vous renommez la variable en quelque chose d'autre ou que vous la réinitialisez à partir de l'éditeur. Il ne changera même pas même si vous changez la valeur de 5 à 3 du script. Il doit être renommé ou réinitialisé à partir de l'éditeur. Cela vaut la peine de le savoir, mais lorsque vous vous habituerez à Unity, vous n'aurez pas à vous en préoccuper.

11
Programmer

L'attribut [SerializeField] est utilisé pour marquer les champs non publics comme sérialisables: afin que Unity puisse enregistrer et charger ces valeurs (tous les champs publics sont sérialisés par défaut) même s'ils ne sont pas publics.

C'est tout. Vous l'utilisez quand vous le souhaitez.