どうも、チャムコードというブログ運営してる、チャーさんです。
あなたはUnityで敵のHPを減らす機能を作りたいですか?
敵がプレイヤーから攻撃を受けたときに、HPを減らす
処理をつけたいなら、この記事はあなた向けです。
この記事を読めば、あなたはUnityで敵がダメージを受けると
HPを減らす機能を作れます。ですが、この記事を読まないと、
「どうやってHP減らすんや、、」と途方に暮れてしまうかもしれません。
そうなりたくなければ、このまま記事をお読みください。
動画による説明はこちらです。
また、まだ敵にHPを表示させてないって場合は、
先にこちらの記事をお読みください。
敵のHPを作る方法を説明してます。
Unityで敵のHPを減らす方法
ということで本題です。
Unityで敵のHPを減らす方法は、
- 当たり判定をつける
- 当たり判定があったらHPを減らす処理をする
この2つをすればOKです。
ということでそれぞれ解説します。
まず当たり判定をつけるですが、これをすることで、
敵が攻撃を受けたときの処理をつけることができるように
なります。
例えばプレイヤーの剣が敵に当たったとか、
プレイヤーの銃弾が敵にあたったとか、
そういう瞬間の当たり判定を作ることで、敵のHPを
減らす処理のきっかけになる部分を作ることができます。
(これをトリガー(引き金)とか言います)
敵に当たり判定つける方法
で、敵に当たり判定をつけるには、コライダーという
コンポーネントをオブジェクトにつける必要があるのですが、
Hierarchyの+から3Dオブジェクトなどでオブジェクトを
作ってる場合、初めからコライダーは付いてます。
Box ColliderとかSphere Colliderとかがそれに該当するので、
それが付いてるかオブジェクトのインスペクターを確認して
ください。
で、コライダーが付いてるのを確認したら、
次は、敵オブジェクトのコライダーコンポーネントの中にある、
IsTriggerという部分にチェックをつけてください。
こうすることによりプレイヤーの攻撃が敵に衝突してぶつかりあう
ことがなくなり、通り抜けることになります。
大体のゲームでは剣で敵オブジェクトを攻撃すると、
剣が敵を通り抜けますよね。それがIs Triggerで実装できます。
で、まだありまして次に当たり判定を行うには、Rigidbodyが
敵オブジェクトかプレイヤーの攻撃に当たるオブジェクト
どちらかに付いてる必要があります。
なので、この場合は敵オブジェクトあたりにつけて
おきましょう。
またRigidbodyをつけると、重力の影響を
受けるようになるので、Use Gravityの部分のチェックを
外しておきましょう。
ここまできたら当たり判定はOKなので、
次はコードを書いていきましょう。
当たり判定時に敵のHPを減らすコード
敵オブジェクトのAdd Componentからスクリプトを
貼り付けて、以下のようなコードを書きましょう。
説明していきますね。
まず最初のusing UnityEngine.UI;
ですが、これがないとHPとして使用してる、
スライダーをスクリプトで操作することができません。
なのでこれは忘れず書きましょう。
そして次に、
public Slider hpSlider;
ですが、
こちらはスライダーをスクリプトから操作するために
スライダーを前もって取得するようの変数です。
これを書くと敵オブジェクトのインスペクターの
スクリプトの場所に、変数と空欄が登場するので、
Canvas > SliderのSliderオブジェクトを、
そこの空欄に向かってドラッグアンドドロップし、
スライダーオブジェクトを取得しましょう。
これにより、スクリプトより、HPを操作出来るように
なります。
次に、
ですが、
これがいわゆる当たり判定時の処理でして、
これを書くと、プレイヤーの攻撃オブジェクトが
敵オブジェクトを通り抜けたときに、
HPが減らす処理を実行できます。
そしてこのif文のとこですが、これは敵オブジェクトを
すり抜けるオブジェクトが、プレイヤーの攻撃オブジェクト
だったらという限定をしています。
こうしないと、敵オブジェクトに対してどんなものが
あたったとしても、HPが減るようになってしまいます。
ゲーム的には、HPが減るのはプレイヤーからの攻撃に
限定したいので、if文の部分で、プレイヤーの攻撃に限定しましょう。
敵のHPを減らすのをプレイヤーの攻撃に限定する
またこの方法ではタグを使ってます。
タグはゲームオブジェクトのインスペクター上部にある、
Tagという部分があるので、
そこからAdd Tagというのをクリックし、
Tagsのとこにある+ボタンをクリックし、
playerAttackという名前をつけてsaveしましょう。
するとタグが追加されたので、プレイヤーの攻撃用オブジェクトの
インスペクターに戻り、tagをクリックし、先ほど追加した
playerAttackを選択しそのタグを設定しましょう。
こうすると、このタグがついたオブジェクトは敵のHPを
減らすことができるオブジェクトになります。
というわけで、以上をして、あとは再生ボタンを押して
ゲーム実行中モードにしてください。
そしてプレイヤーの攻撃用オブジェクトを操作し、
敵オブジェクトを通り抜けたときに、
ちゃんとHPが減っているかどうか確認しましょう。
これで減っていたら成功です。
まとめ
ということでまとめに入ります。
Unityで敵が攻撃されたらHPを減らすには、
- 当たり判定をつける
- 当たり判定があったらHPを減らす処理をする
をしましょう。
これにより敵のHPを減らすことが出来るようになります。
ということで、この記事は以上です。
それでは読んでいただき、ありがとうございました。
でわ。
チャーさん