当前位置:   article > 正文

游戏开发unity UGUI知识系列:计算单行文本的宽度_unity getgenerationsettings

unity getgenerationsettings

在Text使用了ContentSizeFitter情况下,对text设置新的字符串后,如果我们想要在当前帧获取宽度时,通过RectTransform.sizeDelta.x获取的宽度经常是旧字符串时的长度。所以需要自行计算改变文本后text的宽度

 

下述代码参考:

  1. public class TextContent : MonoBehaviour
  2. {
  3. public Text TxtCalcWidth;
  4. private void FailGetTextWidthInCurFrame(Text text)
  5. {
  6. RectTransform rt = text.rectTransform;
  7. float width = rt.sizeDelta.x;
  8. Debug.Log("width = " + width.ToString());
  9. }
  10. private IEnumerator GetTextWidthInNextFrame(Text text)
  11. {
  12. yield return null;
  13. RectTransform rt = text.rectTransform;
  14. float width = rt.sizeDelta.x;
  15. Debug.Log("width = " + width.ToString());
  16. }
  17. private void CalcTextWidth(Text text)
  18. {
  19. TextGenerator tg = text.cachedTextGeneratorForLayout;
  20. TextGenerationSettings setting = text.GetGenerationSettings(Vector2.zero);
  21. float width = tg.GetPreferredWidth(text.text, setting) / text.pixelsPerUnit;
  22. Debug.Log("width = " + width.ToString());
  23. }
  24. public void OnBtnCalcWidthClick()
  25. {
  26. string text = "dsfasfs";
  27. TxtCalcWidth.text = text;
  28. //CalcTextWidth(TxtCalcWidth);
  29. //StartCoroutine(GetTextWidthInNextFrame(TxtCalcWidth));
  30. FailGetTextWidthInCurFrame(TxtCalcWidth);
  31. }
  32. }

有两种方式获取文本宽度:

    CalcTextWidth为在当前帧计算新文本的宽度

    GetTextWidthInNextFrame为下一帧获取文本的宽度(因为使用了layout,sizeDelta的值在一帧中的代码逻辑执行完后才会改变,所以可以在下一帧去获取sizeDelta当做新文本的宽度)

经检验,两个方法获取的文本宽度是一样的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/110375
推荐阅读
相关标签
  

闽ICP备14008679号