Эх, давно же я ничего не писал...наверное оттого, что по Unity уже столько всего написано, поэтому копипастить лишено всякого смысла...
В общем, напишу как обычно немного кода о том как загружать в рантайме, Multiple спрайты из ресурсов. Этот вопрос очень часто задают пользователи перешедшие на версию Unity 4.3 посему надеюсь, что хоть кому-то я смогу помочь.
Итак, ситуация: у нас есть атлас, разбитый на спрайты, каждому спрайту присвоено имя. Как загрузить весь атлас мы знаем, а теперь покажу как сделать тоже самое, но получив ссылки на каждый спрайтик атласа. Ладно хватит слов...поехали!
В общем, напишу как обычно немного кода о том как загружать в рантайме, Multiple спрайты из ресурсов. Этот вопрос очень часто задают пользователи перешедшие на версию Unity 4.3 посему надеюсь, что хоть кому-то я смогу помочь.
Итак, ситуация: у нас есть атлас, разбитый на спрайты, каждому спрайту присвоено имя. Как загрузить весь атлас мы знаем, а теперь покажу как сделать тоже самое, но получив ссылки на каждый спрайтик атласа. Ладно хватит слов...поехали!
/*
SpriteLoader.cs
обработку ошибок и прочие шлифовки кода не писал
дабы не нагромождать итак раздутый код.
Все пояснения в комментариях кода.
*/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SpriteLoader
{
// коллекция всех наших спрайтов с ключом = иненем српайта
private static Dictionary<string, Sprite> sprites_array = new Dictionary<string, Sprite>();
// получаем спрайт по имени
public static Sprite GetSprite(string name)
{
if(sprites_array.ContainsKey(name))
return sprites_array[name];
else
{
Debug.LogError("Спрайта с именем " + name + " не найдено");
return null;
}
}
// не забывать чистить словарь!
public static void ClearSpritesArray()
{
Debug.Log ("Чистим Словарь...");
sprites_array.Clear();
Resources.UnloadUnusedAssets();
}
// загрузить все спрайты из папки
// path - путь к папке со спрайтами, находящейся в ресурсах(Assets/Resources/)
public static void LoadAllSprites(string path)
{
Sprite[] temp_spr = Resources.LoadAll(path);
for(int i=0; i< temp_spr.Length; i++)
sprites_array.Add(temp_spr[i].name, temp_spr[i]);
}
// вернуть имена всех найденных спрайтов
public static string[] GetAllNames()
{
string[] str = new string[sprites_array.Count];
int i = 0;
foreach(KeyValuePair<string,Sprite> spr in sprites_array)
{
str[i] = spr.Value.name;
i++;
}
if(i == 0)
Debug.Log("Коллекция пуста!");
return str;
}
}
Так, а теперь для наглядности небольшой скрипт-тестик
/*
TestSpriteLoader.cs
*/
using UnityEngine;
using System.Collections;
public class TestSpriteLoader : MonoBehaviour
{
// Небольшой тестик, загрузим все спрайты из папки Resouces/Texteres/
// Выводим в консоль их имена, ищем спрайт с именем 11111
private void Start ()
{
SpriteLoader.LoadAllSprites("Textures");
string[] str = SpriteLoader.GetAllNames();
foreach(string s in str)
Debug.Log(s);
Sprite spr = SpriteLoader.GetSprite("11111");
}
private void OnApplicationQuit()
{
SpriteLoader.ClearSpritesArray();
}
}
Все! Планирую в дальнейшем в записках разобрать создание какой-нибудь простой 2D игры, если у кого-то будут предложения по жанру или желание помочь с заготовками арта к запискам буду очень признателен!
Комментариев нет:
Отправить комментарий