おもちゃラボ

Unityで遊びを作っていきます

【Unity】ScreenPointToRayでエラーが出る

Unity2018.2あたりからScreenPointToRayメソッドを使うと、NullReferenceExceptionのエラーが出てしまうことがあるようです。

NullReferenceException: Object reference not set to an instance of an object

f:id:nn_hokuson:20180910202730p:plain

原因と対策

ScreenPointToRayメソッドを使う場合、だいたい次のように記述していると思います。

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

「Camera.main」と書くことでMainCameraタグがついたゲームオブジェクトを検索してCameraコンポーネントを取得しています。「Camera.main」の部分は次のプログラムと同じ意味ですね。

GameObject.FindWithTag(“MainCamera”).GetComponent<Camera>();

ただUnity2018.2からは、Main CameraのタグがデフォルトではUntaggedに設定されています。

f:id:nn_hokuson:20180910202133j:plain

したがって、シーン中からカメラオブジェクトが見つからず、NullReferenceExceptionのエラーが出ることになります。

これを防ぐには、ヒエラルキーウインドウでMain Cameraを選択し、インスペクタのTagをMainCameraに再設定して下さい。

f:id:nn_hokuson:20180910202603j:plain

Unityの教科書でも7章、8章でScreenPointToRayメソッドを使っているため、ここでnullexceptionエラーが出る可能性かあります。

Unityの教科書 Unity 2018完全対応版 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unityの教科書 Unity 2018完全対応版 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

その場合は、上で書いたように、Main CameraのタグをMainCameraに設定しなおしてから、再度お試しください。