也是玩上 unity 了家人们。
记录一下与 ui 界面斗智斗勇的半个月。
TextMeshPro
textMeshProUGUI.preferredHeight
获取文本长度,便于修改滚动条长度或文本物体长度。
TextMeshPro 中的使用的文本 asset 可以在导入字体 font 文件之后右键 -> create -> TextMeshPro -> font asset -> SDF 这样创造可以被 text 使用的 font asset
在 TextMeshPro 的 text 中加入文本可以使用以下代码。
textMeshProUGUI.text = textMeshProUGUI.text + str + '\n' + '\n';
Scroll Rect
一个滚动条组件,在 content 中填入子对象就可以让子对象进行滚动。
一般来说,还要再在添加了 scroll rect 组件的对象上再添加一个 rect mask2D 这样就能让滚动的对象只显示一部分。
滚动条的位置由一个小数表示,这个小数记录了滚动条滚动到的位置在整个滚动条中的比例,如 sr.verticalNormalizedPosition = 0;
rectTransform.sizeDelta
是 scroll rect 的大小,是一个 \(vector2\) 类型,一个将 sr 长度调整为 text 长度的标准代码如下。
tmp = textMeshProUGUI.preferredHeight + 10f;
rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, tmp);
文件读取
想要读取一个文件,就需要这个文件的相对地址,可以参考以下代码,“文件”文件夹就在 Asset 文件夹中。
public string FPath = "文本";
public string fullPath;
public void Read()
{
string filePath = num.ToString() + ".txt";
fullPath = Path.Combine(Application.dataPath, Path.Combine(FPath, filePath));
}
接着是读取文件,使用 File.ReadAllText
函数,\(csharp\) 对于逐字符阅读并不友好,所以最好直接读入大字符串再用 Split
函数切割。
这个函数的括号中填入切割指示符,在文本末尾不要加入指示符,否则会单独切割出一个换行符。
if (File.Exists(fullPath))
{
Debug.Log(num.ToString());
string TMP = File.ReadAllText(fullPath);
text = TMP.Split('>');
}
菜单
下面给出一个切换菜单的样例。
public void SwitchTo(GameObject _menu)
{
for(int i = 0; i < transform.childCount; i++)
transform.GetChild(i).gameObject.SetActive(false);
if(_menu != null)
{
//Time.timeScale = 0f;
_menu.gameObject.SetActive(true);
UIManager.instance.isInCanvas = true;
}
}
Trivia
所有的 GetComponent
操作一定要在 Awake
中完成,并且在 inspector 中完成所有赋值。
不然很容易导致 Object reference not set to an instance of an object
的报错。