Unity 给InputField添加滚动条

1.为了能让InputField弄个滚动条真的是翻遍了百度,最后还是在自己的努力下完成了这一壮举。

首先在场景中添加一个ScrollRect(滚动视图),以下是我的设置,可以根据自己的喜好设置,建议将惯性关掉。

Unity 给InputField添加滚动条_第1张图片Unity 给InputField添加滚动条_第2张图片

2.在滚动视图的Content对象添加输入框InputField

Unity 给InputField添加滚动条_第3张图片

3.将InputField的直线类型设置成多行新行

Unity 给InputField添加滚动条_第4张图片Unity 给InputField添加滚动条_第5张图片

4.最后开始编写一个脚本来适应内容。Unity中自带有自适应的组件但是无法正常使用。

添加一个脚本:InputContentSize.cs

Text组件赋值InputField下的Text

public class InputContentSize: MonoBehaviour
{

    //文本区
    public Text text;
    //输入框
    public InputField input;
    //内容区
    public RectTransform contents;

    private void FixedUpdate()
    {
        //得到内容的大小
        Vector2 size = contents.sizeDelta;
        //获取行数,不要使用Text组件来分割,不知道什么原因无法完整分割。
        string[] texts = input.text.Split('\n');
        //下面是设置宽度的,因为每段文字都有自己的长度,这里我们取最长的文字长度
        //先将长度保存到数组中
        List ints = new List();
        foreach (var v in texts)
        {
            ints.Add(v.Length);
        }
        //GetMax是取得最大的数,本函数来自于网络
        int maxw = GetMax(ints.ToArray());
        //设置宽度:文字长度乘以文字大小,保留一些空白内容所以要在乘以2,也可以根据自己的要求加上一写像素
        size.x = maxw * text.fontSize*2;
        //设置高度:文字行数乘以文字大小,同样保留空白区
        size.y = texts.Length * text.fontSize*2;
        //以下是防止内容变小
        //判断当前宽度是否小于原宽度,如果小于的话则不设置
        if (size.x < 1545.2f)
            size.x = 1545.2f;
        //判断当前高度是否小于原高度,如果小于的话则不设置
        if (size.y < 714.42f)
            size.y = 714.42f;
        //赋值
            contents.sizeDelta = new Vector2(size.x, size.y);
    }
    /// 
    /// 数组中最大的值
    /// 
    /// 
    /// 
    private static int GetMax(int[] array)
    {
        int max = 0;
        for (int i = 0; i < array.Length; i++)
        {
            max = max > array[i] ? max : array[i];

        }
        return max;
    }
}

 

效果图Unity 给InputField添加滚动条_第6张图片

你可能感兴趣的:(Unity3d,C#编程)