Рандомная генерация префабов в 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
→ Ссылка
- Генерируешь случайную позицию.
- Генерируешь Bounds на основе этой позиции и Bounds коллайдера или МешРендерера платформы.
- Через Physics.CheckBox проверяешь пересекается ли этот Bounds с другими на сцене. Если да - спаунишь объект, если нет - повторяешь с п. 1.
Имей в виду, если platform это префаб, а не объект на сцене, то у него изначально будут Bounds нулевого размера, пока он на сцене не появится.