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

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

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

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

Q&A

1回答

8262閲覧

HPが0になった時の処理について

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/02/22 16:15

前提・実現したいこと・問題点
Unityでアクションゲームを制作しております。
敵のHPを減らし、倒した時の処理について、助言をいただければと思います。
プレイヤーの攻撃により、敵のHPを減らし、0になったら消滅するようにしたいのです。

質問①
0になった瞬間には消えず、0以下になった後もう一度攻撃することによって消えるようになってしまっています。
(例)
プレイヤーから受けるダメージ50 敵のHP50
攻撃を実行→敵のHP0(敵オブジェクト健在)→再度攻撃→敵オブジェクト消滅。

質問②
また、プレイヤーから受けるダメージが敵のHPを上回った場合、敵が消滅せずにHPがマイナスになり減り続けてしまうようになっています。
(例)
プレイヤーから受けるダメージ49 敵のHP50
攻撃を実行→敵のHP1→攻撃を実行→敵のHP-48→(攻撃を継続)-97→-146→-195

といった形になってしまっています。
現在の自分の知識ではどこが原因かが分かっておらず、困っています。

修正したいのは、
①に関しては、HPが0になった瞬間に消滅する。
②に関しては、HPが0以下にならないようにする、0以下になるダメージを受けた場合も消滅するようにしたい。

言語はC♯です。

以上の2点について、ご助力いただければ嬉しいです。
よろしくお願いします。

==============================================

C♯

1コード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class EnemyHP : MonoBehaviour 7{ 8 private NightStutes states; 9 private PlayerStates playerstates; 10 11 public GameObject effectPrefab; 12 public AudioClip destroySound; 13 public int enemyHP; 14 15 16 void OnTriggerEnter(Collider other) 17 { 18 19 states = GameObject.Find("knight").GetComponent<NightStutes>(); 20 playerstates = GameObject.Find("主人公").GetComponent<PlayerStates>(); 21 22 enemyHP = states.HP; 23 24 25 // ぶつかった相手に「Attack」というタグ(Tag)がついていたら、 26 if (other.gameObject.CompareTag("Attack")) 27 { 28 29 // 敵のHPをプレイヤーのatk分、減少させる 30 states.HP -= playerstates.atk; 31 32 33 34 // 敵のHPが0になったら敵オブジェクトを破壊する。 35 if (enemyHP == 0) 36 { 37 38 // オブジェクトを破壊する 39 Destroy(transform.root.gameObject); 40 41 42 } 43 44 } 45 46 47 48 Debug.Log(states.HP); 49 } 50}

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/02/22 22:00

①について 仮にstates.HP=10で、playerstates.atkが10だった場合、 states.HP -= playerstates.atk; を実行すると、 states.HPは0になります。 しかしenemyHPは別の箱なので10のままです。 なので、次に攻撃した時に消滅する形になるのだと思います。 ②について enemyHPが0のときだけ破壊される形なので、enemyHPがマイナスのときは破壊できません。 enemyHPがマイナスのときは0にする処理を直前で入れるか、 enemyHPが0以下のときもif文の中に入るように判定を書き換える必要があります。 少し考えてみた上で分からない場合は、まだ回答が欲しい旨書いてください。 きっと優しい人が回答を書いてくれると思います。
guest

回答1

0

Cはよくわかりませんが、少なくとも、

>>HPが0以下にならないようにする

if (enemyHP == 0)

if (enemyHP <= 0)

ではないかと思います。

また、ここの条件でenemyHPを使うなら、

states.HP -= playerstates.atk;

は、

enemyHP -= playerstates.atk;

とすべきではないでしょうか。

投稿2019/02/22 22:53

編集2019/02/23 04:26
Take_it

総合スコア357

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問