// BuildingManager.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;

public class BuildingManager : MonoBehaviour
{
    public Resources resources;     // Ссылка на скрипт Resources
    public GameObject buildingPanel;  // Панель со списком зданий
    public Transform buildingListContent; // Контент списка зданий
    public GameObject buildingItemPrefab; // Префаб элемента списка зданий
    public GameManager gameManager;

    public List<Building> availableBuildings = new List<Building>();

    void Start()
    {
        // Инициализируем список доступных зданий
        // (добавьте больше зданий по своему усмотрению)
        availableBuildings.Add(new Building("Хижина", 10, 5, 0, UnityEngine.Resources.Load<Sprite>("hutIcon")));
        availableBuildings.Add(new Building("Ферма", 25, 10, 5, UnityEngine.Resources.Load<Sprite>("farmIcon")));
        availableBuildings.Add(new Building("Колодец", 15, 0, 10, UnityEngine.Resources.Load<Sprite>("wellIcon")));

        // Отображаем список зданий в UI
        DisplayBuildingList();
    }

    // Отображение списка доступных зданий
    public void DisplayBuildingList()
    {
        Debug.Log("Отображаем список зданий...");  // Для отладки
        // Очищаем предыдущий список
        foreach (Transform child in buildingListContent.transform)
        {
            Destroy(child.gameObject);
        }

        // Заполняем список доступными зданиями
        foreach (Building building in availableBuildings)
        {
            Debug.Log(buildingItemPrefab);
            Debug.Log(buildingListContent);
            GameObject listItem = Instantiate(buildingItemPrefab, buildingListContent);
            Debug.Log(listItem.name);
            foreach (Transform child in listItem.transform)
            {
                Debug.Log(" - " + child.name);
            }

            // Находим компоненты внутри prefab'а
            Text listItemText = listItem.transform.Find("Text").GetComponent<Text>();
            Image listItemIcon = listItem.transform.Find("Icon").GetComponent<Image>();
            Button buildButton = listItem.transform.Find("BuildButton").GetComponent<Button>(); // Находим кнопку
            Debug.Log(listItemText);
            Debug.Log(listItemIcon);
            Debug.Log(buildButton);

            // Формируем текст для элемента списка
            string buildingInfo = $"{building.name}\n" +
                                 $"Стоимость: {building.cost} материалов\n" +
                                 $"Прирост населения: {building.populationBoost}\n" +
                                 $"Прирост счастья: {building.happinessBoost}";

            if (building.isBuilt)
            {
                buildingInfo += "\n<color=green>Построено</color>";
                buildButton.gameObject.SetActive(false); // Скрываем кнопку, если построено
            }

            listItemText.text = buildingInfo;
            listItemIcon.sprite = building.icon;

            // Добавляем обработчик на кнопку "Построить"
            buildButton.onClick.AddListener(() => TryBuildBuilding(building));
        }
    }

    // Попытка построить здание
    public void TryBuildBuilding(Building building)
    {
        // Проверяем достаточно ли ресурсов и не построено ли уже здание
        if (resources.buildingMaterials >= building.cost && !building.isBuilt)
        {
            resources.buildingMaterials -= building.cost;
            resources.UpdateResourceUI();

            // Применяем эффекты здания
            gameManager.population += building.populationBoost;
            gameManager.happiness += building.happinessBoost;
            gameManager.UpdatePopulationText();
            gameManager.UpdateHappinessText();

            // Отмечаем здание как построенное
            building.isBuilt = true;
            Debug.Log($"Здание {building.name} построено!");
        }
        else if (building.isBuilt)
        {
            Debug.Log($"Здание {building.name} уже построено!");
        }
        else
        {
            Debug.Log("Недостаточно ресурсов!");
        }
            DisplayBuildingList(); // Обновляем список в любом случае
        }
    }

// Building.cs - механика строительства
using UnityEngine;

[System.Serializable]
public class Building
{
    public string name;        // Название здания
    public int cost;           // Стоимость постройки (материалы)
    public int populationBoost;  // Прирост населения (опционально)
    public int happinessBoost;   // Прирост счастья (опционально)
    public Sprite icon;        // Иконка здания (для UI)
    public bool isBuilt;        // Построено ли здание

    public Building(string name, int cost, int populationBoost, int happinessBoost, Sprite icon)
    {
        this.name = name;
        this.cost = cost;
        this.populationBoost = populationBoost;
        this.happinessBoost = happinessBoost;
        this.icon = icon;
        this.isBuilt = false; // По умолчанию здание не построено
    }
}

Это код системы строительства построек в моей квестовой игры на движке Unity. При запуске игры следующие ошибки и не отображается в списке добавленные постройки и их данные. В списке построек только один пункт и со стандартными данными. Вот ошибки:
Отображаем список зданий...
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:31)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

BuildingItemPrefab (UnityEngine.GameObject)
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:41)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

Content (UnityEngine.RectTransform)
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:42)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

BuildingItemPrefab(Clone)
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:44)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

 - Icon
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:47)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

 - Text
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:47)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

 - buildButton
UnityEngine.Debug:Log (object)
BuildingManager:DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:47)
BuildingManager:Start () (at Assets/Scripts/BuildingManager.cs:25)

NullReferenceException: Object reference not set to an instance of an object
BuildingManager.DisplayBuildingList () (at Assets/Scripts/BuildingManager.cs:53)
BuildingManager.Start () (at Assets/Scripts/BuildingManager.cs:25)