Nehmen wir an, ich habe eine Variable mit dem Namen button
type, Button
was natürlich der Fall ist System.Serializable
.
Ich möchte, dass diese Variable über den Inspektor zugewiesen werden kann, also mache ich es public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
Was mir das gibt:
Jetzt möchte ich den Code sauber und sicher halten (organisiert) und es gibt einen echten Grund, warum ich die Kapselung beibehalten muss.
Ich weiß, dass es mehrere Möglichkeiten gibt, Komponenten zur Laufzeit abzurufen, transform.Find("Some/Genius/TypeUnsafe/Path")
oder GameObject.Find("3 seconds scene iteration").GetComponent(...).
ich möchte das vermeiden.
Wie mische ich eine Variable private access
mit der public access
im Inspektor?
unity
serialization
Jacob
quelle
quelle
private
soll nicht wirklich verhindern, dass Dritte Zugang zu einem Feld erhalten, sondern soll eine Möglichkeit bieten, zu sagen: "Schau nicht hinter den Vorhang, was ich wirklich tue" - das heißt, es ist meistens eine Möglichkeit dazu verhindern Sie, dass Sie Zugriff darauf erhalten.UI
/API
MVC
/MVVM
Muster für eine riesige Anwendung (eigentlich ein Spielclient) und ich musste dasUI
von dem trennenAPI
. Ich musste einfach über den Inspektor Werte zuweisen - es gibt keinen anderen Weg.Find()
Methoden sind typunsicher und es ist einfacher, Dinge durch Ziehen und Ablegen zusammenzusetzen. Es ist wirklich sehr, sehr schwer, ein klassisches OOP-Framework zu erstellen,Unity
und Sie müssen nach solchen hackigen Dingen suchen.Antworten:
Sie suchen nach dem SerializeField-Attribut
Aus den Dokumenten:
Ihr Code würde dann so aussehen:
quelle
[SerializeField] private Button button;
Zur besseren Lesbarkeit schreibe ich im Allgemeinen alles in eine Zeile: Ich finde das einfacher zu scannen, wenn mehrere Felder hintereinander stehen. Schrauben Sie auch die Dokumente für "Sie werden dies fast nie brauchen"; Ich mache das die ganze Zeit.Sie können Ihre private Variable anzeigen, indem Sie das SerializeField- Attribut vor der Variablen hinzufügen . Etwas wie das
Die obige Variable wird Ihrem Inspektor angezeigt, Ihre anderen Klassen können sie jedoch nicht abrufen. Umgekehrt können Sie Ihre im Inspector abgelegten öffentlichen Elemente auch über das Attribut HideInInspector ausblenden . Etwas wie das
Auf Ihre obige Variable kann Ihr anderes Skript zugreifen, sie wird dem Inspektor jedoch nicht angezeigt.
quelle