Unity3D 基于UGUI的图文混排组件

本文介绍如何在Unity3D的UGUI中实现图文混排功能。作者通过继承Text组件,解析文本中的表情ID,利用正则匹配和替换,隐藏表情字符并用图片替代,解决表情与文字混排问题。在OnPopulateMesh函数中处理表情字符的顶点,避免死循环。同时,使用一个m_isEmojiDirty变量控制更新,确保效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因:在使用UGUI的时候,在网上找了好久也没找到合适的图文混排组件,但是有看到一篇文章给了我思路。甩个链接:点击打开链接


思路:是通过继承Text组件,然后在Mesh生成的函数里做手脚。但是那篇文章好像有些bug,而且UGUI的代码也是开源的,所以就自己动手了。就是把文本解析之后,把表情所在位置的文本的mesh给隐藏,最后在相应的位置放入我们的图片表情。


开始:新建一个类继承于Text,我命名为ImageText

首先是解析文本,这个很简单,用#表情id#这样的字符串来代表相应的表情图片,然后再用正则匹配出来。如下:

private static readonly Regex m_emojiTagRegex = new Regex(@"#(\d+)#", RegexOptions.Singleline); 

接下来就是在重写的OnPopulateMesh函数里用正则提取字符,记录对应的下标,把表情字符替换为中文的“一”字,因为中文字是固定宽度,适合用来放固定宽度的表情图片。

然后调用父类的OnPopulateMesh函数生成相应的mesh,把表情所在字符mesh的顶点uv设置为0,这样就让上面被替换后的“一”字消失了。代码如下:

public s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值