Проблема с рандомным созданием объектов в 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);