下面这张图片是优化后的截屏,但它也只能是张图,你可以通过这张图片了解我的游戏。
UFO 比较灵活些。每个 UFO 被分成 3 个独立的网格: 上,中,下。
由于我想随机的出现 UFO,并且随机的让 UFO 一部分活动 。 因此每个 UFO 的每个部分有3-4个素材。一个 UFO 大概有 12-17 次的绘图调用,然而我却发现每个 UFO 实际上有 17-30 次的绘图调用。而我大概会有 2-3 个 UFO 几乎同时出现在屏幕上,因此就有大概 50-100 次的绘图调用。好疼啊!
而在此刻,我非常非常渴望我能减少任何我能减少的绘图调用。因此我在网上找到了一个可以将所有网格合并成一个的脚本。但是这个这个脚本不能真正的适当的处理素材,所以我只能使用一种颜色的 UFO。我只能放弃多彩的漂亮的 UFO,而选用单调的讨厌的单一颜色的 UFO。通过对这个脚本的调整,我可以使用至少 2 种不同的颜色和一个纹理。 值得吗?当然了。30 次绘图调用听起来很多,也确实是。但是它表现的更好些,尽管我任然不能确信是否比之前好了很多。但是我将 UFO 绘图调用的次数减少到了仅仅 10 次左右。
是否所有的绘图调用的减少都能让我们的游戏运行的跟快呢?不一定。 如果你能减少绘图调用,这很棒!但是对于那些更灵活,微妙的部分,如果你愿意牺牲一些灵活而去减少绘图调用,也不是不行。
目前我已经把游戏运行期间的平均 150-200 次的绘图调用减少到了仅仅 75-90 次。这已经减少了很多次了!
最后一部分,UFO 射出的激光,我在深入的研究后也解决了绘图调用的问题。所有的激光也都有素材引用,这些UFO的射击间隔很短“哒-哒”。在全力射击下每个激光会有30-40次的绘图调用。还好,这比创建初始方块要容易多了,使用相同的无光源顶点颜色着色器,再分配一些顶点颜色到网格就好了。现在所有的激光只需要一次绘图调用,就算是UFO“哒-哒-哒”不停地射击也没问题。 ;-)
现在我已经将整个游戏的绘图调用降低到 30-45 次了,怎么样?还行吧!
其他的绘图调用是 UI 引起的,我本来打算减少 UI 对象的数量来提高速度,但是我现在的效果我觉得挺好的了。游戏运行的比以前更流畅了。
UFO 也使用了很少的绘图调用。但是想想大约 10 次和 30 次比较,还是有很大的区别的。减少绘图调用的最重要的规则是使用尽可能少的素材。如果可以的话尽量使用共享素材而不是引用的素材,这些一定会帮助你减少你的绘图调用。:-)
确保你只加载了一次资源在我的代码中我使用了一下资源加载,但是 Unity 没有缓存加载结果,因此导致了多次的加载了相同的资源。这个功能消耗了大量的性能。 我以前也是多次的加载了相同的素材到我的激光武器上,像往常一样游戏在电脑上运行的十分好,但是在 Android 上,就不行了。
最终我避免了重复加载资源,并且删掉了项目中资源加载的地方。但是在这之前,我创建了一个静态的字典,字符串作为 Key(资源的名称),资源作为 Value,然后,我使用的时候都会检查字典里是否已经存在 Key,如果没有就加载资源,否则从字典缓存里获取资源。
我建议你可以试着用这个方法加载舞台。
尽可能避免实例化