Getting the correct angle for OverLapBoxAll
Hi. My current situation is this. I've got a simple box sprite which is instantiated from a prefab and stretched between two points which are determined by where the player clicks on the screen. The prefab also has a BoxCollider2D component. I want to make it so that if the instantiated sprite overlaps one that is on the screen already, the one already on screen will be destroyed. I tried attaching the following script to the sprite's prefab but results are mixed, as in sometimes it will delete overlapping sprites, but sometimes it wont, and sometimes it even deletes ones that it isn't overlapping. I'm fairly certain I don't know how to get the angle I need properly, but I have looked everywhere and couldn't figure it out. The sprites are instantiated like this .
public Vector2 firstClick = new Vector2(0,0);
public GameObject square;
public GameObject circle;
public GameObject glow;
private GameObject clickGlow;
private void Start()
{
clickGlow = Instantiate(glow) as GameObject;
clickGlow.SetActive(false);
}
void Update()
{
if (Input.GetMouseButtonDown(0))
CreateFloor();
if (Input.GetMouseButtonDown(1))
{
GameObject go = Instantiate(circle) as GameObject;
go.transform.position = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
}
public void CreateFloor()
{
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (firstClick == new Vector2(0,0))
{
firstClick = mousePosition;
clickGlow.SetActive(true);
clickGlow.transform.position = mousePosition;
}
else
{
GameObject go = Instantiate(square) as GameObject;
Vector3 centerPos = (firstClick + mousePosition) / 2f;
go.transform.position = centerPos;
Vector3 direction = mousePosition - firstClick;
direction = Vector3.Normalize(direction);
go.transform.right = direction;
Vector3 scale = new Vector3(1, .1f, 1);
scale.x = Vector3.Distance(firstClick, mousePosition);
go.transform.localScale = scale;
clickGlow.SetActive(false);
firstClick = new Vector2(0,0);
}
}
and the BoxColliderAll is determined with this.
private void Start()
{
Collider2D[] collisions = Physics2D.OverlapBoxAll(transform.position, transform.localScale, Vector2.Angle(Vector2.zero, transform.position));
foreach (Collider2D collider in collisions)
{
if (collider.tag == "Floor" && collider.gameObject != this.gameObject)
Destroy(collider.gameObject);
}
}
Answer by ItsAaron · Sep 11, 2017 at 10:49 PM
Nevermind finally got it. Dont know why I was using transform.position at all. Used transform.eulerAngles.z and it works perfectly!