How to instantiate increasing amount of a game object in a given area without overlapping?
Basically, I'm trying to figure out how I can instantiate an ever-increasing amount of an object without the objects overlapping. The player presses a button, and a coin spawns. They get an upgrade, press the button, two coins spawn, and so on and so forth. I've gotten the increasing amount spawning working using a for loop, and added random parameters to make the spawning area larger, but the way the for loop works, it instantiates all of the objects essentially in "clusters". This causes them to collide heavily, which sends the objects flying, and also causes a great deal of lag while they try to untangle themselves from one another. This is the code I'm working with so far, but I'm sure there must be a better way to do this.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClickScript : MonoBehaviour
{
public UnityEngine.UI.Text CPC;
public UnityEngine.UI.Text CoinDisplay;
public float coin = 0;
public float CoinPC = 1;
public GameObject Coin;
public GameObject spawner;
public Vector3 randomPos;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
CoinDisplay.text = "Coins: " + coin;
CPC.text = "CPC: " + CoinPC;
randomPos = new Vector3(Random.Range(0, 400), Random.Range(0, 100), Random.Range(0, 100));
}
public void Clicked()
{
coin += CoinPC;
for(float i = 0; i < CoinPC; i++)
{
Instantiate(Coin, spawner.transform.position + randomPos, Random.rotation);
}
}
}
Thanks for any help in advance.
Answer by Dragate · Dec 12, 2017 at 10:17 AM
Try to use one of the Check/Overlap functions to check for colliders in the area you are about to instantiate. With a geometry of a coin, CheckBox or OverlapBox seem the most suitable.
CheckBox will return true if it collides anything. If you want to process the info of the colliders hit, use OverlapBox since it returns collider array instead of bool.
Thanks for your answer, I'll do some research on those functions and give them a try.