Проблема с рандомным созданием объектов в unity

public class Spawn : MonoBehaviour
    {
        public List<Spawn> enemyPool; // хз как это назвать и зачем оно, но вроде как надо
        public GameObject[] enemy; // мой массив врагов
        public int enemyCaunt; // максимальное количество врагов в пуле
        public Transform spawner; // позиция врагов
        private void Start()
        {
            Pool();
        }
        public void Pool()
        {
            enemyPool = new List<Spawn>();
            for (int i = 0; i < enemyCaunt; i++)
    
            {
                var enemyTemp = Random.Range(0, enemy.Length);
                Instantiate(enemy[enemyTemp], spawner.transform.position, Quaternion.identity);
                enemyTemp.**transform**.SetParent(spawner); // должен присваивать позицию Спавнера
                enemyTemp.**gameObject**.SetActive(false); // должен выключать объект, при старте он не нужен
                
            }
        }
    }

То что в коде я выделил звездочками у меня подчеркивает красным.

Идея какая. В момент старта Под Gameobject spawner создаются объекты в выключеном состоянии из префабов.

Я делал без Random.Range, все работало. С ним нет.

Подскажите, пожалуйста, где ошибка. Пул мне очень нужен, т.к делаю ранер, и объекты буду брать из пула, включать и возвращать обратно (пока правда не знаю как, но будут).

Спасибо.


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

Автор решения: Алексей Шиманский

Random.Range возвращает число, которое вы складываете в enemyTemp. То есть там просто int. Конечно, откуда у числа будут свойства transform и gameObject?

Может быть вам надо:

GameObject clone = Instantiate(enemy[enemyTemp], spawner.transform.position, Quaternion.identity);
clone.transform.SetParent(spawner); // должен присваивать позицию Спавнера
clone.gameObject.SetActive(false); // должен выключать объект, при старте он не нужен

Т.к. метод Instantiate как раз возвращает объект, который был инстанциирован

→ Ссылка
Автор решения: Анастасия

Ваша переменная enemyTemp - это случайно сгенерированное число в диапазоне (0, enemy.Length), а не GameObject. Соответственно у числа нет полей transform и gameObject.

Поэтому при клонировании я бы предложила Вам создавать переменную соответствующего типа и к ней уже применять, что Вам нужно. Например, так:

GameObject newEnemyObject = Instantiate(enemy[enemyTemp], spawner.transform.position, Quaternion.identity);
newEnemyObject.transform.SetParent(spawner);
newEnemyObject.SetActive(false);
→ Ссылка