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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

884閲覧

プレハブ化したinputFieldオブジェクトをボタンをクリックした時に生成されるようにしたい。

j.f15

総合スコア23

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2020/07/21 06:26

編集2020/07/21 06:36

前提・実現したいこと

プレハブ化したinputFieldオブジェクトをボタンをクリックした時に生成されるようにしたい。

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

NullReferenceException: Object reference not set to an instance of an object DateInput.Start () (at Assets/Scripts/DateInput.cs:18)

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using System.IO; 4using UnityEngine; 5using UnityEngine.SceneManagement; 6using UnityEngine.UI; 7 8public class DateInput : MonoBehaviour 9{ 10 public InputField inputField; 11 string filePath; 12 //入力された日付の変数を保持する 13 public static string dateInput; 14 15 16 void Start() 17 { 18 inputField = GameObject.Find("DateInput").GetComponent<InputField>(); 19 } 20 21 void Update() 22 { 23 24 } 25 26 public static string GetDate() 27 { 28 return dateInput; 29 } 30 31 public void EndMethod() 32 { 33 //InputFieldからテキスト情報を取得する 34 dateInput = inputField.text; 35 Debug.Log($"{dateInput} 確認1"); 36 37 //入力した日付のデータがあるか参照 38 filePath = Application.temporaryCachePath + $"/{dateInput}_savedata.json"; 39 40 if (File.Exists(filePath)) 41 { 42 FadeManager.FadeOut(1); 43 } 44 else 45 { 46 Debug.Log("その日のデータは存在しません"); 47 } 48 Destroy(gameObject); 49 } 50 51} 52

試したこと

よく見かけるNullReferenceエラーで何かの値が無いということはわかるので
inputFieldにコンポーネントが追加されているかや、
ボタンのInspecterビューでinputFieldプレハブが入っているかなど確認を行いました。

Startメソッドでエラーが出ていますがオブジェクトが生成されてから実行するはずなので"DateInput"が
無いということはないと考えているのですがここがエラー原因なのでしょうか?

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

最初からエディター上に設置しておくとエラーは出ませんが、ボタンをクリックしてプレハブを生成しようとすると
上記のエラーが発生します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Startメソッドでエラーが出ていますがオブジェクトが生成されてから実行するはずなので"DateInput"が

無いということはないと考えている

DateInput というプレハブをスクリプトから Instatiate したら "DateInput (Clone)" という名前になります。

投稿2020/07/21 06:44

bboydaisuke

総合スコア5308

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

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

j.f15

2020/07/21 06:53 編集

返信ありがとうございます。 本当でした。わざと先にシーン上に生成されるプレハブを設置してからボタンクリックしてみたら追加されるオブジェクトの名前は(Clone)付きでした。 こんな初歩の事で教えていただき申し訳ないです。それと本当にありがとうございました。 このようなミスが無いように名前で検索するよりはタグ検索の方が良さそうですね。
bboydaisuke

2020/07/21 06:54

名前で検索するのは「どうしてもそうしなければならない時、最後に取る手段」ですね。
j.f15

2020/07/21 06:58

オブジェクト検索の方法について調べましたが名前検索はあまり勧められてはいませんでしたね。 度々ありがとうございます。
bboydaisuke

2020/07/21 07:01

超大作を作るのでもない限り「パフォーマンス」は気にしなくてもよいと思いますが、名前は「変えることができる」し、今回のように Unity によって勝手に変えられてしまったり、タイプミスで検索に引っかからなくても気づかないので他の方法を使える・知っているならそっちを使った方がよいですね。
j.f15

2020/07/21 07:05

なるほど、確かに名前を変更したらソースコード側も変更する必要があり、エラーの原因になってしまいますね。コーディング時にそこまで考えきれていないのでとても勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問