実現したいこと
InputFieldに入力された任意の値をOnRegister()
が呼ばれる度にListへ格納していきたいです。
エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object Main.OnRegister ()
Debug.Logをしてみて、MainクラスのOnRegister()
でGetAnswerText()
からanswerText
が取得できているのを確認しました。
エラーメッセージから、answersManager.AddAnswer(answerText)
の引数にしているanswerText
の参照ができず、NullReferenceExceptionになっているらしい事は分かったのですが、解決方法が分かりません。どなたかご教授お願いします。
該当のソースコード
C#
1public class Main : MonoBehaviour 2{ 3 public AnswersManager answersManager; 4 public InputManager inputManager; 5 6 7 public void OnRegister() 8 { 9 //GetAnswerText()=InputFieldに入力された値をstring型で返す関数 10 string answerText = inputManager.GetAnswerText(); 11 answersManager.AddAnswer(answerText); 12 13 } 14 15 public void OnPrint() 16 { 17 answersManager.PrintAnswer(); 18 } 19}
C#
1public class AnswersManager 2{ 3 List<string> answer = new List<string>(); 4 5 6 public void AddAnswer(string answerText) 7 { 8 //InpuManagerがMainに渡した変数をリストに加える 9 answer.Add(answerText); 10 } 11 12 public void PrintAnswer() 13 { 14 foreach(var a in answer) 15 { 16 Debug.Log(a); 17 } 18 } 19}
提示されているソースのどこでNullReferenceExceptionが出るのですか?
いつもありがとうございます。
シーン上のButtonに設置したMain.OnRegister()を実行した際にNullReferenceExceptionエラーが出ます。
DebugLogをすると、Main.OnRegister()の
string answerText = inputManager.GetAnswerText(); までは実行されていますが、
answersManager.AddAnswer(answerText);でエラーになってしまいます。
また、AnswersManager.AddAnswer(string answerText)内でDebug.Log(answerText);を試しましたが、出力できませんでした。
answersManagerはどこで設定しているのでしょうか?
answersManagerのインスタンス生成をしていなかったのが原因でした!ありがとうございます!
Mainクラスでnewする事で期待した動きになりました。
そしてまた1つ疑問が出てきたのですが、もしよろしければご教授いただけますでしょうか?
MonoBehaviourを継承したMainクラスでnewすると、「'new'を使用してはいけない」という警告が出ます。
Mainクラスで値の受け渡しや関数の取りまとめをしたいのですが、この警告を回避する方法はありますか?
すみません、もう一度再生すると警告は出なくなりました!
お騒がせしました。
回答1件
あなたの回答
tips
プレビュー