一个可以自定义规则的 超链接 文本解决方案。
GitHub 上的工程多如繁星,有些好的仓库,但凡不经意间错过了就很难找回,故稍作采撷,希望能帮助到有心人。
本文集以一个小的功能点为单位行文,也便于拾取罢!
简介:
笔者今天推荐的仓库叫 uGUI-Hypertext - UGUI超链接文本组件。
有了它可以在UnityEngine.UI.Text中使任何子字符串可单击
功能:
使用正则在 Text.text 中插入任意数量的任意断言,实现对匹配的子字符串交互的效果,也就是基于正则的 Text 超链接啦
使用:
继承自HypertextBase的类,使用如下签名的 OnClick 方法注册匹配到子字符串的回调。
/// <summary>
/// 指定した部分文字列にクリックイベントを登録します
/// </summary>
/// <param name="startIndex">子字符串起始位置</param>
/// <param name="length">子字符串长度</param>
/// <param name="color">子字符串配色</param>
/// <param name="onClick">部分文字列がクリックされたときのコールバック</param>
protected void OnClick(int startIndex, int length, Color color, Action<string> onClick)
然后,在另一个对该 HypertText 感兴趣的脚本中使用如下方法注册事件即可:
public class RegexExample : MonoBehaviour
{
[SerializeField] RegexHypertext text = default(RegexHypertext);
const string RegexUrl = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
const string RegexHashtag = "[##][A-Za-zA-Za-z一-鿆0-90-9ぁ-ヶヲ-゚ー]+";
void Start()
{
text.OnClick(RegexUrl, Color.cyan, url => Debug.Log(url));
text.OnClick(RegexHashtag, Color.green, hashtag => Debug.Log(hashtag));
}
}
这样一来,字符串中存在了匹配的子字符串,当这些子字符串被点击后,就会执行 Start 方法中注册的回调啦,在示例中是输出匹配的字符串,
演示:
链接:
setchi/uGUI-Hypertext: Hypertext for uGUI
结语:
在很多时候都会用到这个功能,比如在教育软件中常见的单词翻译功能,把需要翻译的单词高亮,然后点击就去翻译。当然还有其他妙用啦,反正就像是嵌入在文本中的按键,想搞啥事情还不是你的脑洞说了算~
扩展阅读:
本文集持续更新ing,喜欢记得点赞关注哦!