BRO_TIGER
@BRO_TIGER
Indie Developer (C#, JS)

Как организовать удаление лишних объектов с информацией характеристик Объектов?

Доброго времени суток Тостер! Задумался о добавлении в своем проекте неких характеристик разных деталей с разными характеристиками, создал несколько скриптов: один привязан к "Контент листу" внутри которого все элементы равнялись, второй к префабу "таблички" с под значок, название, и кол-во...
Сделал более менее адекватное создание префабов внутри Контент листа, при наведении курсора мышки пользователя на интересующую деталь выводились список характеристик, но при наведении на другую деталь таблички с характеристиками оставались прежними. Я задумался: А как организовать адекватное удаление лишних "Табличек"? Хотел создать удаление через цикл while но... Windows не хочет его переваривать и просто уходит в накаут))) Знаете ли вы как адекватней организовать удаление?
P.S. При наведении курсора мышки на объект Контент лист появляется, а когда курсор уходит Контент лист исчезает...

DetailInfo - Скрипт
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;


[System.Serializable]
public class DetailInfos
{
    public string nameInfoLabel;
    public Sprite infoSorta;
    public int infoCount;
}


public class DetailInfo : MonoBehaviour
{
    public List<DetailInfos> InfoPrefabs;
    public GameObject StatisticPrefab;

    public Text detailName;
    public Text detailInfo;
    public Image sortaImage;

    GameObject currentobject;
    RaycastHit hit;

    GameObject statisticGameObject;
    BuildingSystem buildingSystem;
    BuildingHUB buildingHUB;
    DetailRefs detailRefs;

    bool statisticPrefabSpawned;
    bool readyToClear;


    void Start()
    {
        buildingSystem = Camera.main.GetComponent<BuildingSystem>();
        buildingHUB = GameObject.Find("Building_Manager").GetComponent<BuildingHUB>();
    }


    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit))
            currentobject = hit.transform.gameObject;

        detailRefs = currentobject.GetComponent<DetailRefs>();

        if (detailRefs.highlight)
        {
            detailName.text = detailRefs.nameLabel;
            detailInfo.text = detailRefs.infoLabel;
            sortaImage.sprite = detailRefs.sortaImage;

            InfoPrefabs = detailRefs.info;

            if (!statisticPrefabSpawned)
            {
                for (int i = 0; i < InfoPrefabs.Count; i++)
                {
                    DetailInfos info = InfoPrefabs[i];

                    statisticGameObject = (GameObject)Instantiate(StatisticPrefab, this.transform);
                    SampleInfoPrefab sampleInfoPrefab = statisticGameObject.GetComponent<SampleInfoPrefab>();
                    sampleInfoPrefab.Setup(info, this);
                }

                statisticPrefabSpawned = true;
            }
        }
    }
}
SampleInfoPrefab - Скрипт
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class SampleInfoPrefab : MonoBehaviour
{
    public Text nameLabel;
    public Image iconImage;
    public Text countText;

    private DetailInfos info;
    private DetailInfo scrollList;

    public void Setup(DetailInfos currentInfo, DetailInfo currentDetailInfo)
    {
        info = currentInfo;

        nameLabel.text = info.nameInfoLabel;
        iconImage.sprite = info.infoSorta;
        countText.text = info.infoCount.ToString();
        scrollList = currentDetailInfo;
    }
}
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
BRO_TIGER
@BRO_TIGER Автор вопроса
Indie Developer (C#, JS)
Посидев немного над скриптом и на сам проект, а так же убирая галочки объекта SetActive в Контент Листе, я заметил то что если убрать галочку то Контент Лист сам сократится до нужных размеров... И я придумал как без заморочек сделать систему... Просто когда объект в определенной сортировке, можно включать через SetActive уже готовую карточку и её остается только заполнить... А я заморачивался насчет Instatiate и Destroy думая что по-другому никак нельзя...

Кусочек скрипта с изменениями
if (detailRefs != null)
        {
            detailName.text = detailRefs.nameLabel;
            detailInfo.text = detailRefs.infoLabel;
            sortaImage.sprite = detailRefs.sortaImage;

            if(detailRefs.sort == DetailRefs.objectsorts.hull)
            {
                hullInfo.SetActive(true);
                hardwareInfo.SetActive(false);

                strenght[0].text = detailRefs.strength.ToString();
                mass[0].text = detailRefs.density.ToString();
            }
            else if (detailRefs.sort == DetailRefs.objectsorts.hardware)
            {
                hullInfo.SetActive(false);
                hardwareInfo.SetActive(true);

                strenght[1].text = detailRefs.strength.ToString();
                energy[0].text = detailRefs.energy.ToString();
                mass[1].text = detailRefs.density.ToString();
            }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы