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

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

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

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

19547閲覧

オブジェクト参照がオブジェクトのインスタンスに設定されていません

Fuwa

総合スコア49

C#

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/01/07 16:37

中学一年生です、
このエラーを教えていただければ助かります。

using UnityEngine;

public class ItemManager : MonoBehaviour
{

GameManager gameManager; private void Start() { gameManager = GameObject.Find("GameManager").GetComponent<GameManager>(); } public void GetItem() { gameManager.Addscore(100); Destroy(this.gameObject); }

}

エラー内容、 NullReferenceException: Object reference not set to an instance of an object
ItemManager.GetItem () (at Assets/Scrips/ItemManager.cs:21)
PlayerManager.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Scrips/PlayerManager.cs:135)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Null Reference Exception というのは、まずそれぞれを漢字に翻訳すると次の意味になります。
Null = 空値
Reference = 参照
Exception = 例外

Null(ナル)は一般的には使わない概念ですが、プログラミングではよく出てくる概念なので覚えておくとよいでしょう。

※これを"ヌル"と間違った呼び方をする人が多いので注意してください。英語の発音としてはヌルよりもはるかにナルに近いものとなります。日本ではこれを漢字に直さずそのまま null として使用するのが普通です。

さて、この null は、何もないという意味ではありますが、0、零、ゼロではありません。
そもそも存在しないもの、ということになります。
ということでこのエラーは「存在しないものを参照しようとしたので例外となった」という意味になります。

次の「Object reference not set to an instance of an object」は、エラーの補足となります。
これは「オブジェクト参照は、オブジェクトのインスタンスとして設定されていません。」と訳されます。

これらを合わせると、「オブジェクトのインスタンスを参照しようとしたけれども、参照しようとしたものがないのでエラーになった。」という意味になります。

ここで「インスタンス」とは何かを簡単な言葉で説明するにはとてもこの回答欄では足りないので、ご自分で調べて勉強してください。

ということで、ここでわかることは、**オブジェクトのインスタンスを指定しなければならなかったにもかかわらず、指定していなかったのでエラーになった、**ということです。

では実際プログラムの中では何を治せばよいのかについてですが、プログラム全体が解らないのでここでは正確に答えることはできません。
しかし、原因はおそらくですがGameManegerというオブジェクトが存在していないではしょうかと、推定します。もしくはGameManegerにGemeManagerというスクリプト(コンポーネント)がアタッチされていないかです。また、スペルミスの可能性も考えられます。

その場合、とにかく以下の行

gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();

でGameManagerを検索・取得しますが、存在しないので変数gameManagerには、null が入ります。
そして、gameManager.Addscore(100); でAddscoreメソッドを実行しようとしたときに gameManagerは null なので存在しないものを参照しようとしたのでエラーになる、といった感じかと思います。

投稿2022/01/08 03:26

編集2022/01/08 03:38
monmoko

総合スコア202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/01/08 04:00

null は英語がオリジナルではなく、また日本語ではヌルという読みが定着しており、特に間違いというわけではありません。例えばドイツ語ではヌルと発音します。 ヌルが間違いというのは、どこの情報でしょうか?
monmoko

2022/01/08 04:21 編集

そうですね、確かに明確に間違いと言い切ってしまうと語弊がありますね。 しかし、上記のエラーメッセージは英語です。そして、残念なことにコンピューターの世界では英語が中心です。 米国人との会話では通じなくて困るカタカナ語が多かった経験から、若いうちから知っておいた方がよいかと思いました。ということでどこかの情報ということではなく、自己の経験からです。
Zuishin

2022/01/08 04:27

英語全文を読むときにはナルと読めば良いと思いますが、「外国語」と「外来語」は違うということを覚えておいた方がいいでしょう。 マクドナルドに行きたい時に日本人に向かって「マクダナーどこですか?」と話しかけるのは滑稽ですし、会話の端々にカタコトのカタカナを混ぜるのも滑稽です。 それを踏まえて、「ヌルは間違い」と言い切れる「根拠」を聞きましたが、それは「無い」ということでいいんですね?
Zuishin

2022/01/08 04:39

念のため。英語のメッセージではなく、次の文に関して言っています。 > ※これを"ヌル"と間違った呼び方をする人が多いので注意してください
guest

0

NullReferenceException:

ってのはnullの変数でなんかしたときにでます
そのエラーが出る行で実行を止め、そこに出てくる変数のナカミを片っ端からチェックしよう

投稿2022/01/07 23:16

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fuwa

2022/01/08 03:35

gameManager.Addscore(100);でnull発生していました、どう対処すればいいでしょうか。
y_waiwai

2022/01/08 03:42

gameManagerがnullというなら、そいつの代入文が実行されてないか、失敗してるか、ですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問