Изменили значение поля в коде, а объект на сцене ведёт себя по-старому
В компоненте врага было:
public class Enemy : MonoBehaviour
{
[SerializeField] private float speed = 5f;
}
Разработчик поменял инициализатор на 12f, сохранил скрипт, дождался перекомпиляции и запустил сцену. Враг, давно расставленный на сцене, по-прежнему двигается со скоростью 5. Новый враг, созданный перетаскиванием скрипта на пустой объект, двигается со скоростью 12. Почему так?
- Приватные поля не сериализуются в принципе, поэтому новое значение не применилось ни к одному из объектов, а разницу в поведении объясняет что-то другое
- Значение сериализованного поля хранится в сцене или префабе и перекрывает инициализатор из кода: у старого объекта его меняют в инспекторе
- Редактор закэшировал скомпилированные сборки и подставляет старую версию скрипта: помогает перезапуск Unity
- Инициализаторы полей у наследников MonoBehaviour не выполняются вообще, поэтому осталось старое значение: присваивать такие поля можно только в Awake
