User: using UnityEngine;
using System.Collections.Generic;

public class ObjectPlacer : MonoBehaviour
{
    public GameObject[] objectsToPlace; // Массив объектов, которые нужно разместить
    public GameObject table; // Стол, на который нужно разместить объекты
    public Vector3 offset = Vector3.zero; // Смещение относительно верхней поверхности стола
    public int maxAttempts = 100; // Максимальное количество попыток для размещения каждого объекта
    public float minDistanceBetweenObjects = 0.5f; // Минимальное расстояние между объектами

    private List<GameObject> placedObjects = new List<GameObject>(); // Список уже размещённых объектов

    void Start()
    {
        if (objectsToPlace == null  objectsToPlace.Length == 0  table == null)
        {
            Debug.LogError("Объекты для размещения или стол не заданы!");
            return;
        }

        PlaceObjectsOnTable();
    }

    void Update()
    {
        // Отслеживаем нажатие клавиши 'R'
        if (Input.GetKeyDown(KeyCode.R))
        {
            ReloadObjects();
        }
    }

    void PlaceObjectsOnTable()
    {
        Collider tableCollider = table.GetComponent<Collider>();
        if (tableCollider != null)
        {
            Vector3 tableTopPosition = tableCollider.bounds.max;

            foreach (GameObject obj in objectsToPlace)
            {
                bool placedSuccessfully = false;
                for (int attempt = 0; attempt < maxAttempts; attempt++)
                {
                    float randomX = Random.Range(tableCollider.bounds.min.x, tableCollider.bounds.max.x);
                    float randomZ = Random.Range(tableCollider.bounds.min.z, tableCollider.bounds.max.z);

                    Vector3 randomPosition = new Vector3(randomX, tableTopPosition.y, randomZ) + offset;

                    if (!IsOverlappingWithOthers(randomPosition))
                    {
                        GameObject newObject = Instantiate(obj, randomPosition, Quaternion.identity);
                        placedObjects.Add(newObject);
                        placedSuccessfully = true;
                        break;
                    }
                }

                if (!placedSuccessfully)
                {
                    Debug.LogWarning("Не удалось разместить объект после " + maxAttempts + " попыток.");
                }
            }
        }
        else
        {
            Debug.LogError("У стола нет коллайдера!");
        }
    }

    bool IsOverlappingWithOthers(Vector3 position)
    {
        foreach (GameObject placedObject in placedObjects)
        {
            float distance = Vector3.Distance(position, placedObject.transform.position);
            if (distance < minDistanceBetweenObjects)
            {
                return true;
            }
        }
        return false;
    }

    void ReloadObjects()
    {
        // Удаляем существующие объекты
        foreach (GameObject placedObject in placedObjects)
        {
            Destroy(placedObject);
        }
        placedObjects.Clear();

        // Заново размещаем объекты
        Debug.Log("Перезагрузка объектов...");
        PlaceObjectsOnTable();
    }
} Объекты иногдя создаются на краю, можно это как-то исправить?
AI: