teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/06/30 13:11

投稿

退会済みユーザー
answer CHANGED
@@ -1,2 +1,72 @@
1
1
  InputFieldは、常に入力カーソル(文字を入力するときに出てくる縦棒のこと)が表示されるように動きますので、縦幅が狭い(2行を表示できない)と、2行目に移ったときに1行目が表示されなくなります。
2
- InputFieldのRect TransformでHeightの値を大きくすればよいのではないでしょうか。
2
+ InputFieldのRect TransformでHeightの値を大きくすればよいのではないでしょうか。
3
+
4
+ <追記>
5
+
6
+ https://kan-kikuchi.hatenablog.com/entry/Text_Preferred
7
+
8
+ こちらで紹介されている「text.preferredHeight」を使えば出来そうだと思います。
9
+ これを使うとテキストを全て表示するために必要な高さ(Widthもあります)を出してくれます。
10
+ かなり力技ですが、処理が重くならない場所ならあまり気にならないと思います。
11
+ が、滅茶苦茶なので、こんな方法もあるんだ、程度にお願いします。
12
+ ※私は、途中に書いている、InputFieldだと必要な縦幅がちゃんと計測できない理由もわかっておりません。
13
+
14
+ ```InputFieldManager
15
+ using UnityEngine;
16
+ using UnityEngine.UI;
17
+
18
+ public class InputFieldManager : MonoBehaviour
19
+ {
20
+ //テキストの高さの補正値(任意)
21
+ [SerializeField] private float TextHeightCorrection;
22
+
23
+ //InputFieldを格納するための変数など
24
+ InputField inputField;
25
+ RectTransform inputRect;
26
+ Text text;
27
+
28
+ // Start is called before the first frame update
29
+ void Start()
30
+ {
31
+ //InputFieldコンポーネントを取得
32
+ inputField = GameObject.Find("InputField").GetComponent<InputField>();
33
+ inputRect = inputField.GetComponent<RectTransform>();
34
+
35
+ //InputFieldのテキストを取得
36
+ text = inputField.textComponent;
37
+ }
38
+
39
+ //入力された名前情報を読み取ってコンソールに出力する関数
40
+ public void GetInputName()
41
+ {
42
+ //InputFieldからテキスト情報を取得する
43
+ string name = inputField.text;
44
+ Debug.Log(name);
45
+
46
+ //入力フォームのテキストを空にする
47
+ inputField.text = "";
48
+ inputField.ActivateInputField();
49
+ }
50
+
51
+ //InputFieldコンポーネントの「On Value Changed」に設定
52
+ public void OnEditInputField()
53
+ {
54
+ //一旦、必要サイズ計測の為に大きくする
55
+ //InputFieldのサイズが小さいと必要な縦幅がちゃんと出されないみたいです
56
+ inputRect.sizeDelta = new Vector2(inputRect.sizeDelta.x, 1000);
57
+
58
+ //1行以下の場合(30は初期値)
59
+ if (text.preferredHeight < 30)
60
+ {
61
+ inputRect.sizeDelta = new Vector2(inputRect.sizeDelta.x, 30f);
62
+ }
63
+ //2行以上の場合
64
+ else
65
+ {
66
+ inputRect.sizeDelta = new Vector2(inputRect.sizeDelta.x, text.preferredHeight + TextHeightCorrection);
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ 一応これで動きました。