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