Как прикрепить объект со сцены в компонент к созданному префабу

Мне нужно программно проинициализировать объектом но сцены переменную GameStatusData скрипта MouseClick для объектов, которые были созданы через Instantiate из префаба. Есть ли в юнити команда, которая может выполнить это действие? Подробнее о сути проблемы:

  1. Я генерирую префабы при запуске игры
  2. В них вложены спрайты
  3. К спрайтам прикреплен скрипт, который должен определять была ли нажата мышь на какой-либо из спрайтов и отправлять экземпляр GameObject в другой скрипт.

Из-за того, что скрипт, куда я должен отправлять GameObject, прикреплен к объекту со сцены игра на этом встает.

Да, я могу сделать статик класс и передавать GameObject туда, тогда проблемы не будет, но мне хочется узнать, как ещё можно решить этот вопрос.


Ответы (1 шт):

Автор решения: Максим Фисман
  1. В скрипт, создающий префабы, добавить [SerializeField] private переменную типа GameStatusData и проинициализировать ее нужным значением.
  2. После создания префаба добавлять к нему компонент MouseClick с помощью AddComponent().
  3. Установить переменную 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 - так себе практика.

→ Ссылка