Menu
CoddyTech

SerializeField

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

Поле 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

Задание

Легко

Поле height лампы является публичным, поэтому любой скрипт может её переместить. Сделай height приватным, оставив его в Inspector, где ему задаётся значение 4. Лампа по-прежнему должна висеть на высоте, заданной в Inspector.

Нажми Play и посмотри на высоту лампы, затем нажми Check.

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

using UnityEngine;

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

    void Start()
    {
        transform.position = new Vector3(0, height, 0);
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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