Казалось бы простой вопрос - а как сбросить кастомный компонент в изначальное состояние из скрипта?
Мне это нужно для приведения в исходное состояние объекта из пула объектов в том случае, когда он деактивируется (например, юнит уничтожен).
Я прощупал 3 варианта:
1. Удалить, добавить
Синтаксис:
Используется csharp
Destroy(gameObject.GetComponent<GameObjectAnimator>());
gameObject.AddComponent<GameObjectAnimator>();
gameObject.AddComponent<GameObjectAnimator>();
Этот способ не подошел, т.к. теряются ссылки (но их конечно можно восстановить) и в целом работа становится странной, долго разбирался, но так и не понял почему при такой операции с компонентом практически невозможно работать.
2. Есть метод Reset из мануала https://docs.unity3d.com/ScriptReference/MonoBehaviour.Reset.html?_ga=2.187018474.392052278.1579246470-594371806.1568297886, но он работает только в рамках редактора, поэтому тоже мимо.
3. Есть также мысль, чтобы при создании объекта где-то записать/хранить дефолтные значения компонента, а потом при деактивации объекта эти дефолтные значения заменить на текущие.
Либо создать отдельный GameObject, на котором будет висеть этот компонент с дефолтными значениями и при необходимости просто копировать этот компонент в нужные объекты пула.
Вроде бы вот этот способ подходит больше всего, но какого-то элегантного кода я не придумал и не нашел.
Может будут у кого какие соображения на сей счет? Буду только рад помощи.