Я почти закончил свою игру, над которой я работал в течение 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 это: (..
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);
}
}
}