赞
踩
最近想要实现游戏中对话文本框根据字数实时调整大小的功能,在网上没找到合适的教程,故自己简单地实现了一下,在这里分享一下自己的思路。
创建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; } }
将脚本挂在对象上,拖入面板和文本框。根据实际情况调整参数。
希望以上内容能给你带来帮助
编程小白一枚,欢迎找我一起交流学习。B站ID:MungRed
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。