Stucking with RTS Building detection using 2D Raycasts and 2DBoxColliders
Hi, i have a problem with my code thus far that i'm not entirely sure how to fix. At the minute im able to select a building from the menu of which the button that i press is tied to the "ChosenBuildingHouse" method of which produces a sprite image that follows the mouse so upon left clicking it places it and nullifies the current building variable as shown in the code. Although i've tried adding countless methods to prevent it from being placed on top of another sprite and i'm not sure how to go about doing this. Thank for you the time!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BuildingSystem : MonoBehaviour
{
[System.Serializable]
public class buildings
{
public string _buildingName;
public GameObject _building;
public Sprite _normalImg;
public Sprite _greenImg;
}
public buildings[] _buildings;
[SerializeField]
GameObject currentBuilding;
int currentID;
Vector2 mousepos;
void Start()
{
}
public void Update()
{
mousepos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y));
if (currentBuilding)
{
currentBuilding.transform.position = mousepos;
currentBuilding.GetComponent<SpriteRenderer>().sprite = _buildings[currentID]._greenImg;
currentBuilding.GetComponent<BoxCollider2D>().enabled = false;
}
if (currentBuilding && Input.GetMouseButtonDown(0))
{
placeBuilding();
}
if(Input.GetMouseButtonDown(0))
{
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if (hit.collider != null)
{
Debug.Log("object clicked : " + hit.collider.tag);
}
}
}
public void ChosenBuildingHouse(int ID)
{ //Easy way to make different buttons to spawn different using 0 - whatever number is in the buildings class!
currentID = ID;
currentBuilding = Instantiate(_buildings[currentID]._building, mousepos, Quaternion.identity);
}
public void placeBuilding()
{
currentBuilding.GetComponent<SpriteRenderer>().sprite = _buildings[currentID]._normalImg;
currentBuilding.GetComponent<BoxCollider2D>().enabled = true;
currentBuilding = null;
}
}
Your answer
Follow this Question
Related Questions
Unity2D Move character in tile increments with collision 1 Answer
All colliders not longer working 0 Answers
[Help] Merging multiple sprites to create a long single background 0 Answers
Problems using RaycastHit2D.collider, detection only on the rays origin 1 Answer
I cant get Unity Colliers to work!!! 2 Answers