Unity3D中改变子画面像素的优化

时间:2015-07-13 17:19:04

标签: optimization unity3d sprite pixel texture2d

问题:

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

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

你觉得怎么样?伙计们?

答案:

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

1 个答案:

答案 0 :(得分:0)

当您使用SetPixels()时,您需要注意一些事项。

1)首先,如果您需要更新多个像素,那么请不要使用SetPixel()而应使用SetPixel s (),因为这样做会更好。

2)Apply()函数在性能上也很重要,并且每帧调用它也会使你的性能退缩很多。如果您正在循环,那么一定要从循环中排除Apply函数。

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

3)如果纹理化的强度为2(32x32 // 64x64 // 128x128 // 512x512 ....等),它也会有很大帮助。否则,SetPixels()和Apply()命令的执行方式会更差。

如果您已经尝试了我所建议的所有内容并且FPS计数仍然很低,那么您仍然可以尝试减小纹理的大小或环顾四周并尝试更快的原生OpenGL调用但需要深入了解着色器等等。

Here's我收集信息的源线程如果您对它有兴趣了解更多详细信息。团结社区的荣誉。