Система строительства в Unity2D

Возникла проблема с системой строительства в Unity2D, скрины с объектов инспектора:

Скрины с инспектора

Код скрипта тайлмапа:

public class BuildingsGrid : MonoBehaviour
{
    public Vector2Int GridSize = new Vector2Int(10, 10);

private Building[,] grid;
private Building FlyingBuilding;
[SerializeField] private Camera mainCamera;

private void Awake()
{
    grid = new Building[GridSize.x, GridSize.y];
    
    mainCamera = Camera.main;
}

public void StartPlacingBuilding(Building buildingPrefab)
{
    if (FlyingBuilding != null)
    {
        Destroy(FlyingBuilding.gameObject);
    }
    FlyingBuilding = Instantiate(buildingPrefab);
}

private void Update()
{
    Debug.Log(mainCamera.ScreenToWorldPoint(Input.mousePosition));
    Vector2 mouseWorldPosition = mainCamera.ScreenToWorldPoint(Input.mousePosition);
    

    if (FlyingBuilding != null)
    {
        int x = Mathf.RoundToInt(mouseWorldPosition.x);
        int y = Mathf.RoundToInt(mouseWorldPosition.y);
        
        FlyingBuilding.transform.position = new Vector2(x, y);
        
        if (Input.GetMouseButtonDown(0))
            FlyingBuilding = null;

        if (Input.GetMouseButtonDown(1))
            Destroy(FlyingBuilding.gameObject);
    }

    }
}

Код скрипта строения:

public class Building : MonoBehaviour
{
    public Vector2Int Size = Vector2Int.one;

    private void OnDrawGizmosSelected()
    {
        for (int x = 0; x < Size.x; x++)
        {
            for (int y = 0; y < Size.y; y++)
            {
                Gizmos.color = new Color(0.88f, 0f, 1f, 0.3f);

                Gizmos.DrawCube(transform.position + new Vector3(x, y, 0), new Vector3(1, 1, 0));

            }
        }
    }

}

Здание выбирается по кнопке, летает за курсором, но возникла проблема с его постановкой.

При нажатии на кнопку здание ставится (сразу под кнопкой) и тут же создаётся новое вместо того, чтобы старое просто уничтожалось. Как понял, здесь нужно использовать Ray2D или RaycastHit2D, но мне не хватает навыков (в гугле не забанили, но не нашёл решения).

Пытался адаптировать код с гайда где был показан пример для 3D.

Заранее спасибо за ответ.


Ответы (1 шт):

Автор решения: Ersent Celline

На деле всё оказалось очень просто. Первая проблема с постановкой здания вместо уничтожения решилась правкой кода, а именно -

Вместо:

if (Input.GetMouseButtonDown(1))
        Destroy(FlyingBuilding);

Прописал это:

if (Input.GetMouseButtonDown(1))
        Destroy(FlyingBuilding.gameObject);

Вторая проблема (с постановкой здания сразу под кнопкой при её повторном нажатии) решилась так:

        if (Input.GetMouseButtonDown(0) && EventSystem.current.IsPointerOverGameObject() == false)
            FlyingBuilding = null;
→ Ссылка