GUI.DrawTextureWithTexCoords () рисует с неправильными цветами - PullRequest
0 голосов
/ 04 октября 2019

Приложенная картинка подводит итог. Справа это то, что я хочу. Слева есть то, что я получаю. Цвета неправильные. (изображение левого лица - из захваченного скриншота из игры, запущенной в Unity. Изображение для правого лица - это вставка правильного изображения поверх скриншота для сравнения)

Код, который я вызываю с OnGUI()для наложения изображения лица:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

Текстура, о которой идет речь, взята из PNG 1024x1024, сохраненного из Photoshop. Этот PNG имеет правильные цвета, когда я его открываю, но не когда DrawTextureWithTexCoords отображает его на экране. Я экспериментировал с различными настройками экспорта в Photoshop и настройками импорта текстур, но безрезультатно. Было бы неплохо, если бы я что-то там пропустил, но у меня, кажется, закончились ручки для поворота.

В целях устранения неполадок я перетащил текстуру в сцену, применив ее в качестве материала к поверхности поверхности. сетка. Текстура отображается с правильными, оригинальными цветами на сетке. (Обратите внимание - это не то, что я пытаюсь сделать. Мне нужно, чтобы текстура отображалась в GUI, а не в сцене.)

Нет кода, который мне известен, который обрабатывает текстуру илиделать что-то, что повлияет на рендеринг. Я попытался отключить свою постобработку в качестве теста, но это не влияет на графический интерфейс.

Это Unity 2019.1.13f1, запущенный на IMac 2015 года. Я также включил снимок Инспектора в настройках импорта текстур ниже. И почти оригинальная текстура PNG (добавлен водяной знак).

Как заставить фейс-арт отображать правильные цвета?

Showing difference in colors Texture inspector Texture PNG

1 Ответ

1 голос
/ 04 октября 2019

Я нашел решение. Отвечая на мой вопрос ради потомков.

Я заменил оригинальный код:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

... на:

Graphics.DrawTexture(toRect, texture, fromRect, 0, 0, 0, 0);

Это исправило проблему. Код выше вызывается из OnGUI() и ведет себя точно так же, как исходный код, но с исправленными цветами.

@ Erik Overflow, в дополнение к другим полезным комментариям, указал, что OnGUI() вызывается много раз за кадр. Поэтому я рассмотрю возможность рефакторинга вышеупомянутого вызова на OnPostFrame() для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...