@Jut_Rut

Как импортировать текстуру повторно, или как получить доступ к texture.GetPixel()?

Проблема с доступом к texture.GetPixel, нужно поменять read/write поле на true - это я понимаю, но дело вот в чём.
Я пытался нарезать картинку на равные части, то есть сделать multiple текстуру через TextureImporter. У меня вышло, но я захотел не включать пустые места, то есть если в данном фрагменте этой текстуры была прозрачность 100%, то есть 0, то она пропускалась. И вот, проблема с доступом в текстуре, ведь нужно свойство readable, но я не могу получить его, пока не импортировал эту текстуру, а после импорта повторно редактировать, чтобы установить фрагменты через
textureImporter.spritesheet = metadata.ToArray();
не выходит.
Подскажите, пожалуйста, удобное и красивое решение. Я могу сделать это, но это будет костыль, а хочется знать как это делается правильно и красиво.
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
Denkuwus
@Denkuwus
15 y.o
Чтобы получить доступ к TextureImporter, можно использовать класс AssetImporter:

using UnityEngine;
using UnityEditor;

// ...

// Загружаем текстуру
Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/MyTexture.png");

// Получаем импортер ассетов для текстуры
TextureImporter textureImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;

// Проверяем корректность импортера текстуры
if (textureImporter != null)
{
    // Задаем настройки листа спрайтов
    textureImporter.textureType = TextureImporterType.Sprite;
    textureImporter.spriteImportMode = SpriteImportMode.Multiple;
    textureImporter.mipmapEnabled = false;
    textureImporter.isReadable = true;

    // Задаем метаданные листа спрайтов
    TextureImporterSettings settings = new TextureImporterSettings();
    textureImporter.ReadTextureSettings(settings);
    List<SpriteMetaData> metadata = new List<SpriteMetaData>();
    // Add sprite sheet frames here
    settings.spriteMetaData = metadata.ToArray();
    textureImporter.SetTextureSettings(settings);

    // Импортируем текстуру
    AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(texture), ImportAssetOptions.ForceUpdate);
}


Код импортирует ресурс текстуры в виде листа спрайтов с указанными метаданными кадра. Для свойства isReadable будет установлено значение true, можно использовать Texture2D.GetPixel() для доступа к пиксельным данным текстуры.

Чтобы код еще и работал при запуске игры нужно получить доступ к пиксельным данным текстуры во время выполнения, нужно будет установить свойство Read/Write Enabled в настройках импорта текстуры в редакторе Unity перед импортом текстуры.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы