赞
踩
Canvas.SendWillRenderCanvases 如果占用比较高,那就说明Canvas消耗性能较高。
这里涉及到一一个文字的缓存算法,因为无法将所有的文字预先生成,那样开销太大,基本上是不可能的:
在Unty中字体对应的对象是font,它在首次请求文字的纹理缓存时,会生成一个256x256文小的
贴图,当这个贴图中装不下新的文字时,会扩大这个贴图的大小,最大可以到1024x1024,同时
通知上层"贴图变化了“(通过TextureRebulldcallback委托通知)。
如果当前贴图已经满了,又有新的文字请求时,font同样会通知上层贴图变化了。这样就会导致所
有文字重新绘制。Unity这里其实是在愉懒,它只是简单地通知上层“你们所占的位置都已经无效
了,请重新排队申请。“因为这时有可能很多文字并不渲染了,所以这样做并没有什么问题,
说到底,文字与图片其实都是纹理贴图,都是通过四边形(两个三角形)来注染,它们对于GPU来说 是没有区别的。
建立图元信息(HUDCharInfo)数据结构:
区分是文字或图片,用一-个bool变量表示 字符内容用char表示 (string 在堆上,有GC开销)
图片ID,用int来表示(之所以不用string,是因为string的开销较大)d)
纹理ID或名字
UV信息 (文字的4个顶点在UV中的位置)
颜色信息
相对坐标(混排的关键) 相对于HUD面板的坐标
其他
注意: HudVertex的类名实际是抽象的顶点,或者可称之为“图元"
自己定义文本格式,然后进行解析
使用BatterList 替代C# List
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。