前提・実現したいこと
UnityにてInputFieldを用いて鍵番号で開く金庫のイベントを作成しています。現在Nullエラーが解消できずイベントが作成できないため、Nullエラーの解消法を知りたいです。
InputFieldは他のオブジェクトでも使用するので、表示する部分とイベントの内容を別クラスにしています。
発生している問題・エラーメッセージ
表1で表2のNullエラーが発生しています。上記部分が取得できないだけなら取得方法を変えればよいのですが、同じスクリプトの63行目(表3)は取得できていたのでなぜエラーが出ているかわからず質問させていただきました。
表1
c#
1inputFeildController.inputField.onEndEdit.AddListener(data => InputFieldEvent());
表2
NullReferenceException: Object reference not set to an instance of an object UnderSafeEvent.Start () (at Assets/OriginalGame/Scripts/UnderSafeEvent.cs:33)
表3
c#
1var inputText = inputFeildController.inputField.text;
該当のソースコード
関係のありそうなスクリプト全文を下記いたします。
表4
C#
1using System.Collections; 2using System.Collections.Generic; 3using TMPro; 4using UnityEngine; 5using UnityEngine.EventSystems; 6using UnityEngine.UI; 7 8public class UnderSafeEvent : MonoBehaviour 9{ 10 //イベントトリガー 11 private EventTrigger eventTrigger; 12 private EventTrigger.Entry entry1; 13 14 //テキストを管理するスクリプト 15 private TextController[] textControllers; 16 17 //メモ管理用スクリプト 18 private MemoController memoController; 19 20 //InputField管理用のスクリプト 21 private InputFeildController inputFeildController; 22 23 //鍵番号 24 public string keyNum; 25 26 // Start is called before the first frame update 27 void Start() 28 { 29 //InputFieldControllerを取得 30 inputFeildController = gameObject.GetComponent<InputFeildController>(); 31 32 //InputFieldにイベントを登録 33 inputFeildController.inputField.onEndEdit.AddListener(data => InputFieldEvent()); 34 35 //テキスト管理のスクリプトを取得 36 textControllers = gameObject.GetComponents<TextController>(); 37 38 //メモ管理用スクリプトを取得 39 memoController = gameObject.GetComponent<MemoController>(); 40 } 41 42 // Update is called once per frame 43 void Update() 44 { 45 46 } 47 48 public void ChengeEvent() 49 { 50 //現在のイベントを非アクティブにする 51 gameObject.GetComponent<EventTrigger>().enabled = false; 52 53 //別のイベントを追加する 54 eventTrigger = gameObject.AddComponent<EventTrigger>(); 55 entry1 = new EventTrigger.Entry(); 56 entry1.eventID = EventTriggerType.PointerClick; 57 entry1.callback.AddListener(data => memoController.StartEvent()); 58 eventTrigger.triggers.Add(entry1); 59 } 60 61 public void InputFieldEvent() 62 { 63 var inputText = inputFeildController.inputField.text; 64 65 if(inputText == "0000") 66 { 67 Debug.Log("開いたよ"); 68 inputFeildController.RemoveInputField(); 69 textControllers[0].ActiveText(); 70 textControllers[0].UpdateText(); 71 ChengeEvent(); 72 } 73 else 74 { 75 Debug.Log("開かないよ"); 76 inputFeildController.RemoveInputField(); 77 textControllers[1].ActiveText(); 78 textControllers[1].UpdateText(); 79 } 80 } 81}
表5
c#
1using System.Collections; 2using System.Collections.Generic; 3using TMPro; 4using UnityEngine; 5 6public class InputFeildController : MonoBehaviour 7{ 8 //InputField表示用のUI 9 private GameObject inputFieldUI; 10 //パス入力用のInputField 11 public TMP_InputField inputField; 12 13 // Start is called before the first frame update 14 void Start() 15 { 16 //表示用のUIを取得 17 inputFieldUI = GameObject.Find("InputFieldUI").transform.Find("InputField").gameObject; 18 //InputFieldを取得 19 inputField = inputFieldUI.GetComponentInChildren<TMP_InputField>(); 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 26 } 27 28 public void ActiveInputField() 29 { 30 //InputFieldを表示する 31 inputFieldUI.SetActive(true); 32 Time.timeScale = 0; 33 } 34 35 public void RemoveInputField() 36 { 37 //InputFieldを非表示にする 38 inputFieldUI.SetActive(false); 39 Time.timeScale = 1; 40 } 41} 42
試したこと
表1のコードの上に表6と表7を入力して実行したところ表6は取得できていて表7はNullでした。
また、表3の上に表7を入力して実行した場合はコンポーネントを取得できていて、その後の処理も問題なく実行できました。
表5のコンポーネント取得は問題なくされていました。
表6
C#
1Debug.log(inputFeildController);
表7
C#
1Debug.log(inputFeildController.inputField)
補足情報(FW/ツールのバージョンなど)
Unity2018.4.23f1
VisualStudio2019
不明点や不足の情報があればご連絡ください。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/26 15:48