質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

受付中

エラーメッセージの意味が分かりません

Unity52149279
Unity52149279

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

5回答

0グッド

1クリップ

54324閲覧

投稿2018/08/10 18:35

NullReferenceException: Object reference not set to an instance of an object
myscript.Update () (at Assets/myscript.cs:33

実際のコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class myscript : MonoBehaviour
{
GameObject[] cubes = new GameObject[4];
GameObject[] gos = new GameObject[4];

// Use this for initialization void Start() { for(int i = 0;i < 4; i++) { cubes[i] = GameObject.Find("Cube" + i); gos[i] = GameObject.Find("GameObject" + i); } } // Update is called once per frame void Update() { Rigidbody rigidbody = GetComponent<Rigidbody>(); foreach(GameObject obj in cubes){ obj.transform.Rotate(new Vector3(1f, 1f, 1f)); } Vector3 v = transform.position; v.y += 2; v.z -= 7; Camera.main.transform.position = v;   ←この部分がダメ見たいです if (Input.GetKey(KeyCode.LeftArrow)) { rigidbody.AddForce(new Vector3(-1f, 0f, 0f)); } if (Input.GetKey(KeyCode.RightArrow)) { rigidbody.AddForce(new Vector3(1f, 0f, 0f)); } if (Input.GetKey(KeyCode.UpArrow)) { rigidbody.AddForce(new Vector3(0f, 0f, 1f)); } if (Input.GetKey(KeyCode.DownArrow)) { rigidbody.AddForce(new Vector3(0f, 0, -1f)); } } private void OnTriggerEnter(Collider collider) { if (collider.gameObject.name.StartsWith("Cube")) { for(int i = 0; i < 4; i++) { if(cubes[i] == collider.gameObject) { ParticleSystem ps = gos[i].GetComponent<ParticleSystem>(); ps.Play(); cubes[i].SetActive(false); } } } }

}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2021/02/09 20:20

こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。

回答5

4

####エラーメッセージの意味について

NullReferenceException: Object reference not set to an instance of an object myscript.Update () (at Assets/myscript.cs:33

myscript.Update ()メソッドの33行目でNullReferenceExceptionという例外が発生しているということです。

この回答で分からない単語があれば、1個1個以下のワードから検索してみてください。

  • メソッド
  • NullReferenceException
  • Null
  • 例外(Exception)
  • 参照(Reference)

####実際の問題点

Camera.main.transform.position = v;   ←この部分がダメ見たいです

ここがmyscript.csの33行目を指しているからだと推測します。

この中で、CameramaintransformpositionvがNullだということかもしれません。

ただ、
vVector3 v = transform.position;で通っており、
Camera.main.transform.positionpositionはまだmyscript.cs内のどこにも使われていないため、Nullでも問題ないと思います。

なので、残った
CameramaintransformのどれかがNullであることが原因です。
確認してみてください。

また、何かわからないことがあれば質問してください。

投稿2018/08/11 09:18

編集2018/08/11 12:08
BluOxy

総合スコア2659

muuu_u, umyu, Bongo, morinokuma0621👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Bongo

2018/08/11 11:06

BluOxyさんのアドバイスに加えまして、怪しい点が絞り込めましたら、やはり本家リファレンスも参照してみるのがいいかと思います。 Camera.main - Unity スクリプトリファレンス(https://docs.unity3d.com/jp/current/ScriptReference/Camera-main.html)によれば... Camera.main public static Camera main ; 説明 "MainCamera" にタグ付けされている最初の有効なカメラ(読み取り専用)。 The primary Camera in the scene. Returns null if there is no such camera in the scene. This property uses FindGameObjectsWithTag internally and doesn't cache the result. It is advised to cache the return value of Camera.main if it is used multiple times per frame. ...との記述があります。タグを「MainCamera」に設定されたカメラがシーン内に存在しているかどうかはご確認済みでしょうか?

0

結論として、以下のコードで実行可能です。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class myscript : MonoBehaviour 6{ 7 GameObject[] cubes = new GameObject[4]; 8 GameObject[] gos = new GameObject[4]; 9 10 Camera _camera;//カメラ 11 Rigidbody _rigidbody;//Rigidbody 12 13 // Use this for initialization 14 void Start() 15 { 16 _camera = Camera.main; //キャッシュすれば書き込み可能 17 18 _rigidbody = GetComponent<Rigidbody>();// キャッシュする 19 20 for(int i = 0;i < 4; i++) 21 { 22 cubes[i] = GameObject.Find("Cube" + i); 23 gos[i] = GameObject.Find("GameObject" + i); 24 } 25 } 26 27 // Update is called once per frame 28 void Update() 29 { 30 //Rigidbody rigidbody = GetComponent<Rigidbody>(); これは負荷が高くなるのでStart()内でキャッシュする。 31 foreach(GameObject obj in cubes){ 32 obj.transform.Rotate(new Vector3(1f, 1f, 1f)); 33 } 34 35 Vector3 v = transform.position; 36 v.y += 2; 37 v.z -= 7; 38 // Camera.main.transform.position = v; こうではなく... 39 40 _camera.transform.position = v;//こうすればカメラが移動する。 41 42 //以下、割愛 43 } 44 45}

公式リファレンスには、

"MainCamera" にタグ付けされている最初の有効なカメラ(読み取り専用)。

と書いてあります。
NullReferenceExceptionが起きたのは、Camera.mainが読み取り専用だったためです。
そのためCamera.main.transform.positionを変更しようとするとこのエラーが出ます。
読み取り専用の変数は、一度別の変数に代入することで操作できるようになるので、覚えておくと良いですよ。

また、ついでですが、GetComponentをUpdate内でいちいちしてると重くなるので、クラス変数を用意して、Start内でGetComponentすると良いですよ。

投稿2021/05/01 08:10

task58

総合スコア24

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

よくわからないエラーが出たときは、
エラーメッセージをコピーしてgoogle検索。
「NullReferenceException: Object reference not set to an instance of an object」
このとき、そのソース特有の文言は省いた方がいいです。(myscript.Update ()とか)
それでたいてい解決します。

投稿2018/08/11 02:49

lightwill

総合スコア947

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

nullに対して何かをやろうとした時に出る例外です。

投稿2018/08/11 02:47

mitsu-wan

総合スコア131

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

Null Reference Exception
エラーメッセージの意味を知りたいという質問ですね?
ここを見てください。

投稿2018/08/10 22:49

Zuishin

総合スコア27644

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。