2016-12-18 18 views
-2

私は知っていますが、この質問はすでにここで多く答えられていて、私を信じて、私はその問題を解決するために多くの方法を試しましたが、何度も何度も繰り返されます。Unity C#NullReferenceException

ですから、基本的に、私は変更しようとしています。私のゲームのお金、別のスクリプトから。

ボタンをクリックするとすぐに、このエラーメッセージが表示されます。私はここに根本的に間違って何をやっていると思うが、それはまた、私のスコアスクリプトで起こるが、それはまだとにかく働いて...しかし、ここでエラーです:

NullReferenceException: Object reference not set to an instance of an object 
Score.ResetScore() (at Assets/Scripts/Score.cs:36) 

そしてここでは、スクリプトはがすべきことをしていますが一緒に機能します。

スクリプト1:

void ResetScore() 
    { 
     GameManager gamemanag = GetComponent<GameManager>(); 
     score = 0; 
     gamemanag.ResetQuestions(); 
    } 

スクリプト2:

public void ResetQuestions() 
    { 
     unansweredQuestions = questions.ToList<Question>(); 
    } 

それは少しクリーナーだからスコアスクリプトでした。これは実際にはうまくいかないので、私はアイデアがありません。

私は最後にpastebinに全文を掲載しています。

お手数ではありますか?

スクリプト1:スクリプトの2 http://pastebin.com/raw/qvbFYd3x

http://pastebin.com/raw/8gMzaagq

+2

'ResetScore()'が 'NullReferenceException'をスローできる唯一の方法は、' GetComponent () 'が' null'を返すかどうかです。構成によっては可能です。私の問題はあなたのコードではなく、あなたの設定に含まれていると思います。これはあなたの質問の一部ではありません。 – hvd

答えて

1

起こって複数のものがあります!

  1. (なぜあなたはスコアを設定しているが、スコア== 0であれば0に?あなただけ離れて他の を残すことができる。)

  2. DisplayScoreでは、scoreText 01にアクセスしていますフィールド。これは、NullReferenceExceptionを投げて、 がインスペクタに設定されていない場合に発生します。

  3. ResetScoreには、 GameManagerインスタンスがあります。ResetQuestionsを呼び出すと、Scoreスクリプトを含むgameobjectにGameManagerスクリプトも含まれていないと、 NullReferenceExceptionがスローされます。 Start

  4. GameManagerあなたはインスペクタでどんな質問を設定していない場合は、 とNullReferenceExceptionを得ることができます。

  5. あなたはSetCurrentQuestionのに1つだけオフにがあります。基本的に質問がない場合は、0から0までの乱数が得られます。唯一の有効な結果はその状況では0です。あなたはインデックス0で質問にアクセスしていますが、1つも存在しません。それはインスペクタで割り当てられていない場合とNullReferenceExceptionをスローする可能性

  6. プライベート[SerializeField]フィールドのいずれか(これはIndexOutOfRangeExceptionをスローします)。

あなたが見ることができるように、あなたの文の多くは、とNullReferenceExceptionにつながる可能性があります。実際に問題がどこにあるのかを実際には伝えられません。なぜなら、多くの場所にある可能性があるからです。コードをデバッグし、アクセスしようとしている変数のどこがヌルであるかを確認するのが最良です。

+0

あなたの答えをありがとう!私はResetScoreでif(score!= 0)に変更しました score = 0;だからナンバー1は私が推測している。私はまだエラーが発生します。私はどこでもScoretextを設定しているので、数字2も同様です。私も質問をしたので、番号4も出ています。番号5、私は0から未回答の質問の数までの範囲を設定しました。上記の答えが残っていないかどうかをチェックしました。もしそうでなければ、リストをリフレッシュしました。だから私はそれが問題になるとは思わない。そして、私は割り当てられていないSerializeFieldsを持っていないので、それは3でなければなりません。 – thaiten

+0

あなたはそれにスコアスクリプトを持っているすべてのゲームオブジェクトにGameManagerスクリプトを追加しなければなりませんか?私は質問を2回記入する必要がありますが、私はしませんか? – thaiten

+0

GetComponentは、現在のゲームオブジェクトで正しいコンポーネントを検索します。コンポーネントがどこにあるのかわからない場合は、シーンを検索する静的なGameObject.GetComponent を使用することができます。私は今すぐテストすることができないので、メソッド名は若干異なるかもしれません。 –

0

任意のオブジェクトがnullことができます...

は自分のコードをチェック:

GetComponent<GameManager>(); 

はあなたに何のGameManagerを与えることはできません、

questions.ToList<Question>(); 

またはリストが初期化されていません。でそれを修正:

unansweredQuestions = new List<Question>(); 

あなたが直接あなたのコードをデバッグ、またはちょうどにチェックする必要があります= nullを

関連する問題