Menu
CoddyTech

SerializeField

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 15 из 85.

Поле public выполняет сразу две задачи: отображается в Inspector, и любой другой скрипт может читать и изменять его. Часто вам нужно только первое. Поле private (значение по умолчанию в C#) может изменять только сам класс, поэтому никакой другой скрипт не сможет его повредить, но Unity не отображает его в Inspector.

[SerializeField] просит Unity сохранять и отображать закрытое поле. Диапазон этой турели задаётся для каждой турели отдельно в Inspector, и никакой другой скрипт не может его изменить:

[SerializeField] private float range = 5f;

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

Так в большинстве проектов на Unity хранят настройки: поля делают закрытыми и добавляют [SerializeField]. Не забудьте и об обратной ситуации: сделайте поле закрытым и забудьте атрибут — Unity молча отбросит значение, сохранённое в сцене. Поле получит значение из кода, и никакой ошибки об этом не сообщит.

challenge icon

Задание

Легко

Скрой высоту лампы от других скриптов, но оставь её в Inspector.

  1. Измени поле на [SerializeField] private float height = 1f;.
  2. Оставь Start() без изменений: в Inspector установи для height значение 4.

Нажми «Играть»: лампа по-прежнему висит на высоте 4. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

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

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

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity