Unity, С# создание вереницы объектов вдоль ширины камеры на равном расстоянии

Всем доброго времени суток у меня возникла задача создать ряд объектов(ректенглов) вдоль ширины камеры на равном расстоянии под разные разрешения. По углам камеры тоже должны находится ректенглы Написал скрипт нацепил на камеру ничего не получилось.

Vector3 LeftPos = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 0));
Vector3 RightPos = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 0));
Vector3 NextPos;
float divideDistansePos;
float minInterval;
int countSpawnerPoint;
public GameObject spawner;

//Расстояние между крайними точками разделить на минимальное 
//получить количество точек, которое может уместиться 
//это кол-во будет не целое число. 
//Затем расстояние разделить на целую часть количества точек, 
//и получить расстояние  на которое нужно смещать точки.


void Start()
{
    //вычисляем расстояние между двумя точками по углам камеры
    divideDistansePos = (Vector3.Distance(LeftPos, RightPos));

    //получаем кол-во точек которые необходимо округлить.
    divideDistansePos /= minInterval;

    //точное число точек
    countSpawnerPoint = (int)Mathf.Round(divideDistansePos);

    divideDistansePos /= countSpawnerPoint;


}

void Generate()
{
    for(int i = 0; i < countSpawnerPoint; i++)
    {
        NextPos = Camera.main.ViewportToWorldPoint(new Vector3(i+divideDistansePos, 1, 0));
        Instantiate(spawner, NextPos, Quaternion.identity);
    }
}

// Update is called once per frame
void Update()
{
    Generate();
}

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

Автор решения: Yaroslav
void Start() {
    //вычисляем расстояние между двумя точками по углам камеры
    divideDistansePos = Vector3.Distance(LeftPos, RightPos);
    // + расстояние ширины. ( ) лишние

    //получаем кол-во точек которые необходимо округлить.
    divideDistansePos /= minInterval;
    // + Не целочисленное (дробное) значение

    //точное число точек
    countSpawnerPoint = (int)Mathf.Round(divideDistansePos);
    // + точное? o_O Целочисленное значение!
    // + Для этого есть Mathf.RoundToInt();

    divideDistansePos /= countSpawnerPoint;
    // + float/int = int !!!   float/(float)int = float !!! Умножения тоже касается
    // + Не целочисленное значение делим на тоже самое, но целочесленное чтобы получить 1... WTF?
    // + Генератор случайного кода? Любим гусей через парадоксальную абстракцию?
}

void Generate () {
    for (int i = 0; i < countSpawnerPoint; i++) {
        NextPos = Camera.main.ViewportToWorldPoint(new Vector3(i+divideDistansePos, 1, 0));
        // + Viewport нормализован! Диапазон значений от 0f до 1f, как ты и указывал LeftPos и RightPos
        // + i+divideDistansePos #№& Снова генератор? Сам то понял что оно делает?
        Instantiate(spawner, NextPos, Quaternion.identity);
    }
}

void Update () {
    Generate();
    // + Нахрена это делается каждый кадр?
}

И в общем и целом весь план перехват с Viewport полная хрень.

У камеры есть поле Size и этот Size*2f в 2D есть высота экрана в сцене, а через отношение Screen.width и Screen.height можно узнать и ширину (они кстате int не накосяч опять с делением).

Я понял, что ты паршиво считаешь (умножаешь и делишь) и путаешь int и float, но научиться нужео, потому что в переди ещё придётся разбираться с окружностью (Sin и Cos);

Тупо пробуй много раз. И ещё пользуйся Debug.Log(), чтобы понимать чё там у тебя навычислялось (к примеру divideDistansePos).

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

Используй компонент Grid Layout Group для матрицы или Vertical/Horizontal Layout Group. Там задаешь размеры ячеек, расстояние между ними и все такое, закидываешь в объект с этим компонентом дочерние и вуаля, они на одинаковом расстоянии. Все находится на Canvas и поэтому будет скейлиться по экрану.

→ Ссылка