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

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

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

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

Unity

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

Q&A

1回答

1388閲覧

ScriptableObjectで作成した敵のHPを減らす方法がわかりません

Furukawa-Shinya

総合スコア6

C#

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

Unity

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

0グッド

0クリップ

投稿2020/07/28 07:43

編集2020/07/28 08:17

前提・実現したいこと

PlayerがEnemyを攻撃してEnemyのHpTextに反映させて減らせるようにしたいです。

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

2Dのターン制ゲームを作ろうと思っておりScriptableObjectを使用してEnemyを作成しました。
EnemyにステータスをつけTextに反映させる事が出来たので攻撃を実装しようとしたのですがPlayerが攻撃した際に
NullReferenceException: Object reference not set to an instance of an object
PlayerManager.Attack (EnemyStatus enemy) (at Assets/PlayerManager.cs:14)
BattleManager.Attack () (at Assets/BattleManager.cs:19)
と表示されエラーになってしまいます。
利用環境は最新のUnityです。

PlayerManager = プレイヤーのHPなど
Enemy = EnemyのUI(HpTextなど)
EnemyStatusData = EnemyStatusDataクラスのScriptableObject
EnemyStatus = EnemyStatusDataクラスの中のEnemyStatusクラス

該当のソースコード

using UnityEngine; public class BattleManager : MonoBehaviour { public PlayerManager player; public Enemy enemy; EnemyStatus enemyStatus; void Start() { enemy.SetUpUI(enemyStatus); } public void Attack() { int damage = player.Attack(enemyStatus); ←エラーが出ている箇所 enemy.SetUpUI(enemyStatus); } } /////////////////////////////////////////// public class PlayerManager : MonoBehaviour { public int maxhp; public int hp; public int at; public int Attack(EnemyStatus enemy) { int damage = enemy.Damage(at); ←エラーが出ている箇所 return damage; } public int Damage(int damage) { hp -= damage; return damage; } }

試したこと

正直色々とやりすぎて訳がわからなくなってしまいました。

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

プログラミング初心者なので、これを勉強すれば改善出来る事などあればそういうでもいいので教えていただけたらと思います。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

null reference と表示されエラーになってしまいます。

エラーの情報は、スタックトレースも含めて、コピペして正確なものを提供してください。

説明から推測するに、BattleManager.Attack() → PlayerManager.Attack() という呼び出しチェーンの後、PlayerManager.Attack() で NullReferenceException になっている、ということだと思います。
そうならば、変数 enemyStatus が null だからです。宣言されているだけで初期化されていないので、null ではない初期値を何か設定してやれば状況は変わると思います。

投稿2020/07/28 08:07

bboydaisuke

総合スコア5308

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

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

Furukawa-Shinya

2020/07/28 08:50

返答ありがとうございます。 編集してエラー文追加しました。 nullではない初期値はどこに記入すればいいのでしょうか?
bboydaisuke

2020/07/28 09:00 編集

> 編集してエラー文追加しました。 ``` で囲んでやるとなおよいですね。 > nullではない初期値はどこに記入すればいいのでしょうか? 「初期化」ですから EnemyStatus enemyStatus; の行を EnemyStatus enemyStatus = (初期値); に変えればよいです。初期値として何を指定すべきかについては、EnemyStatus がどのようなものかは本人にしかわからないので、適切に記述してください。 初期化というのは C# の初歩で知る内容なので、詳しくは手元の教科書などで調べてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問