1.爲了能讓InputField弄個滾動條真的是翻遍了百度,最後還是在自己的努力下完成了這一壯舉。
首先在場景中添加一個ScrollRect(滾動視圖),以下是我的設置,可以根據自己的喜好設置,建議將慣性關掉。
2.在滾動視圖的Content對象添加輸入框InputField
3.將InputField的直線類型設置成多行新行
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<int> ints = new List<int>();
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);
}
/// <summary>
/// 數組中最大的值
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
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;
}
}
效果圖