unity游戏引擎-优化在Unity3D中改变精灵像素



问题:

一个月后,我回到了我的迷你游戏的精灵绘画原型。正如你在这个线程中看到的,我已经找到了在精灵上绘画的解决方案,因为脚本中有很大的嵌套循环,所以迷你游戏的情况并不好(我的意思是低FPS)。所以我尝试使用另一种方法代替Texture2D.SetPixel(),然后我使用Texture2D.SetPixels(),但像以前一样,FPS很低。

所以现在,我找不到任何解决这个问题的方法。我想到的最后一件事是并行。

你们觉得呢?

答:

与口袋老虎的帮助,如你所见。我在这个小游戏中使用了Texture2D.SetPixelsTexture2D.GetPixels,所以对于256 * 256的精灵,游戏几乎是60 FPS,对于512 * 512的精灵,它是25 FPS。它比使用Texture2D.SetPixelTexture2D.GetPixel更好,但仍然不好,我需要使用OpenGl命令。但这是比Texture2D.SetPixel更好的FPS,这不仅仅是因为使用了Texture2D.SetPixels 而是因为,我将循环语句限制在更小的正方形上而不是整个精灵,所以在循环中移动的顺序并没有那么多

当你使用SetPixels()时,有几件事你必须注意。

1)首先,如果你需要更新多个像素,那么永远不要使用SetPixel(),而是使用SetPixels(),因为这对性能更好。

2) Apply()函数在性能上也很重,每帧调用它也会大大降低性能。如果您正在循环,那么请确保从循环中排除Apply函数。

for(var i:int = 0 ... blahblahblah)
{
 setPixel on i;
}
Apply();

3)如果你的纹理大小是2的幂(32x32//64x64//128x128//512x512 ....),它也有很大帮助等等)。SetPixels()和Apply()命令执行得更差。

如果你已经尝试了我所建议的所有内容,并且FPS计数仍然很低,那么你仍然可以尝试减少纹理的大小,或者环顾四周并尝试使用本机OpenGL调用,这更快,但需要深入研究着色器和其他东西。

这里是源线程,我收集了我的信息,如果你有兴趣了解更多的细节。向Unity社区致敬。

最新更新