- Home /
How to prevent GameObject from spawning on top of each other?
I am making an "Battle simulator" game and before the match starts, the player can choose and place down the soldiers at the position he wants too. I just finished making it so that the player spawns on mouse position using raycast but my problem is that the objects can spawn on top of each other. I want it so that the raycast detects an sphere collider and if the player presses on the the gameobject(that is already instantiated), nothing will happen.
Here is my Spawner script:
public class Spawner : MonoBehaviour {
public GameObject objectToSpawn;
void Start ()
{
}
void Update ()
{
if(Input.GetMouseButtonDown(0)){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100)) {
Instantiate(objectToSpawn, hit.point, Quaternion.identity);
}
}
}
}
Answer by Dragate · Oct 27, 2017 at 06:05 PM
Physics.CheckSphere() is a handy function for this. Before you instantiate you do a CheckSphere() at your hit.point with the appropriate radius and it will return true if it hits any collider, otherwise false.
https://docs.unity3d.com/ScriptReference/Physics.CheckSphere.html
Physics.OverlapSphere() is another version that instead of returning bool will return an array of all colliders it hits, so you can loop through them in case you want to avoid particular colliders and not all of them.
Could you show an example of how i could do this on my script?
Your answer
Follow this Question
Related Questions
Raycast2d not working C# :( 1 Answer
Mouse plane does not detect height 1 Answer
Instantiate Objects on Cells created during run time 1 Answer
How to Limit Input.mousePosition or Raycast 1 Answer
Spawn Objects Where i click 2 Answers