Disons que j'ai une variable nommée button
de type Button
qui est bien sûr System.Serializable
.
Je veux que cette variable soit assignable via l'inspecteur, donc je le fais public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
Ce qui me donne ça:
Maintenant, je veux garder le code propre et sécurisé (organisé) et il y a une vraie raison pour laquelle je dois préserver l'encapsulation.
Je sais qu'il existe plusieurs façons de récupérer des composants lors de l'exécution, transform.Find("Some/Genius/TypeUnsafe/Path")
ou GameObject.Find("3 seconds scene iteration").GetComponent(...).
je veux éviter cela.
Comment mélanger une variable private access
avec celle-ci public access
dans l'inspecteur?
unity
serialization
Jacob
la source
la source
private
n'est pas vraiment destiné à empêcher un tiers d'accéder à un champ, il est destiné à fournir un moyen de dire "ne regardez pas derrière le rideau ce que je fais vraiment" - c'est-à-dire, c'est surtout un moyen de vous empêcher d'y accéder.UI
/API
MVC
/MVVM
pour une énorme application (un client de jeu en fait) et j'ai dû séparer leUI
duAPI
. J'avais besoin d'attribuer des valeurs via la cause de l'inspecteur simplement - il n'y a pas d'autre moyen.Find()
les méthodes ne sont pas sécurisées, et il est plus facile de rassembler les choses en faisant glisser et déposer. Il est vraiment, vraiment difficile de construire un cadre OOP classiqueUnity
et vous devez rechercher des choses hacky comme celle-ci.Réponses:
Vous recherchez l' attribut SerializeField
De la documentation:
Votre code ressemblerait alors à ceci:
la source
[SerializeField] private Button button;
je trouve cela plus facile à numériser quand il y a un tas de champs dans une rangée. En outre, vissez les documents pour "vous n'en aurez presque jamais besoin"; Je fais ça tout le temps.Vous pouvez afficher votre variable privée en ajoutant l' attribut SerializeField avant la variable. Quelque chose comme ça
La variable ci-dessus sera affichée à votre inspecteur mais vos autres classes ne pourront pas l'obtenir. Inversement, vous pouvez également masquer votre dossier public dans l'inspecteur via l' attribut HideInInspector . Quelque chose comme ça
Votre variable ci-dessus sera accessible par votre autre script mais elle ne sera pas affichée à l'inspecteur.
la source