Правильное Хранение спрайтов
Есть класс GameResources, которых хранит стандартные характеристики мобов. Также есть метод, генерящий мобов. Он заполняет лист с актуальными мобами из GameResources через свой класс LevelData, генерит картинки под каждого, делает их детьми canvas (иначе не отобразятся).
В данном примере возникает ошибка в image.sprite = levelData.ActualMobs[i].Imagepath, так как спрайту нельзя присвоить string (логично), собственно, ее и хотелось бы избежать.
Суть вопроса: каким образом отредактировать код и исправить ошибку, чтобы изменение картинок все же было возможно? Вариант через создание огромного количества публичных полей и ручное занесение в них картинок само собой не рассматривается как кривой донельзя.
Из соображений использовать метод, возвращающий ассет по ссылке, но с такими не знаком.
Заранее спасибо за помощь.
Код:
public static class GameResources
{
public static readonly Mob skeleton = new Mob("Skeleton", 12, 12, 2, "Assets/Resources/Skeleton.jpg");
public static readonly Mob mushroom = new Mob("Mushroom", 8, 8, 3, "Assets/Resources/Mushroom.jpg");
}
public class NewBattle : MonoBehaviour
{
public GameObject obj;
public GameObject canvas;
void Generator(LevelData levelData)
{
levelData.ActualMobs = new List<Mob>();
for (int i = 0; i < levelData.RoomNumber; i++)
{
levelData.ActualMobs.Add(levelData.PossibleMobs[Random.Range(0, levelData.PossibleMobs.Count())]);
print("adding");
}
for (int i = 0; i < levelData.ActualMobs.Count; i++)
{
int rnd = Random.Range(100, 400);
GameObject child = Instantiate(obj, new Vector3(rnd, rnd, 0), Quaternion.identity);
child.transform.SetParent(canvas.transform, false);
Image image = child.GetComponent<Image>();
image.sprite = levelData.ActualMobs[i].Imagepath;
print("creating");
}
}
Ответы (1 шт):
Забавно, но проблема изменения источников оказалась связана не только с необходимостью использовать Resources.Load, но и тем, что для изменения Image.sprite надо менять вовсе не его, а Image.overrideSprite. Хоть из названия это и следует, но для понимания сути пришлось залезть в сам класс, и узнать, что такое поле вообще существует.
Следовательно, в данном случае необходимо заменить всего одну строку:
image.overrideSprite = Resources.Load(levelData.ActualMobs[i].Imagepath);
Вопрос закрыт.