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

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

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

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

Unity

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

Q&A

1回答

1303閲覧

ミサイルの残弾数がアイテム取得時に増やしたい。

Kamizaki_H_ARIA

総合スコア13

C#

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

Unity

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

1グッド

0クリップ

投稿2018/12/02 12:20

前提・実現したいこと

unity2Dで横スクロールアクションのゲームを作っています。ミサイルの残弾数をアイテムを取得したら回復する、というものを作ろうと思い、サイトを参照しながら制作していたのですが、アイテムを取得しても回復せずに、困っています。回答よろしくお願いします。
参照サイト:https://mono-pro.net/archives/4919

発生している問題・エラーメッセージ

NullReferenceException: Object reference not set to an instance of an object ShellItem.OnCollisionEnter2D (UnityEngine.Collision2D col) (at Assets/scripts/ShellItem.cs:22)

該当のソースコード

unitychanが発射するミサイル弾のスクリプト using UnityEngine; using System.Collections; using UnityEngine.UI; public class PlayerMissile : MonoBehaviour { public LayerMask groundLayer; public GameObject Missile; public int shotCount; public Text shellLabel; private Rigidbody2D rigidbody2D; private Animator anim; private bool isGrounded; void Start() { anim = GetComponent<Animator>(); rigidbody2D = GetComponent<Rigidbody2D>(); shellLabel.text = "Missile:" + shotCount; } void Update() { if (Input.GetKeyDown("e")) { if (shotCount < 1) return; // ★追加 shotCountの数値を1ずつ減らす。 shotCount -= 1; // ★追加 shellLabel.text = "Missile:" + shotCount; anim.SetTrigger("Shot"); Instantiate(Missile, transform.position + new Vector3(0.4f, 1.2f, 0f), transform.rotation); // ショット音を鳴らす //GetComponent<AudioSource>().Play(); } } public void AddShell(int amount) { shotCount += amount; shellLabel.text = "Missile:" + shotCount; } }
`残弾数が回復するオブジェクトにアタッチしているスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; public class ShellItem : MonoBehaviour { private GameObject Missile; public int reward; // Use this for initialization void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.tag == "UnityChan") { Destroy(gameObject); Missile = GameObject.Find("Missile"); PlayerMissile ss = Missile.GetComponent<PlayerMissile>(); ss.AddShell(reward); } } }

試したこと

サイトを参考してスクリプトを作成した。

補足情報(FW/ツールのバージョンなど)

unity

Solitude👍を押しています

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

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

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

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

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

guest

回答1

0

NullReferenceException: Object reference not set to an instance of an object ShellItem.OnCollisionEnter2D (UnityEngine.Collision2D col) (at Assets/scripts/ShellItem.cs:22)

NullReferenceExceptionエラー = 参照変数がオブジェクトを参照していないエラーなので
ShellItemスクリプトのOnCollisionEnter2D関数の中の変数(Missileとss)がnullでないか、
きちんと参照できているかどうかを確かめてください。

個人的に怪しいのはMissile変数

C#

1Missile = GameObject.Find("Missile");

Missileという名前のゲームオブジェクトがあるのか、綴りミスはないかなどを確かめてください。

投稿2018/12/02 13:40

編集2018/12/02 13:42
sumikko6210

総合スコア138

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問