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

Чтобы добавить объект со сцены в переменную при спавне префаба в 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.