最近想要实现游戏中对话文本框根据字数实时调整大小的功能,在网上没找到合适的教程,故自己简单地实现了一下,在这里分享一下自己的思路。
创建文本框
创建UI画布,设置为根据屏幕大小缩放。
添加一个面板(图中灰色部分),在面板中再添加一个文本框,调整他们的位置和大小。面板的轴心设置为(0,1)。
代码
主要思路为:设定每一行最多字数以及每一行的高度,再根据当前字数对面板的大小进行调整。
需要注意的是,由于英文字符的宽度小于汉字,所以获取字数的时候需要考虑他们比例。
在脚本中添加如下代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TextAutoZoom : MonoBehaviour
{
public Text text;
public GameObject plane;
public int LineMaxNum;//每一行最多字数
public float LineMinWidth;//一行最小长度
public float LineMinHeight;//一行最小高度
public float LineDertaWidth;//每个字增加的长度
public float LineDertaHeight;//每一行增加的高度
public float len;//当前字数
public float zoom;//非汉字的比例
public void Update()
{
len = GetLength(text.text);
if (len <= LineMaxNum)
{
plane.GetComponent<RectTransform>().sizeDelta =
new Vector2(LineMinWidth + LineDertaWidth * len, LineMinHeight);
}
else
{
plane.GetComponent<RectTransform>().sizeDelta =
new Vector2(LineMinWidth+LineDertaWidth*LineMaxNum,LineMinHeight+LineDertaHeight* (int)(len/LineMaxNum));
}
}
//获得字符串的"长度"
public float GetLength(string str)
{
float res = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 127)
{
res += zoom;
}
else
{
res += 1f;
}
}
return res;
}
}
将脚本挂在对象上,拖入面板和文本框。根据实际情况调整参数。
运行游戏进行测试
希望以上内容能给你带来帮助文章来源:https://www.toymoban.com/news/detail-503787.html
编程小白一枚,欢迎找我一起交流学习。B站ID:MungRed文章来源地址https://www.toymoban.com/news/detail-503787.html
到了这里,关于【unity】代码控制文本框根据字数实时调整大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!