需求就是评论框的大小要随文字的内容的增大而变大
在UGUI里Text并不能智能的判断text长宽够不够盛放文字内容。由于公司只有我一个开发 unity 的所以无人交流在网上我也没发现有什么组件和插件可以满足这个需求,所以只有自己写。
因为需求里设定的评论区宽度是固定的,所以我直接将Text宽度固定(而且我也没想到Text宽度如何随着文字的增加,看过雨松的思路是把文字渲染成图,然后提前获取文字长度再改变Text宽度就可以了,我看到他的评论区出现很多 问题 。自己还没试过。希望看到这篇文章的大家与我多多交流
)
下面讲我的方法:
方法核心就是判断输入的文字数是否超过了本行要求字数,如果超过了就将Text的高度增加一倍(其实就是换行效果)
具体看下面 :
首先我在场景里新建了一个text和一个inputfield组件。text用来盛放文字,inputfield用来输入文字,然后将输入的文字传入到text里显示出来。
如下:
然后给text绑定一个脚本textalen。将inputfield里的text绑定到text脚本上用来传递文字。 如下:
textalen源码:
注意:如果你要让text从上而下增加行数是要固定pivot的Y轴的(否则 pivot的Y轴 默认0.5,会导致自中间向上下同时增加行数):
最后运行输入文字看效果:
在UGUI里Text并不能智能的判断text长宽够不够盛放文字内容。由于公司只有我一个开发 unity 的所以无人交流在网上我也没发现有什么组件和插件可以满足这个需求,所以只有自己写。
因为需求里设定的评论区宽度是固定的,所以我直接将Text宽度固定(而且我也没想到Text宽度如何随着文字的增加,看过雨松的思路是把文字渲染成图,然后提前获取文字长度再改变Text宽度就可以了,我看到他的评论区出现很多 问题 。自己还没试过。希望看到这篇文章的大家与我多多交流
![](http://www.manew.com/static/image/smiley/coolmonkey/07.gif)
下面讲我的方法:
方法核心就是判断输入的文字数是否超过了本行要求字数,如果超过了就将Text的高度增加一倍(其实就是换行效果)
具体看下面 :
首先我在场景里新建了一个text和一个inputfield组件。text用来盛放文字,inputfield用来输入文字,然后将输入的文字传入到text里显示出来。
如下:
![](http://img.manew.com/data/attachment/forum/201610/20/165350v0y1jh40vacemhry.png.thumb.jpg)
然后给text绑定一个脚本textalen。将inputfield里的text绑定到text脚本上用来传递文字。 如下:
![](http://img.manew.com/data/attachment/forum/201610/20/165735z33anc6zvfy1my6k.png.thumb.jpg)
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,会导致自中间向上下同时增加行数):
![](http://img.manew.com/data/attachment/forum/201610/20/171132ku5nuxfu0t2u83n8.png.thumb.jpg)
最后运行输入文字看效果:
![](http://img.manew.com/data/attachment/forum/201610/20/170705qwm05wdeg96mtuhd.png.thumb.jpg)