Чтобы добавить объект со сцены в переменную при спавне префаба в Unity, можно использовать различные методы.
Один из способов - это использование GetComponent вместе с методом FindObjectOfType. Например, предположим, у нас есть префаб PlayerPrefab и мы хотим добавить в переменную player объект типа Player, который уже находится на сцене.
1. Сначала создайте публичную переменную типа Player внутри вашего префаба PlayerPrefab:
public Player player;
2. Затем в скрипте, отвечающем за спавн PlayerPrefab, используйте метод Instantiate, чтобы создать экземпляр префаба:
GameObject newPlayer = Instantiate(PlayerPrefab);
3. После этого вы можете использовать метод FindObjectOfType, чтобы найти объект сцены типа Player:
Player existingPlayer = FindObjectOfType<Player>();
4. Наконец, присвойте найденного игрока переменной player в созданном экземпляре префаба:
newPlayer.GetComponent<PlayerPrefab>().player = existingPlayer;
Теперь при спавне префаба PlayerPrefab в переменную player будет добавляться объект Player со сцены.
Если у вас есть возможность использовать Singleton-образный паттерн, то можно воспользоваться еще одним способом:
1. Создайте скрипт GameManager, который будет отвечать за хранение и доступ к объектам на сцене. В этом скрипте создайте статическую переменную типа GameManager:
public class GameManager : MonoBehaviour { public static GameManager instance; public Player player; void Awake() { if(instance == null) { instance = this; } else { Destroy(gameObject); } } }
2. Назначьте этот скрипт на объект GameManager на сцене.
3. В префабе PlayerPrefab, обратитесь к статической переменной instance GameManager для доступа к объекту player:
GameManager.instance.player = GetComponent<Player>();
Теперь при спавне префаба PlayerPrefab объект типа Player будет добавлен в переменную player в GameManager, и вы сможете получить доступ к нему из любого места вашей игры через GameManager.instance.player.