質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1755閲覧

UnityのC#スクリプトにおけるInputFieldのインスタンス生成とそのテキストの取得について

pomepome

総合スコア1

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/10/15 09:20

前提・実現したいこと

Unityでアプリ開発をしています。InputFieldとプレハブを使って入力フォームをつくり、そこに入力されたデータをstatic変数に保存しようとしているのですが、インスタンスとして作成されたInputFieldのテキストを抽出する過程がどうもうまくいきません。

発生している問題・エラーメッセージ

関数を実行するとNull referenceのエラーが出てしまいます。

Object reference not set to an instance of an object TestForInstance.MakeNewInputfield () (at Assets/Test/TestForInstance.cs:31)

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class TestForInstance : MonoBehaviour 7{ 8 9 public InputField inputFieldPrefab; 10 public InputField inputFieldTest; 11 public Text textOfInputFieldTest; 12 public GameObject panel; 13 public static int n = 0; 14 public static string strOfPlayerNameForTest; 15 16 17 public void MakeNewInputfield(){ 18 19 InputField[] inputFieldTest = new InputField[5]; 20 Text[] textOfInputFieldTest = new Text[5]; 21 string[] strOfPlayerNameForTest = new string[5]; 22 23 for (int i = 0; i < inputFieldTest.Length; i++){ 24 25 if(i < n) continue; 26 27 inputFieldTest[i] = Instantiate(inputFieldPrefab, new Vector3(0, 370 - (60 * (i + 1)), 0), Quaternion.identity); 28 inputFieldTest[i].transform.SetParent(this.panel.transform,false);//クローンの親を指定 29 inputFieldTest[i] = inputFieldTest[i].GetComponent<InputField>(); 30 textOfInputFieldTest[i] = inputFieldTest[i].GetComponent<Text>();//ここから下でエラーが起きる 31 textOfInputFieldTest[i] = textOfInputFieldTest[i].GetComponent<Text>(); 32 textOfInputFieldTest[i].text = inputFieldTest[i].text; 33 strOfPlayerNameForTest[i] = textOfInputFieldTest[i].text;//ここまで 34 35 n += 1; 36 37 if (i < n) break; 38 } 39 } 40 41} 42

試したこと

.textやGetComponent<Text>などの違いが分かっていないためだと思い、そこら辺を色々変えてみましたがうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

憶測ですがinputFieldTest[i].GetComponent<Text>();でnullが返されているのだと思います。
TextはInputFieldのゲームオブジェクトではなく、その子オブジェクトにアタッチされているので、このコードでは取得できないはずです。

InputFieldにもtextが存在するので、そちらを使ったほうがいいかもしれません。

投稿2020/10/15 09:43

fiveHundred

総合スコア9774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問