这是我的第一个问题!我希望你能忍受我。 :)
我正在Unity上进行洪水填充,尽管我已经能够在Texture2D上填充形状,但是只有在使用正交摄影机放大时才能看到更改。当我缩小时,它会恢复为原始图像。同样奇怪的是,这同时发生在我的编辑器和游戏场景中,以及我在Android上进行构建时。
可能是什么原因造成的?我该怎么做才能避免这种情况?我想念什么吗?
我尝试使用不同大小的图像,但是它的行为仍然相同。
这是放大后使用SetPixels()
填充形状后的外观。红色圆圈原为白色。请注意,编辑器未显示更改。图片尺寸为1920x1080:
这是缩小后的样子。现在,游戏场景也没有显示更改。我还在屏幕截图中包括了纹理的属性:
我还观察到它甚至可能与相机变焦无关,因为即使我没有放大太多,如果在检查器中按比例放大图像,也会出现变化的像素:
答案 0 :(得分:1)
您只为特定的mipmap值设置像素(默认情况下为0级),但是您需要将更改扩展到相机当前正在查看的mipmap级别。
您可以通过在将mipmap级别设置为0(可能是您所设置的像素)后将Texture2D.Apply()
设置为updateMipMaps
(默认设置)来调用true
已经在做)。
答案 1 :(得分:1)
您没有提供任何代码,因此很难说出实际情况。仅从描述来看,听起来好像是未更新的mipmap的问题。 Mipmap用于提供同一图像的不同分辨率,因此可以根据实际渲染纹理的大小使用适当大小的版本。
使用Texture2D.SetPixels()
时,您总是修改一个特定的Mipmap级别,即图像的一个特定尺寸的版本。默认情况下,此级别为0,即基本的mipmap级别,其中包含完整尺寸的版本。
从描述中听起来像是在修改基本mipmap级别后,您调用了updateMipmaps
参数设置为false
的{{3}},如Texture2D.SetPixels()中显示的示例。这样可以防止更新纹理的其他mipmap级别,因此只有完整版本具有更改,而其他都没有。现在,当以较小的比例(即通过其当前的缩放级别,通过缩小或缩小)渲染纹理时,更改不会显示,因为从未更新过相应的较小的mipmap。
Texture2D.Apply()
中的文档有点误导人:
如果
updateMipmaps
为true,则也将使用基本级别作为源重新计算mipmap级别。通常,在所有情况下都希望使用true,除非您自己使用SetPixels
修改了mip级别。
这表示您不希望使用updateMipmaps
时使用SetPixels
,但这实际上仅意味着从某种意义上说,如果您修改了所有单独的mipmap级别,就不会使用SetPixels
(例如SetPixels
中的示例)。如果仅修改了基础级别,那么您确实想使用updateMipmaps = true
,以便从修改后的基础自动更新其他mipmap级别。