Спрайты не будут отображаться в сцене, но код говорит, что это делает - PullRequest
0 голосов
/ 12 февраля 2020

Я почти закончил свою игру, над которой я работал в течение 5 месяцев. Сейчас я имею дело с системой сохранения и загрузки. Все работает, кроме загрузки спрайтов предметов. У меня есть коллекция экземпляров (предметов), которая сохраняет и загружает правильно. Проблема заключается в загрузке спрайтов в слоты инвентаря.

У меня есть функция, которая вызывается после успешной загрузки. Там гораздо больше кода загрузки, но это не важно для этой проблемы. Дело в том, что я загружаю коллекцию слитков в класс stati c, где хранятся все мои данные. После этого я вызываю функцию, которая должна загружать спрайты на основе этих данных.

    private void setData(Data _data)
    {
        Pdata.MaterialIngots = _data.materialIngots;

        LoadItemSprites();
    }

Я начинаю с foreach, чтобы пробежаться по всем слиткам в игре. Я успешно загружаю спрайт. После этого я загружаю слоты в массив gameObjects (порядок слотов не имеет значения). После этого я запускаю этот массив, используя foreach. У каждого слота есть скрипт, который имеет уникальный индекс. И в каждом слоте есть один ребенок - Имидж. Так что, если индекс слота и индекс объекта совпадают - должен быть спрайт. Загрузка спрайта сама выглядит не так уж и сложно. Я просто беру родительский объект gameobject (go .transform) и получаю первый дочерний объект (.GetChild (0)), а затем мне нужен компонент Image этого дочернего объекта (GetComponent ()) и его спрайт (.sprite). В конце я должен включить слот, чтобы увидеть его. Все это происходит успешно . Наконец, в журнале так сказано. Свойства ранее измененного игрового объекта не изменены . Что я делаю неправильно? Что мне не хватает? Пожалуйста, помогите .. Я действительно хочу от Fini sh это: (..

Debug.Log output image Image not changed properties

    private void LoadItemSprites()
    {
        foreach (MaterialIngot mingot in Pdata.MaterialIngots)
        {
            //load sprite
            Sprite thisSprite = Resources.Load<Sprite>(mingot.Path);
            if (thisSprite == null) break;
            gameObjects = GameObject.FindGameObjectsWithTag(mingot.Location + "Inventory");// as GameObject;
            Debug.Log(gameObjects.Length);
            //load sprite into location + index !!
            foreach (GameObject go in gameObjects)
            {
                if (go.GetComponent<SlotHandler>().index == mingot.LocationIndex)
                {
                    Debug.Log(go.transform.GetChild(0).GetComponent<Image>().sprite);
                    go.transform.GetChild(0).GetComponent<Image>().sprite = thisSprite;
                    Debug.Log(go.transform.GetChild(0).GetComponent<Image>().sprite.name);
                    Debug.Log(go.transform.GetChild(0).GetComponent<Image>().enabled);
                    go.transform.GetChild(0).GetComponent<Image>().enabled = true;
                    Debug.Log(go.transform.GetChild(0).GetComponent<Image>().enabled);
                }
            }
    }
...