Unity InputField宽度自适应内容

在Unity中,InputField在我们输入内容时,只会显示适应初始宽度的最新内容,或者自定义长度内容。

那么,要实现宽度自适应内容就需要另寻他法了。

以下是通过一个控制脚本来实现的一个简单方法。

直接上脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class DynamicInputFieldSize : MonoBehaviour
{
    public TMP_InputField inputField;
    public RectTransform inputFieldRect;
    private float initialWidth;
    private float characterWidth = 20f;

    void Start()
    {
        // 获取输入框的初始宽度
        initialWidth = inputFieldRect.sizeDelta.x;

        // 监听输入框文本变化事件
        inputField.onValueChanged.AddListener(OnInputValueChanged);
    }

    void OnInputValueChanged(string text)
    {
        // 设置输入框文本内容
        inputField.text = text;

        // 获取文本的预期宽度
        TMP_Text textComponent = inputField.textComponent;
        float minWidth = textComponent.GetPreferredValues(text).x + characterWidth; 

        // 判断文本内容是否超过初始宽度
        if (minWidth > initialWidth)
        {
            // 调整输入框的宽度
            inputFieldRect.sizeDelta = new Vector2(minWidth, inputFieldRect.sizeDelta.y);
        }
        else
        {
            // 将输入框宽度恢复为初始宽度
            inputFieldRect.sizeDelta = new Vector2(initialWidth, inputFieldRect.sizeDelta.y);
        }
    }
}

该控制脚本的方法原理很简单,就是通过获取文本长度,然后调整输入框的宽度来实现。

效果:

Unity InputField宽度自适应内容

你可能感兴趣的:(unity,游戏引擎)