Menu
CoddyTech

SerializeField

Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 15 von 85.

Ein public-Feld erfüllt zwei Aufgaben zugleich: Es wird im Inspector angezeigt, und jedes andere Skript kann es lesen und ändern. Oft möchtest du nur Ersteres. Auf ein private-Feld (in C# die Standardeinstellung) kann nur die eigene Klasse zugreifen. So kann kein anderes Skript es beschädigen, aber Unity zeigt es nicht im Inspector an.

[SerializeField] weist Unity an, ein privates Feld trotzdem zu speichern und anzuzeigen. Die Reichweite dieses Geschützturms wird für jeden Turm im Inspector festgelegt, und kein anderes Skript kann darauf zugreifen:

[SerializeField] private float range = 5f;

void Start()
{
    Debug.Log("Range: " + range);
}

So verwaltet der Großteil des Unity-Codes seine Einstellungen: privat, mit [SerializeField]. Achte auch auf den umgekehrten Fall: Wenn du ein Feld auf private setzt und das Attribut vergisst, verwirft Unity stillschweigend den in der Szene gespeicherten Wert. Für das Feld gilt dann wieder die Zahl aus dem Code, ohne dass dich ein Fehler darauf hinweist.

challenge icon

Aufgabe

Einfach

Verberge die Höhe der Lampe vor anderen Skripten, aber behalte sie im Inspector.

  1. Ändere das Feld zu [SerializeField] private float height = 1f;.
  2. Lass Start() unverändert: Der Inspector setzt height auf 4.

Drücke auf „Spielen“: Die Lampe hängt weiterhin in einer Höhe von 4. Drücke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class LampHeight : MonoBehaviour
{
    public float height = 1f;

    void Start()
    {
        transform.position = new Vector3(0, height, 0);
    }
}

Alle Lektionen in Unity-Scripting: Grundlagen

Übe selbstständig: Unity-Playground