Spawn gameObject horde, изменяйте концентрацию появляющихся объектов

Как бы я создал неравномерное случайное поколение gameObjects (врагов), которое имитирует формирование "орды", как это изображение: введите описание изображения здесь

Я хочу, чтобы спереди было больше игровых объектов и меньше, когда оно затягивалось назад. Я думал о создании пустого игрового объекта и создании цели для врагов с помощью кода, подобного следующему:

public Vector3 target : Transform;
if (target == null && GameObject.FindWithTag("Empty"))
{
       target = GameObject.FindWithTag("Empty").transform;
}

Тем не менее, выполнение этого не дало бы мне "следовой эффект" там, где его меньше.

Вот мой код для случайного генерирования врагов, если это поможет:

void SpawnHorde()
{
    for (int i = 0; i < hordeCount; i++) 
    {
        Vector3 spawnPosition = new Vector3(Random.Range (0, 200), 50, Random.Range (0, 200));
        Instantiate(Resources.Load ("Prefabs/Sphere"), spawnPosition, Quaternion.identity);
    }
}

У кого-нибудь есть предложения как этого добиться?

Мои результаты после реализации кода @ Джерри:

вечеринка впереди

Более сосредоточены спереди; меньше в спину:)

1 ответ

Решение

Я бы пошел за предложениями Максимилиана Герхардта. Вот некоторая необработанная реализация, чтобы вы могли настроить ее так, как хотите. Самое важное для настройки - это позиционирование в одном столбце, чего можно добиться с помощью некоторых случайных чисел.

    void SpawnHorde()
    {
        int hordeCount = 200;
        float xPosition = 0;

        const int maxInColumn = 20;

        while (hordeCount > 0)
        {
            int numberInColumn = Random.Range(5, maxInColumn);
            hordeCount -= numberInColumn;

            if (hordeCount < 0)
                numberInColumn += hordeCount;

            for (int i = 0; i < numberInColumn; i++)
            {
                Vector3 spawnPosition = new Vector3(xPosition, 50, Random.Range(0, 100));
                Instantiate(Resources.Load("Prefabs/Sphere"), spawnPosition, Quaternion.identity);
            }

            xPosition += (float)maxInColumn * 2f / (float)hordeCount;
        }
    }
Другие вопросы по тегам