(NGUI)label设置局部字体大小

最近项目里有个需求,在设计剧情对话的时候需要逐个字的播放一个label里的剧情对话,当然这不是关键,关键是策划需求剧情内的某些字段比如名字等需要区别于剧情对话的字体的大小。当然有人会说直接拼label就完事了,当然这是一种解决方案,这里分享一下通过修改uilabel来实现是更改局部字体大小的目的。

实际上label的绘制是在NGUIText.cs这个C#文件内的Print()接口实现的,其中有这样一段的代码:

 if (!bold)
                    {
                        if (!italic)
                        {
                            verts.Add(new Vector3(v0x, v0y));
                            verts.Add(new Vector3(v0x, v1y));
                            verts.Add(new Vector3(v1x, v1y));
                            verts.Add(new Vector3(v1x, v0y));
                        }
                        else // Italic
                        {
                            float slant = fontSize * 0.1f * ((v1y - v0y) / fontSize);
                            verts.Add(new Vector3(v0x - slant, v0y));
                            verts.Add(new Vector3(v0x + slant, v1y));
                            verts.Add(new Vector3(v1x + slant, v1y));
                            verts.Add(new Vector3(v1x - slant, v0y));
                        }
                    }
                    else // Bold
                    {
                        for (int j = 0; j < 4; ++j)
                        {
                            float a = mBoldOffset[j * 2];
                            float b = mBoldOffset[j * 2 + 1];


                            float slant = (italic ? fontSize * 0.1f * ((v1y - v0y) / fontSize) : 0f);
                            verts.Add(new Vector3(v0x + a - slant, v0y + b));
                            verts.Add(new Vector3(v0x + a + slant, v1y + b));
                            verts.Add(new Vector3(v1x + a + slant, v1y + b));
                            verts.Add(new Vector3(v1x + a - slant, v0y + b));
                        }
                    }

这段代码的是实现对当前的string设置显示的区域的,也就是说通过设置verts能够实现对当前string显示区域的设置,里面的v0x,v1x,v0y,v1y,是对应需要显示string面积的四条边界;

只要控制这样的区域就能实现对字体大小的控制。

需要注意的是每次字体变大或缩小后,在绘制下一个子节的时候需要移动x0和x1,防止造成,字体重叠的现象。


你可能感兴趣的:((NGUI)label设置局部字体大小)