UGUI源码解析(二十)Text

Text

Text继承了MaskableGraphic, ILayoutElement。

OnPopulateMesh方法

  • 重写Graphic的OnPopulateMesh方法,会在Graphic的Rebuild方法被调用,为CanvasRenderer的Mesh提供了顶点位置、顶点颜色、UV和三角形信息。
  • 根据用户设置生成了一个TextGenerationSettings文本生成设置,
  • 然后调用TextGenerator.PopulateWithErrors生成Mesh的顶点、顶点颜色、UV和三角形信息。
  • 计算偏移量(例如左对齐需要紧靠左边),最后遍历TextGenerator的顶点数组,将它们的位置除以pixelsPerUnit(每单元像素)并加上偏移量(如果有的话),得到的结果填到VertexHelper。

OnEnable方法

先调用TextGenerator.Invalidate(),使TextGenerator失效,将在下次调用Populate时,强制全文生成。之后调用了FontUpdateTracker.TrackText,把自己添加到字体更新追踪器中。

OnDisable方法

调用FontUpdateTracker.UntrackText,把自己从字体更新追踪器中移除。

FontTextureChanged方法

先调用TextGenerator.Invalidate(),使TextGenerator失效。如果在CanvasUpdateRegistry的图形的重建中或布局的重建中,只为新的UV生成顶点。否则,调用SetAllDirty(分别设置Layout布局、Vertices顶点和Material材质为Dirty)

属性:

Text的Get方法

返回m_Text

Text的Set方法

如果value为空,给m_Text设置空字符串。然后调用SetVerticesDirty,等待重绘。

如果value不为空,把value设置到m_Text,调用SetVerticesDirty和SetLayoutDirty,等待重绘。

Font的Get方法

返回m_FontData.font

Font的Set方法

先把自己从FontUpdateTracker移除,把value设置给m_FontData.font,然后把自己添加到FontUpdateTracker中。最后调用SetAllDirty,等待重绘。

其他的一些属性,比如fontSize,alignment(对齐方式),supportRichText(支持富文本),horizontalOverflow(水平是否溢出),verticalOverflow(垂直是否溢出),lineSpacing(行间距),fontStyle(字体样式),这些方法的Set方法,会给m_FontData中的相应属性赋值,并调用SetVerticesDirty和SetLayoutDirty,等待重绘。

 

FontUpdateTracker类

FontUpdateTracker是一个静态类,维护了一个静态字典:

static Dictionary<Font, HashSet<Text>> m_Tracked = new Dictionary<Font, HashSet<Text>>();

TrackText方法

如果将要加入的Text.font已经在m_Tracked,不做处理。如果不在m_Tracked中,并且m_Tracked.Count为0,监听事件Font.textureRebuilt,并增加RebuildForFont回调。然后把Text添加到m_Tracked中。

UntrackText方法

如果将要移除的Text.font已经在m_Tracked,从m_Tracked移除。当HashSet<Text>.Count为0时,从事件Font.textureRebuilt中移除RebuildForFont回调。

RebuildForFont方法

根据传入的Font在m_Tracked中找到HashSet<Text>,如果不为空,遍历HashSet<Text>,调用text.FontTextureChanged(),来生成顶点等数据。

 

FontData类

是一个字体配置类,继承了ISerializationCallbackReceiver接口,这个接口需要实现OnBeforeSerialize和OnAfterDeserialize两个方法,它们分别会在序列化之前和反序列化之后调用。FontData的OnAfterDeserialize里便在反序列化之后,限定m_FontSize在0到300之间,限定m_MinSize在0和m_FontSize之间,限定m_MaxSize在m_FontSize和300之间。

 

TextGenerator类

用于渲染文本的类,缓存顶点,字符信息,行信息。

GetCharactersArray 返回当前的UICharInfo[]

GetLinesArray 返回当前的UILineInfo[]

GetVerticesArray 返回当前的UIVertex[]

PopulateWithErrors 为给定设置的字符串,生成顶点和其他数据

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值