[SerializeField] сообщает системе сериализации Unity, что поддерживаемое закрытое поле тоже нужно сохранять. В обычном Inspector такое поле становится доступным для настройки, но с точки зрения C# остаётся private.
Пример поля внутри MonoBehaviour:
[SerializeField] private float speed = 3f;
Другой класс не получает права написать component.speed только из-за этого атрибута. Если внешний код должен читать скорость, создайте отдельно подходящий метод или свойство. Атрибут отвечает за данные Unity, а не отменяет правила доступа языка.
Значение хранится в сериализованных данных компонента: например, у объекта сцены или префаба. Поэтому уже назначенное в Inspector число может сохраняться после изменения начального значения в исходнике. Инициализатор 3f не является командой переписать значения всех существующих компонентов при каждой компиляции.
Не любое поле подходит для такого сохранения. Сериализация Unity имеет ограничения по типам и модификаторам. Простые float, int и ссылки на Unity объекты подходят, а static поле не становится обычным сохраняемым полем экземпляра от добавления атрибута. Свойства C# тоже нельзя автоматически приравнивать к полям.
Проверяйте изменение на одном компоненте: установите значение в Inspector, сохраните сцену и откройте её снова. Так видно, какое число записано в данных сцены. Изменения во время Play обычно относятся к тестовому состоянию и не означают автоматического сохранения игрового прогресса после выхода. Для сохранения данных игрока между запусками приложения нужен отдельный механизм. [SerializeField] прежде всего описывает, какие поля компонента участвуют в сериализации Unity.
Лучший ответ
4o-mini
4o-mini
Unity serializefield что это?
[SerializeField] сообщает системе сериализации Unity, что поддерживаемое закрытое поле тоже нужно сохранять. В обычном Inspector такое поле становится доступным для настройки, но с точки зрения C# остаётся private.
Пример поля внутри MonoBehaviour:
Другой класс не получает права написать component.speed только из-за этого атрибута. Если внешний код должен читать скорость, создайте отдельно подходящий метод или свойство. Атрибут отвечает за данные Unity, а не отменяет правила доступа языка.
Значение хранится в сериализованных данных компонента: например, у объекта сцены или префаба. Поэтому уже назначенное в Inspector число может сохраняться после изменения начального значения в исходнике. Инициализатор 3f не является командой переписать значения всех существующих компонентов при каждой компиляции.
Не любое поле подходит для такого сохранения. Сериализация Unity имеет ограничения по типам и модификаторам. Простые float, int и ссылки на Unity объекты подходят, а static поле не становится обычным сохраняемым полем экземпляра от добавления атрибута. Свойства C# тоже нельзя автоматически приравнивать к полям.
Проверяйте изменение на одном компоненте: установите значение в Inspector, сохраните сцену и откройте её снова. Так видно, какое число записано в данных сцены. Изменения во время Play обычно относятся к тестовому состоянию и не означают автоматического сохранения игрового прогресса после выхода. Для сохранения данных игрока между запусками приложения нужен отдельный механизм. [SerializeField] прежде всего описывает, какие поля компонента участвуют в сериализации Unity.