【问题标题】:GUI.DrawTextureWithTexCoords() draws with wrong colorsGUI.DrawTextureWithTexCoords() 用错误的颜色绘制
【发布时间】:2019-10-05 04:56:59
【问题描述】:

附上的图片总结了它。右边是我想要的。左边是我得到的。颜色不对。 (左脸图像来自在 Unity 中运行的游戏的截屏。右脸图像是我在屏幕截图顶部粘贴正确的艺术以进行比较)

我从OnGUI() 调用的用于覆盖面部图像的代码:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

有问题的纹理来自 Photoshop 保存的 1024x1024 PNG。当我打开这个 PNG 时,它的颜色是正确的,但在 DrawTextureWithTexCoords 将它呈现到屏幕上时却没有。我尝试了不同的 Photoshop 导出设置和纹理导入设置,但无济于事。如果我错过了那里的东西会很好,但我似乎已经没有旋钮可以旋转了。

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

据我所知,没有任何代码可以处理纹理或执行会影响渲染的操作。我尝试关闭后处理作为测试,但它不会影响 GUI。

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

如何让面部艺术以正确的颜色呈现?

【问题讨论】:

  • 您能否提供导入资产的检查器值?过滤和格式?
  • 我绝对会的,感谢您的提问。我需要一点时间才能回到它 -
  • 另外,如果只是将纹理资源拖到场景中,它会正确显示吗?还是看起来和 DrawTexture 一样?
  • 尝试使用 Update() :D
  • OnGUI 每帧调用很多很多次。我不知道这是否是真正的原因,但它可能很简单,就像同一帧上的多个渲染使颜色过饱和一样。

标签: c# unity3d


【解决方案1】:

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

我替换了原来的代码:

GUI.DrawTextureWithTexCoords(toRect, texture, fromRect);

...与:

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

这解决了问题。上面的代码是从OnGUI() 调用的,其行为与原始代码完全相同,但颜色更正。

@Erik Overflow,除了其他有用的 cmets 外,还指出 OnGUI() 每帧被调用多次。因此,为了性能,我会考虑将上述代码重构为来自OnPostFrame() 的调用。

【讨论】:

  • 你的意思是“上面的代码是从Update()调用的”吗?
  • 不,是从OnGUI()调用的。
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多