Как создать в единстве только один объект из массива - PullRequest
0 голосов
/ 30 мая 2020

Я хочу создавать экземпляры только одного объекта за раз, поэтому я не знаю, что не так с моим кодом, потому что он создает экземпляры всех объектов из массива одновременно. Со случайным диапазоном это возможно, но я хочу установить его по порядку.

void Update()
    {
        if (timer > maxTime)
        {
           // Shuffle(enemies);

        //    RandomNumber = Random.Range(0, enemies.Length);
            float center = Screen.width / Screen.height;



            CreateEnemies(center);


          //  newEnemie = Instantiate(enemies[RandomNumber]);
          //   newEnemie.transform.position = transform.position+new Vector3(Random.Range(-screenBounds.x -1.5f, screenBounds.x +1.5f), 0, 0);
          //  newEnemie.transform.position = transform.position + new Vector3(Random.Range(-screenBounds.x + 1.5f, screenBounds.x - 1.5f), 0, 0);


            timer = 0;


        }

        timer += Time.deltaTime;
    }
    void Shuffle(GameObject[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            GameObject temp = array[i];
            int random = Random.Range(i, array.Length);
            array[i] = array[random];
            array[random] = temp;
        }
    }
    void CreateEnemies(float positionY)
    {
        for(int i = 0; i < enemies.Length; i++)
        {
            enemies[i] = Instantiate(enemies[i], transform.position + new Vector3(Random.Range(-screenBounds.x - 1.5f, screenBounds.x + 1.5f), 0, 0), Quaternion.identity)as GameObject;
            positionY += 1f;
        }
    }

1 Ответ

0 голосов
/ 30 мая 2020

Ваша функция create Enemies делает то, что написано, она создает экземпляры врагов (множественное число). Когда функция вызывается, она проходит через весь массив и создает экземпляры всех врагов. Если вам нужно только 1 каждый раз при вызове функции, вы можете использовать что-то вроде этого.

private int currentEnemyIndex = 0;//Enemy to spwan index

void CreateEnemies(float positionY)
{
    if (currentEnemyIndex < enemies.Length)//Make sure you don't go out of bound for your array. You could also clamp if you want to keep spwaning the last one.
    {
        enemies[currentEnemyIndex] = Instantiate(enemies[currentEnemyIndex], transform.position + new Vector3(Random.Range(-screenBounds.x - 1.5f, screenBounds.x + 1.5f), 0, 0), Quaternion.identity) as GameObject;
        positionY += 1f;
        ++currentEnemyIndex;//Increment the enemy index so next call you spwan the next enemy.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...