Я получаю сообщение об ошибке «Размеры цветовой поверхности не совпадают с размерами поверхности глубины» всякий раз, когда я пытаюсь использовать код скриншота, без какого-либо вызова или стека, что-либо еще о том, что я делаю неправильно.
У меня есть отдельная камера от моей основной камеры, цель которой - делать снимки экрана под разными углами. Иерархия как таковая:
- Основная камера захватывает трехмерную сцену так же, как обычная основная камера, включая компоненты постобработки. Нет HDR или MSAA.
- Камера GUI захватывает только слой пользовательского интерфейса. Ничего не включено, кроме MSAA.
- Холст и изображение - это просто водяной знак, отображаемый камерой GUI.
Я указываю и основную камеру, и камеру GUI на та же цель визуализации текстуры. Когда я буду готов сделать снимок экрана, я активирую компоненты камеры, поэтому Unity начинает работу и говорит им визуализировать кадр. В обратном вызове OnRenderImage
я отключаю камеру, чтобы ее можно было использовать снова, удаляю ранее назначенную текстуру рендеринга, извлекаю пиксели и сохраняю ее в формате PNG.
В отдельном тесте все это работает, как задумано. Нет сообщений об ошибках. Однако, когда я играю в полную игру, внезапно я получаю ошибки измерения на каждом скриншоте.
Я прочитал, что RenderTexture.IsCreated
проверит, доступна ли текстура рендеринга. Предполагается, что он будет установлен в false из-за большого разнообразия событий, таких как изменения окна. Я сделал невозможным даже получение ссылки на текстуру рендеринга без проверки, является ли значение IsCreated
bool истинным. Я также проверил, соответствует ли текстура рендера своему свойству Descriptor
из паранойи. Все эти проверки успешны.
Я не знаю, что посмотреть дальше.
Что СУПЕР странно, у меня есть генератор GIF, использующий довольно похожий код, который намного сложнее, и он не страдает от этой проблемы.
Кто-нибудь имел дело с этой ошибкой раньше? Есть намеки?