- Home /
[Help] Instantiate 2D prefabs without overlapping
I'm trying to instantiate a prefab at random locations around the screen without them overlapping. With the way I have the code, their center's never overlap, but the edges do. Preferably, I would also not have instantiated prefabs overlap existing objects like the red brick in the image below. The code I have so far:
brickCount = Random.Range(oneHitMin, oneHitMax);
var spawnLocationList = new List<Vector2>();
for (var i = 0; i < brickCount; i++) {
var spawnLocation = new Vector2(Random.Range(0.5f, 15.5f), Random.Range(3.2f, 11.84f));
GameObject enemySpawn = Instantiate(oneHit, spawnLocation, Quaternion.identity) as GameObject;
enemySpawn.transform.parent = transform;
if (boxIsTouching()) {
Debug.Log("Duplicate found!");
i--;
continue;
}
spawnLocationList.Add(spawnLocation);
}
I've tried to use Physics2D.OverlapBox, Physics.OverlapSphere, and other things but I can't get them to work properly. I've been looking through Unity Docs and searching on Google for a while now and so far I haven't been able to figure this out. Any help would be greatly appreciated!
I've also looked at creating a list or array of all the locations that could be used to spawn a prefab, but I'd like to be able to have the location completed randomized with the bounds of the play space, if possible.
Update 1: I've been able to get the Physics2D.OverlapAreaAll to work on a regular object, the next step is to access the collider on a spawned prefab. This is how I was able to get the object to find colliders beyond itself:
public bool boxIsTouching() {
bool touchy = false;
var colliderPosMin = this.gameObject.GetComponent<BoxCollider2D>().bounds.min;
var colliderPosMax = this.gameObject.GetComponent<BoxCollider2D>().bounds.max;
//colliders = Physics.OverlapSphere(transform.position, radius);
colliders = Physics2D.OverlapAreaAll(colliderPosMin, colliderPosMax);
if (colliders.Length > 1) {
print("touching");
touchy = true;
}
return touchy;
}
Your answer
Follow this Question
Related Questions
How to Instantiate a GameObject from a ScriptableObject piece of script? 0 Answers
How prefab the instance works? 1 Answer
instantiating a projectile continually over time 2 Answers
Adding prefabs to a list or an array from a folder and instantiating them. 2 Answers
Moving a rigidbody prefab forward wafter instantiated 3 Answers