UGUI如何让Text框大小随文字增加而变化

需求就是评论框的大小要随文字的内容的增大而变大

在UGUI里Text并不能智能的判断text长宽够不够盛放文字内容。由于公司只有我一个开发 unity 的所以无人交流在网上我也没发现有什么组件和插件可以满足这个需求,所以只有自己写。
因为需求里设定的评论区宽度是固定的,所以我直接将Text宽度固定(而且我也没想到Text宽度如何随着文字的增加,看过雨松的思路是把文字渲染成图,然后提前获取文字长度再改变Text宽度就可以了,我看到他的评论区出现很多 问题 。自己还没试过。希望看到这篇文章的大家与我多多交流

下面讲我的方法:
方法核心就是判断输入的文字数是否超过了本行要求字数,如果超过了就将Text的高度增加一倍(其实就是换行效果)
具体看下面
首先我在场景里新建了一个text和一个inputfield组件。text用来盛放文字,inputfield用来输入文字,然后将输入的文字传入到text里显示出来。
如下:
 


然后给text绑定一个脚本textalen。将inputfield里的text绑定到text脚本上用来传递文字。 如下:
 


textalen源码:
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class textalen : MonoBehaviour {
     private Text Textshow; //用来显示的TEXT
     string Content_Text; //文字内容
     public GameObject  go; //传入文字的物体
     int Rowindex = 1; //第几行
     private int wordNumber=13; //每行显示字数
         // Use this for initialization
         void Start () {
 
         Textshow = this .GetComponent<Text>();
         Textshow.GetComponent<RectTransform>().sizeDelta = new Vector2(390f, 40 * Rowindex);
     }
         
         // Update is called once per frame
         void Update () {
         Content_Text = go.GetComponent<Text>().text; //获取文字内容
        
         Textshow.text = "<size=30>" + Content_Text + "</size>" ; //设定文字大小
 
         if (Content_Text.Length > wordNumber* Rowindex) //当文字的长度大于每行text限定的字数
         {
             Rowindex = Content_Text.Length / wordNumber; //判断文字需要几行
             Debug.Log( "多少行????" +Rowindex);
             Textshow.GetComponent<RectTransform>().sizeDelta= new Vector2(390f, 40 * Rowindex) ; //将Text的高度变成文字需求的高度
         }
     }
}



注意:如果你要让text从上而下增加行数是要固定pivot的Y轴的(否则 pivot的Y轴 默认0.5,会导致自中间向上下同时增加行数):
 


最后运行输入文字看效果:
 
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值