Optimization Unity3D中精灵像素变化的优化

Optimization Unity3D中精灵像素变化的优化,optimization,unity3d,sprite,pixel,texture2d,Optimization,Unity3d,Sprite,Pixel,Texture2d,问题: 一个月后,我将回到原型上,为我的迷你游戏在雪碧上绘画。正如您在本中所看到的,我已经找到了在精灵上绘画的解决方案,而且由于脚本中有大的嵌套循环,小游戏的状态并不好(我指的是低FPS)。因此,我尝试使用另一种方法来代替Texture2D.SetPixel(),然后我使用Texture2D.SetPixels(),但就像在FPS低之前一样 所以现在,我找不到任何解决这个问题的方法。我脑子里最后想到的是与平行 你们觉得怎么样,伙计们 回答: 在你的帮助下。我在这个小游戏中使用了Texture2D

问题:

一个月后,我将回到原型上,为我的迷你游戏在雪碧上绘画。正如您在本中所看到的,我已经找到了在精灵上绘画的解决方案,而且由于脚本中有大的嵌套循环,小游戏的状态并不好(我指的是低FPS)。因此,我尝试使用另一种方法来代替
Texture2D.SetPixel()
,然后我使用
Texture2D.SetPixels()
,但就像在FPS低之前一样

所以现在,我找不到任何解决这个问题的方法。我脑子里最后想到的是与平行

你们觉得怎么样,伙计们

回答:


在你的帮助下。我在这个小游戏中使用了
Texture2D.SetPixels
Texture2D.GetPixels
,所以对于256*256的精灵,游戏速度几乎是60 FPS,对于512*512的精灵,速度是25 FPS。它比使用
Texture2D.SetPixel
Texture2D.GetPixel
要好,但仍然不好,我需要使用OpenGl命令。但是这种好的FPS而不是
Texture2D.SetPixel
这不仅仅是因为使用
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社区的荣誉。

第一次,我使用了
SetPixels
,但几乎没有什么变化,而是
SetPixel
。正如你在那个线程中看到的,首先我找到了被触摸或点击的像素,然后假设一个半径为20的圆,我改变了这个圆中的所有像素。因此,如果我想使用
SetPixels
我需要找到颜色数组的索引,然后将颜色值更改为alpha=0,然后将其发送到
SetPixels
方法。对于第二个,我使用了
Apply
out-of-loop,这样就没有任何问题了。对于第三个,我使用256*256 sprite,FPS为40,我认为这不好。因此,如果有任何问题,请告诉我。我有一个问题,使用十六个256*256精灵而不是一个1024*1024精灵是否好?谢谢你的回答是的,如果你能把你较大的纹理切成较小的,那是个好主意。如果您仍然需要60 FPS,您可以尝试在线程中或查找本机。然而,我不是这方面的专家。以前从未真正需要过它们,但它们比SetPixels()和Apply()快得多,因为它们是低级指令。