NGUI中计算UILabel中每个文字的具体位置

本文介绍了在使用NGUI时,如何针对UILabel中的特定文字实现交互效果,如点击触发事件。通过NGUIText提供的CalculatePrintedSize和PrintExactCharacterPositions方法,可以计算文字的相对位置。通常,需要将碰撞框作为Label的子对象,并根据计算出的文字中心位置进行设置。此外,更新字符位置的verts和indices列表可用于获取每个文字的显示大小。
摘要由CSDN通过智能技术生成

在游戏中有时候会碰到这样的需求,在Label中显示的文字中,部分文字需要有交互效果,比如点击地图位置文字可以自动寻路,点击聊天信息中的道具名称可以显示道具详情之类的。
解决这类问题,要么是将相应的文字做成button覆盖在文字上方,或者直接在对应的文字位置设置碰撞框,添加点击事件。不管如何都需要计算出label中一些特定文字的相对位置,才可以将碰撞框(或者表情之类的图片)放到正确的位置。
NGUI本身带有计算位置和显示文字大小的方法,NGUIText.CalculatePrintedSize和NGUIText.PrintExactCharacterPositions,这里需要将这些方法改编一下

    //计算单个文字的准确位置
    //参数1是显示字符串的UI控件,参数2是要显示的所有文字,参数3是要计算位置的文字的index
    public static Vector2 CalculateSinglePosition(UILabel label, string text, int index)
    {
        BetterList<Vector3> verts = new BetterList<Vector3>();
        BetterList<int> indices = new BetterList<int>();
        UpdateCharacterPosition(label, text, out verts, out indices);
        index = indices.IndexOf(index);
        Vector3 p1;
        if (index != -1 && verts.size > index * 2 + 1)
        {
            p1 = (verts[index * 2] + verts[index * 2 + 1]) * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值