Не могу добавить объекты проц-генерацыи к столкновению строительства по сетке

Здраствуйте. Столкнулся с такой проблемой что я не могу объекты процедурной генерации заставить сталкиватса с простыми объектами . Дело в том что я сделал свою систему строительства по сетке без коллайдеров а с двумерным массивом координат и храню в нём ссылки на объекты которые там должны хранитса. И столкнулся с проблемой , когда нарпимер выбрал дом чтоб поставить , (он находитса в воздухе и следит за мышкой) то на деревя или камни которие генерируютса рандомно он может ставитса хоть такого не должно быть . Подскажыте как исправить BuildingGrid.cs

using UnityEngine;

public class BuildingGrid : MonoBehaviour
{
    [SerializeField] private Vector2Int gridSize;

    private Building[,] grid;
    private Building flyingBuilding;

    public Building[] points;

    private Camera mainCamera;

    private void Awake()
    {
        grid = new Building[gridSize.x, gridSize.y];

        mainCamera = Camera.main;
    }

    public void SpawnFlyingBuilding(Building buildingPrefab) // Спавним объект
    {
        if (flyingBuilding != null)
        {
            Destroy(flyingBuilding.gameObject);
        }
        flyingBuilding = Instantiate(buildingPrefab);
    }

    public void Update()
    {
        if ( flyingBuilding != null)
        {
            var groungPlane = new Plane(Vector3.forward, Vector3.zero);
            Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);

            if(groungPlane.Raycast(ray,out float position))
            {
                Vector3 worldPosition = ray.GetPoint(position);

                int x = Mathf.RoundToInt(worldPosition.x);
                int y = Mathf.RoundToInt(worldPosition.y);


                bool available = true;

                if (x < 0 || x > gridSize.x - flyingBuilding.Size.x) available = false; // проверка , не вышли мы за границы карты
                if (y < 0 || y > gridSize.y - flyingBuilding.Size.y) available = false; // проверка , не вышли мы за границы карты

                if (available && IsPlaceTaken(x, y)) available = false;

                flyingBuilding.transform.position = new Vector3(x, y, 0);
                flyingBuilding.SetTranspatrent(available);

                if (available && Input.GetMouseButtonDown(0))
                {
                    CheckCollisionFlyingBuilding(x,y);
                }
            }
        }
    }

    private bool IsPlaceTaken(int placeX,int placeY) // проверяем , можно ли поставить обэкт
    {
        for (int x = 0; x < flyingBuilding.Size.x; x++)
        {
            for (int y = 0; y < flyingBuilding.Size.y; y++)
            {
                if (grid[placeX + x, placeY + y] != null) return true;
            }
        }
        return false;
    }

    public void CheckCollisionFlyingBuilding(int placeX,int placeY) // ставим обэкт н карту
    {
        for (int x = 0; x < flyingBuilding.Size.x; x++)
        {
            for (int y = 0; y < flyingBuilding.Size.y; y++)
            {
                grid[placeX + x, placeY + y] = flyingBuilding;
            }
        }

        flyingBuilding.SetNormal();
        flyingBuilding = null;
    }

    public void OnDrawGizmos()
    {
        for (int x = 0; x < gridSize.x; x++)
        {
            for (int y = 0; y < gridSize.y; y++)
            {
                //Gizmos.color = new Color(0f, 10f, 200f, 0.3f);
                //Gizmos.DrawCube(transform.position + new Vector3(x, y, 0), new Vector3(1, 1, 1));
            }
        }
    }
}

Building

using UnityEngine;

public class Building : MonoBehaviour
{
    public Vector2Int Size;

    [SerializeField] private SpriteRenderer sprite;

    public void SetTranspatrent(bool available) // установить цвет текстуры
    {
        if (available)
        {
            sprite.color = Color.green;
        }
        else
        {
            sprite.color = Color.red;
        }
    }

    public void SetNormal() // вернуть текстуру в нормальное положение
    {
        sprite.color = Color.white;
    }

    public void OnDrawGizmos()
    {
        for (int x = 0; x < Size.x; x++)
        {
            for (int y = 0; y < Size.y ; y++)
            {
                Gizmos.color = new Color(0f, 10f, 200f, 0.3f);
                Gizmos.DrawCube(transform.position + new Vector3(x, y, 0), new Vector3(1, 1, 1));
            }
        }
    }
}

Procedure Generation

using UnityEngine;

public class ProcedurGeneration : MonoBehaviour
{
    public GameObject[] objects;

    private void RandomGeneratoin()
    {
        int randomPoint = Random.Range(0, objects.Length);
        Instantiate(objects[randomPoint], transform.position, Quaternion.identity);
    }

    public void Start()
    {
        RandomGeneratoin();
    }
}

Если что на точках где должны спавнитса древья, камни , трава есть скрипт Building с указаным размером


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