Unityで敵にダメージを与えた時に少しづつHPを減らす機能を作成

記事内に広告が含まれています。

今回は敵にダメージを与えた時に一気にダメージ分のHPを減らすのではなく1ずつHPを減らす演出を加えたいと思います。

HPがどういう風に減っていくかをわかりやすくする為に敵のHPを頭上に数値として表示しておきます。

Unityで敵キャラクターのHPを頭上に表示するUIを作成
Unityで敵キャラクターのHPを表すUIを頭上に表示してキャラクターと一緒に移動するようにします。

上の記事ではメーターで作成していますが、こちらのメーターでも同じように作成する事が出来ます。

また今回のように徐々にHPを減らす機能をメーターで表示しつつダメージ量も分かりやすくする機能も作ってみました。

Unityでダメージを受けてHP表示バーを減らす時にダメージ量をわかりやすくする
UnityでアクションゲームやRPGゲーム等でダメージを受けた時にHPのバーを減らす時に受けた分のダメージ量がわかるような機能を作っていきます。

メーターで作りたい人は上の記事を参考にしてください。

今回の機能を作成すると、

↑のような感じの機能が出来上がります。

与えるダメージは1回で1000にしています(記事を見ないとどんなもんかわからないかも?)。

この記事を最初に作った時より良い感じになりました(謎)

その分、サンプルは雑になっていますけどね・・・・(^_^;)

スポンサーリンク

HP表示用UIの作成

まずは人型キャラクターの子要素にHP表示用UIを作成していきます。

敵の子要素にHPを数値で表示

敵キャラクターの子要素で右クリック→UI→Canvasを作成し、名前をDamageUIとします。

HPの子要素にUI→Textを作成します。

DamageUIのインスペクタ

上がDanmageUIのインスペクタです。

CanvasのRenderModeをWorld Spaceにして、通常のゲームオブジェクトと同じように扱えるようにします。

RotateDamageUIスクリプトはHPのUIが常にカメラの方向を向くようにする為のスクリプトです。

これで敵キャラクターのHP用のUIが完成しました。

敵に操作スクリプトとステータススクリプトを取り付ける

上が敵キャラクターのインスペクタです。

実際にはCubeを作成して名前をEnemyにし、TagにEnemyを設定しただけですが・・・(修正前は人型キャラクターにしてました)

EnemyStatus(敵のステータス管理スクリプト)とEnemyController(敵の行動処理スクリプト)を新しく作り設定しておきます。

スクリプトは後で作成します。

HPを少しづつ減らす6

上のようにHPのUIが表示されるように配置します。

ここまで出来たら敵キャラクターをAssetsフォルダにドラッグ&ドロップしてプレハブ化しておきます。

これでHPを表示するUIを持った敵キャラクターが量産出来ます。

敵のステータス保持スクリプトEnemyStatusの作成

EnemyStatusを作成します。

EnemyStatusはHPを保持したり、ダメージを受けた時に徐々にHPを減らす処理を担当します。

ダメージを受けたらSetDamageメソッドを呼び出し、ダメージ値を保持します。

Updateメソッドではダメージがある時に前にダメージを受けてから指定した時間経過していたらダメージを減らす処理をします。

トータルのダメージ量を一気に減らすとカウントダウンが出来ないので、トータルのダメージ量を10で割った商を1回で減らすようにします。

例えば1200のトータルダメージがあったとしたら10で割った商は120なので1回の処理で120減らします。

最終的には10で割ると商が0になるので、その時は余りを減らすダメージ量にします。

HPが0以下になったら自身(敵)を削除するようにします。

敵キャラクター操作スクリプトEnemyControllerの作成

次は敵キャラクター操作スクリプトEnemyControllerです。

敵キャラクター操作スクリプトと言っていますが、今回は動かす事はしないので、ダメージを受けた時の処理だけを記述しています。

TakeDamageメソッドは主人公の攻撃が当たった時に呼ぶメソッドでダメージ値を受け取ります。

実際に減らす処理はEnemyStatusスクリプトで行っていますので、ダメージ量をEnemyStatusのSetDamageメソッドを呼び出して渡しています。

次にEnemyControllerのTakeDamageメソッドを呼び出す処理を追加していきます。

今回は

Unityのアクションゲームで物理的な弾を飛ばして敵との当たり判定をする
Unityのガンシューティングゲームなどで銃から弾を飛ばす場合にスクリプトで敵と接触したか判断するのではなく、物理的な弾を飛ばしその弾が当たったかどうかで判断させます

で弾が敵に当たった時にTakeDamageメソッドを呼び出すようにします。
(近接攻撃等で敵を攻撃した時にTakeDamageメソッドを呼び出す処理でも同じように作成してください。)

弾が敵に当たった時の処理BulletAttackにTakeDamageメソッドを呼び出す処理を追加

それでは弾が敵に当たった時の処理BulletAttackにTakeDamageメソッドを呼び出す処理を追加します。

弾のゲームオブジェクトを消す前にEnemyControllerのTakeDamageメソッドに引数100(ダメージ値)を渡して呼び出します。
(今回の場合はダメージ値は常に100になります)

その後、弾のゲームオブジェクトを消します。

HPが少しづつ減るかどうかの確認

これで機能が完成したので敵を攻撃して試してみましょう。

HPを少しづつ減らす7

HPが少しづつ減っていくのが確認出来ます。
また、連続で攻撃が当たれば前の攻撃で受けたダメージ分は一気に計算されそこからまた少しづつ減るようになっています。

↑のサンプルは最初に作成した仕様でのサンプルでダメージを減らしている時に攻撃をするとダメージを完全に減らした値から再度ダメージを与える事になります。

機能に修正を加えて攻撃を与えた時はダメージ量だけ増やし、減らす処理はEnemyStatusスクリプトで行うように変更しました。

これでUnityで敵にダメージを与えた時に少しづつHPを減らす機能を作成が完了しました。

HPを減らしていく間隔時間を設定しましたが、あんまり使わないかも・・・・(^_^;)

間隔時間を0にしても早すぎるってことはなさそうですしね。

タイトルとURLをコピーしました