TextInlineSprite icon indicating copy to clipboard operation
TextInlineSprite copied to clipboard

unity2019支持问题

Open uncleciba opened this issue 5 years ago • 8 comments

以前在unity2018上用的很好,2019出现严重问题: 2019的unity中,OnPopulateMesh(VertexHelper toFill)方法的toFill内容发生变化。

2018中,toFill里vertex的个数是原始字符串的4倍,例如,原始字符串是123,vertex就有104个。 2019中,vertex只有44个,也就是“翻译”后实际的顶点个数 而目前quad位置的对应算法是:tempIndex = _textBuilder.Length * 4; 是按原始字符串长度算了。 这导致后续的顶点处理都出现了错误。

uncleciba avatar Jan 09 '20 12:01 uncleciba

是2019以上的所有版本都有这个问题么

coding2233 avatar Jan 10 '20 01:01 coding2233

我用的2019.1.9。应该是2019.1后都有,之前我用的2018版本,是好的。

昨天晚上,我自己琢磨了一下,已经侧面修复了这个问题。

我用的你的项目,用的很早。之前有一些bug(比如spriteGraphic是统一绘制,导致ui排序不对) 所以我做了一些调整,改动有点大,感觉合回你的主线有困难,所以没做push request…

我现在把解决问题的代码发你参考,不一定是最佳方案,但是我这边解决问题了。 原理就是剔除richText的标签。

                var sub = inputText.Substring(textIndex, match.Index - textIndex);
                var tranSub = _RemoveRichTag(sub);
                _textTransferBuilder.Append(tranSub);
                _textBuilder.Append(sub);

#if UNITY_2019_1_OR_NEWER int tempIndex = _textTransferBuilder.Length * 4; #else int tempIndex = _textBuilder.Length * 4; #endif _textBuilder.Append( @"<quad size=" + tempGroup.Size + " width=" + tempGroup.Width + " y=16 " + // 这里先硬编码,目前都是32号字,差不多这个值,以后再说 " />"); _textTransferBuilder.Append("#");

我的工程里目前用的非常好,非常感谢。 对于不能合并回的主线,我表示万分抱歉

代码作为附件,在邮件里发送了

uncleciba avatar Jan 10 '20 01:01 uncleciba

嗯嗯, 我会尽快看看的 。

coding2233 avatar Jan 10 '20 05:01 coding2233

2019 那个Scene Chat Demo 默认语句发出去 显示就是错了, 就是这句

Click Send Button Send Message,[#emoji_7]&&[1#run]。

fzlcxy avatar Jun 15 '20 03:06 fzlcxy

@fzlcxy 我先修复看看

coding2233 avatar Jun 16 '20 04:06 coding2233

准确的说,2019中也可能出现顶点数是字符4倍的情况,当Text组件有overflow存在时,我们项目现在的做法是在富文本开头加上一对标签然后在 OnPopulateMesh 中进行判断 如果 最前面4个定点的位置全部相同则判断为 Unity没有去除富文本标签的定点信息

        toFill.PopulateUIVertex(ref verts[0], 0);
        toFill.PopulateUIVertex(ref verts[1], 1);
        toFill.PopulateUIVertex(ref verts[2], 2);
        toFill.PopulateUIVertex(ref verts[3], 3);

        if(verts[0].position == verts[1].position  && verts[2].position == verts[3].position && verts[0].position == verts[3].position) {
            removeUnityTag = false;
        }

mount33 avatar Dec 18 '20 09:12 mount33

在富文本开头加上一对标签? 是人为额外加上吗 如果需要额外添加,有点破坏使用体验^_^

uncleciba avatar Dec 19 '20 00:12 uncleciba

在富文本开头加上一对标签? 是人为额外加上吗 如果需要额外添加,有点破坏使用体验^_^

代码加呀,对策划是无感的~

mount33 avatar Dec 21 '20 02:12 mount33