Как прикрепить объект со сцены в компонент к созданному префабу
Мне нужно программно проинициализировать объектом но сцены переменную GameStatusData скрипта MouseClick для объектов, которые были созданы через Instantiate из префаба.
Подробнее о сути проблемы:
- Я генерирую префабы при запуске игры
- В них вложены спрайты
- К спрайтам прикреплен скрипт, который должен определять была ли нажата мышь на какой-либо из спрайтов и отправлять экземпляр GameObject в другой скрипт.
Из-за того, что скрипт, куда я должен отправлять GameObject, прикреплен к объекту со сцены игра на этом встает.
Да, я могу сделать статик класс и передавать GameObject туда, тогда проблемы не будет, но мне хочется узнать, как ещё можно решить этот вопрос.
Ответы (1 шт):
Автор решения: Максим Фисман
→ Ссылка
- В скрипт, создающий префабы, добавить
[SerializeField] privateпеременную типаGameStatusDataи проинициализировать ее нужным значением. - После создания префаба добавлять к нему компонент
MouseClickс помощью AddComponent(). - Установить переменную
GameStatusDataкомпонентаMouseClickтолько что созданного объекта значением переменной из пункта 1.
Примерный полукод:
class PrefabsSpawner {
[SerializeField] private GameStatusData data; // Установить из инспектора
[SerializeField] private GameObject Prefab;
void SpawnPrefab () {
GameObject newObj = Instantiate(Prefab, ...);
newObj.AddComponent<MouseClick>();
newObj.GetComponent<MouseClick>().GameStatusData = data;
}
}
Еще, конечно, есть FindObjectOfType(), но легче будет указать из инспектора. Да и вообще FindObjectOfType - так себе практика.