勝手にDisableになっていた。そんな経験ありませんか?私が踏んだのは、NullReferenceExceptionが原因でした。サンプルプロジェクトNullReferenceExceptionって?公式のマニュアルはこちら。意図的にNullReferenceExceptionを起こしてみましょう。適当にスクリプトを作成し、空のGameObjectにアタッチしておきます。スクリプトには、publicでButton型の変数を定義しておきます。Start関数の中で先ほどのbuttonのtextを変えようとします。"ほげる";}これをこのままコンパイルし、Unityで実行します。Inspectorでbutton変数を設定せず「None」のままにしていたため、buttonのtextに代入できずにNullReferenceExceptionとなります。正常に動かすためには、Inspector上でbutton変数に、Buttonオブジェクトを設定しておく必要があります。NullReferenceExceptionが起きると?NullReferenceExceptionがスクリプトの途中で発生した場合、その行で処理が止まってしまい、その後の処理が走らなくなってしまいます。テストのために、以下のようなスクリプトを作成しました。}}Awake()の中で.Find()を使い、ゲームオブジェクトを取得します。ShowName()は、myObjectオブジェクトの名称をコンソールに表示します。AddCountは、int型の変数countをインクリメントし、countの中身をコンソールに表示します。false」を実行します。「myObject」には「Button」コンポーネントは追加されていないので、GetComponentは失敗し、NullReferenceExceptionとなります。(“ほげほげ”)」とコードが続いています。(“ほげほげ”)」と言うコード自体には問題がないはずなので、一見コンソールに「ほげほげ」と出力されそうです。コンソールログには、Debug.Logの出力は行われません。以下のようなスクリプトでもこのパターンは起こり得ます。音声ファイルが設定されなかった場合、「UnassignedReferenceException」となり、そこで処理が停止します。同様に「UnassignedReferenceException」となります。結果として、soundTimeへの代入も行われず、audioSourceはPlay()も実行されずに音声は再生されません。後の処理がきちんと走るように、Nullチェックやtry-catchブロックを作りましょう。Debug.Log("ほげほげ");}このようにする事で、仮に「audioClip」に音声ファイルが設定されていなくても、そこで処理が止まる事なくNullであると言うメッセージを表示する事ができます。audioClipが設定されていない事をコンソールで確認でき、if文が終わったあとのDebug.Logも出力する事ができる。サンプルプロジェクトNullCheckの動作を確認できるサンプルプロジェクトを、こちらにご用意しました。ChatLune/blog-unity-NullCheckgithub.commig入社3年目のエンジニアです。iOS/Androidアプリの開発をしています。自動レイアウト機能による整列の影響を受けない方法をご紹介しています。サンプルプロジェクトも掲載しています。記事を読む【Unity】ゲーム画面のスクリーンショットを撮影し、UIとして使用するカメラの描画内容をTexture2Dとして取得し、Spriteに変換せずにゲーム画面中にUIとして表示する方法をご紹介しています。記事を読む【Unity】動的に要素が増える背景画像付きのScroolViewの実装方法UnityにおけるScrollViewコンポーネントと、それに伴う各コンポーネントの設定方法の記事です。サンプルプロジェクトも掲載しています。