Menu
CoddyTech

SerializeField

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 15 de 85.

Um campo public faz duas coisas ao mesmo tempo: aparece no Inspector, e qualquer outro script pode lê-lo e alterá-lo. Muitas vezes, você quer apenas a primeira. Um campo private (o padrão em C#) só pode ser alterado pela própria classe, então nenhum outro script pode modificá-lo, mas o Unity não o mostra no Inspector.

[SerializeField] pede ao Unity que salve e mostre mesmo assim um campo privado. O alcance desta torreta é definido para cada torreta no Inspector, e nenhum outro script pode acessá-lo:

[SerializeField] private float range = 5f;

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

É assim que a maioria dos códigos do Unity mantém suas configurações: privadas, com [SerializeField]. Fique atento ao contrário: torne um campo privado e esqueça o atributo, e o Unity descartará silenciosamente o valor salvo na cena. O campo volta ao número definido no código, sem nenhum erro para avisar você.

challenge icon

Desafio

Fácil

Oculte a altura da lâmpada dos outros scripts, mas mantenha-a no Inspector.

  1. Altere o campo para [SerializeField] private float height = 1f;.
  2. Mantenha Start() como está: o Inspector define height como 4.

Pressione “Jogar”: a lâmpada continua suspensa a uma altura de 4. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

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

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

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity