Рандомная генерация префабов в Unity2D

Я хотел бы, чтобы префабы спавнились на расстоянии друг от друга, и чтобы они не залезали друг на друга. Код:

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class RandomGenerate : MonoBehaviour
{
public Transform spawnPos;
[SerializeField] Vector2 range;
[SerializeField] GameObject platform;
public int SpawnCount;
public int Generated = 0;
public float minRange, maxRange;

// Start is called before the first frame update

IEnumerator Spawn()
{
    int rand = Random.Range(0, 3);
    if (rand == 0)
    {
        minRange += 10f;
        maxRange += 15f;
        yield return new WaitForSeconds(1);

        Vector2 pos = spawnPos.position + new Vector3(Random.Range(minRange, maxRange), Random.Range(0, 3));
        Instantiate(platform, pos, Quaternion.identity);
        
    }
    if (Generated <= 24)
    {
        Repeat();
    }
   
}
void Start()
{
    StartCoroutine(Spawn());
}
void Repeat()
{
    StartCoroutine(Spawn());
    Generated++;
}

}


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

Автор решения: Qwer
  1. Генерируешь случайную позицию.
  2. Генерируешь Bounds на основе этой позиции и Bounds коллайдера или МешРендерера платформы.
  3. Через Physics.CheckBox проверяешь пересекается ли этот Bounds с другими на сцене. Если да - спаунишь объект, если нет - повторяешь с п. 1.

Имей в виду, если platform это префаб, а не объект на сцене, то у него изначально будут Bounds нулевого размера, пока он на сцене не появится.

→ Ссылка