GUI.DrawTextureWithTexCoords()用错误的颜色绘制

时间:2019-10-03 21:36:50

标签: c# unity3d

所附图片进行了总结。右边是我想要的。左边是我得到的。颜色是错误的。 (左脸图片来自在Unity中运行的游戏捕获的屏幕截图。右脸图片是我在屏幕截图上方粘贴了正确的图片,以便进行比较)

我从OnGUI()调用的用于叠加人脸图像的代码:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

有问题的纹理来自Photoshop中保存的1024x1024 PNG。当我打开该PNG时,其中的颜色正确,但是当DrawTextureWithTexCoords将其渲染到屏幕上时,该PNG中的颜色正确。我尝试了不同的Photoshop导出设置和纹理导入设置,但无济于事。如果我在那儿错过了什么,那会很好,但是我似乎已经没精打采了。

出于故障排除的目的,我将纹理拖动到场景中,并将其作为材料应用于网格的表面。在网格上以正确的原始颜色显示纹理。 (注意-这不是我要尝试做的事情。我需要纹理显示在GUI中,而不是在场景中显示。)

据我所知,没有代码正在处理纹理或做一些会影响渲染的事情。我尝试关闭后处理作为测试,但这不会影响GUI。

这在2015年的IMac上运行Unity 2019.1.13f1。我还在下面的纹理导入设置中包含了Inspector的快照。还有几乎原始纹理PNG(添加了水印)。

如何获得使用正确颜色渲染的人脸艺术?

Showing difference in colors Texture inspector Texture PNG

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。为了后代,回答我自己的问题。

我替换了原始代码:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

...具有:

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

此问题已解决。上面的代码从OnGUI()中调用,其行为与原始代码完全一样,但具有正确的颜色。

@Erik Overflow除了其他有用的注释外,还指出OnGUI()每帧被调用多次。因此,出于性能考虑,我将考虑将以上内容重构为来自OnPostFrame()的呼叫。