项目要做一个系统公告,因为太菜花了将近一天才写出来,场景这样
就简单的几行
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class WB : MonoBehaviour
{
Vector3 start, end;
// text预设体
public GameObject textPrefab;
// 文本宽度
float textSizeX;
//动态创建的文本物体
GameObject textPref;
public Transform selectTransform, targetTransform;
List<string> messageText = new List<string>();
void Start()
{
// 记录初始位置
start =selectTransform.transform.position;
textPref = Instantiate(textPrefab, selectTransform.transform);
//messageText.Add("dawd 253");
messageText.Add("123456dadf");
messageText.Add("wwrwfagawawea");
messageText.Add("大玩过V型看过你");
textPref.GetComponent<TextPro>().AddText("dawd 253");
}
void Update()
{
// 获取运行之后的文本宽度
textSizeX = textPref.GetComponent<RectTransform>().sizeDelta.x;
end = new Vector3(targetTransform.transform.position.x - textSizeX, targetTransform.transform.position.y, targetTransform.transform.position.z);
transform.position = Vector3.MoveTowards(selectTransform.transform.position, end, Time.deltaTime*100);
// 禁用
if (Vector3.Distance(selectTransform.transform.position, end) <1f)
{
textPref.SetActive(false);
if (!textPref.activeInHierarchy)
{
selectTransform.transform.position = start;
addText(num);
if (num == messageText.Count)
{
num = 0;
}
num++;
}
}
}
string str;
int num=1;
void addText(int num)
{
textPref.SetActive(true);
for (int i = 0; i < num; i++)
{
str= messageText[i];
}
textPref.GetComponent<TextPro>().AddText(str);
}
}
获取文本长度(这个也可以不加)
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextPro : MonoBehaviour
{
Text Textshow;
//文字内容
string Content_Text;
//文本长度
int textLength;
//文本
//public GameObject go;
//第几行
int Rowindex = 1;
void Start()
{
Textshow = this.GetComponent<Text>();
//Textshow.GetComponent<RectTransform>().sizeDelta = new Vector2(200 * Rowindex,53f );
//AddText("1");
//获取文字内容
Content_Text = gameObject.GetComponent<Text>().text;
//文本真实字节长度
textLength = System.Text.Encoding.Default.GetBytes(Content_Text).Length;
//显示文字内容
Textshow.text =Content_Text;
}
public void AddText(string str)
{
Debug.Log(str);
gameObject.GetComponent<Text>().text = str;
}
void Update()
{
//当文字的长度大于每行text限定的字数
if (textLength > 10)
{
//判断文字需要几行
Rowindex = textLength / 5;
//将Text的宽度变成文字需求的宽度
Textshow.GetComponent<RectTransform>().sizeDelta = new Vector2(100* Rowindex,53f);
}
}
}
上面那个代码懒得加的话直接改一下这个,反正效果就是让文本框自适应
将HorizonalOverflow改成overflow