Menu
CoddyTech

SerializeField

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 15 z 85.

Pole public spełnia jednocześnie dwie funkcje: jest widoczne w Inspectorze i każdy inny skrypt może je odczytywać oraz zmieniać. Często potrzebujesz tylko tej pierwszej. Pole private (domyślne w C#) może zmieniać tylko jego własna klasa, więc żaden inny skrypt nie może go zepsuć, ale Unity nie pokazuje go w Inspectorze.

[SerializeField] każe Unity mimo to zapisywać i wyświetlać prywatne pole. Zasięg tej wieżyczki jest ustawiany osobno dla każdej wieżyczki w Inspectorze, a żaden inny skrypt nie może go zmienić:

[SerializeField] private float range = 5f;

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

Większość kodu Unity przechowuje ustawienia właśnie w ten sposób: jako prywatne, z atrybutem [SerializeField]. Uważaj na odwrotną sytuację: zmień pole na prywatne i zapomnij o atrybucie — Unity po cichu odrzuci wartość zapisaną w scenie. Pole przyjmie wartość liczbową z kodu i nie pojawi się żaden błąd, który by cię o tym poinformował.

challenge icon

Wyzwanie

Łatwy

Ukryj wysokość lampy przed innymi skryptami, ale pozostaw ją widoczną w Inspectorze.

  1. Zmień pole na [SerializeField] private float height = 1f;.
  2. Pozostaw Start() bez zmian: Inspector ustawia height na 4.

Naciśnij „Graj”: lampa nadal wisi na wysokości 4. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

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

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity