- Home /
OverlapCircle funcion to avoid Gameobject creation if Collision ?
Hi everybody !
I'm making a little game with objects appearing when I click. I have this code actually making things work : everytime I use the mouseclick a Gameobject is created where I click on the 2d game I created.
//Changed to an array of objects assign as many as you have in inspector
var boxes : GameObject[];
var boxCounter : int;
function Update()
{
if(Input.GetMouseButtonDown(0))//Checks to see if left mouse button was clicked.
{
CreateBox();
}
}
function CreateBox()
{
var mousePos : Vector2 = Input.mousePosition;
if (Physics2D.OverlapCircle(mousePos.x, 0.2, LayerMask.foreground ))
{ } else {
//Depth you want the center of the object to be is z which I used zero
var boxPos : Vector3 = camera.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, 10));
//I used the perfab box's rotation here but you can enter what you'd like as a euler using Quaternion.Euler(x,y,z)
Instantiate(boxes[boxCounter], boxPos, boxes[boxCounter].transform.rotation);
//This will increment if there are more boxes or reset to 0 if it is the last one.
if(boxCounter == boxes.length-1)
{
boxCounter = 0;
}else{
boxCounter ++;
}
}
}
I want to add a OverlapCircle function to avoid the creation of the object if there is already another one where I clicked. I don't know exactly how this function works, any idea?
Thanks in advance !
Answer by robertbu · May 02, 2014 at 12:27 AM
Untested, but here is a bit of rewrite that I think gives you what you are looking for. Note that the OverlapCircle() takes a world position, not float or screen position. It returns a collider, so you can check against null. I've removed the 'LayMask.foreground' parameter. You may need something here, but this is not the right way to do it.
#pragma strict
//Changed to an array of objects assign as many as you have in inspector
var boxes : GameObject[];
var boxCounter : int;
function Update()
{
if(Input.GetMouseButtonDown(0))//Checks to see if left mouse button was clicked.
{
CreateBox();
}
}
function CreateBox()
{
var mousePos : Vector2 = Input.mousePosition;
var boxPos : Vector3 = camera.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, 10));
if (Physics2D.OverlapCircle(boxPos, 0.2) == null)
{
Instantiate(boxes[boxCounter], boxPos, boxes[boxCounter].transform.rotation);
boxCounter = (boxCounter + 1) % boxes.Length;
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613144038im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Jumping from a floor to another floor (2D) 2 Answers
Dynamically Created Edge Collider Woes 0 Answers
the player is flying off the ramp (collider) 1 Answer
Collision with renderer.enabled? 0 Answers