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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

1回答

1723閲覧

経験値取得の際にNullRefarenceが出てしまう

GOTOken

総合スコア54

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2018/06/20 10:58

問題点

以下のようにPlayer.csにて参照させるためのAddExp関数を用意しました。
実際に、Enemy側にAddExpを使い体力が0になったら経験値がPlayer側に入るというようなものを実装しようとしました。が、取得の処理がなされず、Destroyもされない状況になりました。
また、NeedExpの処理に関しても、Inspector側で設定した後、Playすると0になってしまう原因も何故か理解できていない状況です。
この場合はどのようにすれば良いのでしょうか・・・?

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour { 6 7 public int m_nextExpBase; // 次のレベルまでに必要な経験値の基本値 8 public int m_nextExpInterval; // 次のレベルまでに必要な経験値の増加値 9 public int Level; //現Playerレベル確認用変数 10 public int Exp; 11 public int NeedExp; //次経験値取得必要数確認用変数 12 13 private void Awake() 14 { 15 NeedExp = GetNeedExp(1); // 次のレベルに必要な経験値 16 17 } 18 19 //敵を倒したときに経験値を増やす関数 20 public void AddExp(int exp) 21 { 22 //経験値取得処理 23 Exp = Exp + exp; 24 //経験値が足りていない場合、処理を中断 25 if (Exp < NeedExp) return; 26 //レベルアップ 27 Level++; 28 NeedExp = GetNeedExp(Level); 29 } 30 //経験値取得量設定用関数 31 private int GetNeedExp(int level) 32 { 33 return m_nextExpBase + m_nextExpInterval * ((level - 1) * (level - 1)); 34 35 } 36}

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5 6public class Enemy : MonoBehaviour { 7 8 public int EnemyHP; 9 public int EnemyEXP; 10 11 void Update () { 12 if(EnemyHP == 0) 13 { 14 var Player = GetComponent<Player>(); 15 audiosource.PlayOneShot(Destroysound); 16 Player.AddExp(EnemyEXP); 17 Destroy(gameObject); 18 } 19 } 20}

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

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

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

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

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

guest

回答1

0

var Player = GetComponent<Player>();
Enemyクラスが付いているオブジェクトにPlayerクラスが付いているとは思えないので、取得に失敗してNullRefarenceが出ます。

NeedExpが0になる理由はぱっと見分かりませんが、
m_nextExpBaseが0になっているか、別スクリプトから0にしているかのどちらかだと思います。

投稿2018/06/20 11:37

sakura_hana

総合スコア11427

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

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

GOTOken

2018/06/20 21:58

private Player player; player.AddExp(EnemyExp); にしたのですが、こちらもNULLが出てしまいました。 m_nextExpBaseが原因でした。
sakura_hana

2018/06/21 00:40

取得部分がGetComponent<Player>();のままならば見付からないので当然nullのままです。 ・どのオブジェクトに何のコンポーネントが付いているのか ・スクリプトにおける「gameObject」「transform」「GetComponent」等はそれぞれ何を参照するのか(「.」による繋げ方によって変わります) 他質問を見ていても思いますが、これが理解出来ていないとすぐエラーになります。 Debug.Log(player); などと利用しながら「どこがnullなのか」「なぜnullなのか」を確認しつつ進めるといいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問