Неверный формат изображения для импорта изображений

76
10

Я написал сценарий, который должен убедиться, что соотношение сторон моего изображения остается неизменным, когда я импортирую его в единство.
Это сценарий:

public class PostprocessImages : AssetPostprocessor
{
void OnPostprocessTexture(Texture2D texture)
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.npotScale = TextureImporterNPOTScale.None;
textureImporter.mipmapEnabled = false;
}
}

сценарий находится в папке "Редактор" в "Активы". Но когда я импортирую изображение, я получаю следующий результат:

enter image description here

это определенно не то, что я ищу.
Он должен выглядеть так:

enter image description here

Но когда я просто иду к инспектору импортированного изображения и меняю случайную настройку и нажимаю, применяйте текстуру, получив правильное соотношение сторон. И настройки, которые я изменил в коде. Правильны, когда я проверяю изображение. Но изображение не имеет правильного аспекта.
См. Изображение ниже:

enter image description here

как бы я сделал, чтобы изображение имело правильное соотношение сторон, прямо из getgo (когда я его импортирую). Потому что я не хочу делать это вручную, так как я должен импортировать хэндэнд изображения.

Дайте мне знать, если что-то неясно, поэтому я могу уточнить.

спросил(а) 2021-01-19T15:04:00+03:00 2 месяца, 3 недели назад
1
Решение
62

У меня нет этой проблемы, но я могу думать о возможных исправлениях.

Первое, что нужно сделать, это использовать функцию OnPreprocessTexture вместо OnPostprocessTexture. Это изменит текстуру до ее импорта.

public class PostprocessImages : AssetPostprocessor
{
void OnPreprocessTexture()
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.npotScale = TextureImporterNPOTScale.None;
textureImporter.mipmapEnabled = false;
}
}

Если это не сработает, вызовите TextureImporter.SaveAndReimport() после внесения изменений в Texture чтобы Unity снова импортировала его после внесения изменений. Вероятно, это поможет решить проблему. Стоит отметить, что вам нужен способ убедиться, что TextureImporter.SaveAndReimport() вызывается один раз, потому что вызов TextureImporter.SaveAndReimport() вызовет OnPreprocessTexture(). Не реализуя способ определить это, вы войдете в бесконечный цикл бесконечного импорта текстур. В приведенном ниже примере я использовал static List для реализации этого:

static List<TextureImporter> importedTex = new List<TextureImporter>();

void OnPostprocessTexture(Texture2D texture)
{
TextureImporter textureImporter = (TextureImporter)assetImporter;

/*Make sure that SaveAndReimport is called once ONLY foe each TextureImporter
There would be infinite loop if this is not done
*/
if (!importedTex.Contains(textureImporter))
{
textureImporter.npotScale = TextureImporterNPOTScale.None;
importedTex.Add(textureImporter);
textureImporter.SaveAndReimport();
}
}

ответил(а) 2021-01-19T15:04:00+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема