[Unity]聊天使用TextMeshPro

        项目已经在大厂正式上线半个月了,忙碌了大半年的时间啊。时间实在是太赶了,上线的那几天,一堆问题,通宵达旦的修复问题,几乎没这么睡过,想想都心累呀!

*************************************************分割线***********************************************************

        之前有说过,聊天界面是之前留下来的锅,卡顿问题已经解决,图片长度也可以处理。但在大厂的一个月测试的时候发现,聊天有很多问题,很严重:乱码问题,表情偏移等问题。发现这应该是占位符问题导致,而且是偶现,切换后台啥的又突然好了,应该是底层渲染的时候计算有问题导致。不清楚是不是LinkImageText这个脚本被修改太多导致的。

        为了快速解决这些问题,就用之前使用过的TextMeshPro,看了下替换情况,发现从LinkImageText替换为TextMeshPro,需要的时间不是很多,1个下午就替换完毕,之前聊天是一个Text,所以替换很快。但是为了性能考虑,再次优化,使用了另一个插件SuperScrollView。

        SuperScrollView需要根据UI的高度值和宽度值来计算的,但是TextMeshPro有个bug就是不会修改RectTransform的值,只好每次修改文本内容的时候,强制调用ForceMeshUpdate()来获取渲染的高度值和宽度值。顺带修改下SuperScrollView的获取高度值和宽度值的接口,将RectTransform.rect.height和RectTransform.rect.width修改成如下接口:

        private TMP_Text m_tmpText;
        private bool m_bIsFind = false;
        private bool GetBIsTMPText()
        {
            bool bIsTmpText = false;
            if (!m_bIsFind)
            {
                m_tmpText = gameObject.GetComponent<TMP_Text>(); 
                 m_bIsFind = true;
            }
            bIsTmpText = m_tmpText != null;

            return bIsTmpText;
        }

        public float GetHeight()
        {
            float height = 0.0f;
            bool bIsTmpText = GetBIsTMPText();
            if (bIsTmpText)
            {
                height = m_tmpText.renderedHeight;
                if (CachedRectTransform.rect.height != m_tmpText.renderedHeight)
                    CachedRectTransform.sizeDelta = new Vector2(CachedRectTransform.sizeDelta.x, m_tmpText.renderedHeight);
            }       
            else
                height = CachedRectTransform.rect.height;

            return height;
        }

      
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值