Unity UI制作心得记录

也是玩上 unity 了家人们。
记录一下与 ui 界面斗智斗勇的半个月。

TextMeshPro

textMeshProUGUI.preferredHeight 获取文本长度,便于修改滚动条长度或文本物体长度。
TextMeshPro 中的使用的文本 asset 可以在导入字体 font.ttf 文件之后右键 -> 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;
    }
}

自动排列和自动缩放

可用组件:
· grid layout group 适合于制作物品栏,但无法实现自动拉伸。
· vertical layout group / horizontal layout group 适合制作文本框,可实现所有子元素的自动拉伸。
· content size fitter 可根据子元素长宽自动拉伸带有组件的 ui ,非常方便,此外该组件可以实现根据 textmeshpro.text 文本长度自动调整 ui 长度。
· layout element 可以实现脱离 layout 组件的自动排列。

Trivia

所有的 GetComponent 操作一定要在 Awake 中完成,并且在 inspector 中完成所有赋值。
不然很容易导致 Object reference not set to an instance of an object 的报错。

posted @ 2024-09-20 23:15  蒟蒻丁  阅读(5)  评论(0编辑  收藏  举报