前言
多人同屏在线游戏或者战斗场景复杂的手游,角色或者模型的头顶UI往往非常头疼。举个例子,1个场景中有N个角色,每个角色对应一个UI。我们考虑最简单的情况,UI有一个Text显示名字,一个Image显示血量。2者相互重叠。UGUI在一般情况下会为我们合并同个canvas下相邻深度,材质,纹理相同的drawcall(说的不够严谨,其具体的策略可以去了解,不是本文重点)。但是显然这里我们会得到 2*N个dc。这个消耗是非常巨大的。
解决思路
建立一个mesh,创建一个文本的submesh,一个图片的submesh。计算所有需要绘制的text和image 顶点,uv,color,分别保存, 并设置到对应的材质。使用canvasrender渲染mesh。这样子我们仅仅需要2个dc(甚至一个dc),便可以完成渲染。
这种方法可以大大减少dc的带来cpu的沉重消耗,虽然我们付出了重新计算mesh的 代价,但是从性能上来说是值得的。
这个方法有些优化方法和不足之处。在之后有时间,我把对应的代码和shader分享的时候,在分析。现在先记录个思路。
网友评论