Как можно произвольно раскидат объекты относительно таргета Unity
Сейчас использую такой способ при старте спавню объект и даю ему позицию в рандоме, но есть минум они бывают спавняться очень близко друг к другу
for (int j = 0; j < Systemplanet.childCount; j++)
{
int Done = Random.Range(0, CreateRandom.Length);
MyDepoSits = RandomCategoriesAsteroid(8, CreateRandom[Done]._Rich, CreateRandom[Done]._Average, CreateRandom[Done]._Poor);
for (int i = 0; i < MyDepoSits.Length; i++)
{
GameObject item = Instantiate(PrefabItem);
item.transform.SetParent(Systemplanet.GetChild(j));
item.GetComponent<Asteroid>().target = Systemplanet.GetChild(j);
item.transform.position = Systemplanet.GetChild(j).position;
item.transform.position += new Vector3(Random.Range(-i / 4.4f, .5f), Random.Range(-i / 4.4f, .5f), Random.Range(-i / 4.4f, 2f));
item.transform.FindChild("Header").GetChild(0).GetComponent<TextMeshProUGUI>().text = MyDepoSits[i];
item.SetActive(false);
//CanvasChild.GetChild(i).GetChild(0).GetComponent<TextMeshProUGUI>().text = MyDepoSits[i];
}
Ответы (1 шт):
Автор решения: Mr.AntonDer
→ Ссылка
Тут надо только экспериментировать. Я бы рекомендовал всё, что связано с рандомам заносить в отдельные переменные, и дебажить через Unity в Рантайме.
В вашем случае, надо просто увеличить минимальную, возможную координату:
public float min = 4.8f;
public float max = 5f;
public float minZ = 4.8f;
public float maxZ = 2f;
for (int j = 0; j < Systemplanet.childCount; j++)
{
int Done = Random.Range(0, CreateRandom.Length);
MyDepoSits = RandomCategoriesAsteroid(8, CreateRandom[Done]._Rich, CreateRandom[Done]._Average, CreateRandom[Done]._Poor);
for (int i = 0; i < MyDepoSits.Length; i++)
{
GameObject item = Instantiate(PrefabItem);
item.transform.SetParent(Systemplanet.GetChild(j));
item.GetComponent<Asteroid>().target = Systemplanet.GetChild(j);
item.transform.position = Systemplanet.GetChild(j).position;
item.transform.position += new Vector3(Random.Range(-i / min, max), Random.Range(-i / min, max), Random.Range(-i / minZ, maxZ));
item.transform.FindChild("Header").GetChild(0).GetComponent<TextMeshProUGUI>().text = MyDepoSits[i];
item.SetActive(false);
//CanvasChild.GetChild(i).GetChild(0).GetComponent<TextMeshProUGUI>().text = MyDepoSits[i];
}
}
В данном случае, я поставил уже значения, с помощью который, объекты будут спавниться дальше. Но всё же, рекомендую тестировать в ран тайме
