どうも、チャーさんです。
この記事では、UnityでHPを回復させる方法を
お話しします。
ゲームでは基本プレイヤーが回復することが多い
のでプレイヤーのHPの回復方法を書きます。
なのでこの記事を読めば、あなたはUnityで
HPを回復させる機能を作れるようになります。
ですが、これを読まなければ、
どうやって作ろうか??と頭を悩ませることに
なるかもしれません。
そうなりたくなければ、このまま記事を読んで
ください。
動画はこちら
目次
UnityでHPを回復させる機能を作る方法
ということで、早速結論です。
UnityでHPを回復させる方法は
大きく分けて以下の4つをやりましょう。
- プレイヤーにHPバーを表示させる。
- 回復アイテムを用意する。
(RigidbodyとIsTrigger,Tagの設定も)
スクリプト内で
- HP用のスライダーの取得の記述
- 接触判定でHPの回復処理の記述
大きくこの4つをやればいいです。
ということでそれぞれ詳しく説明していきます。
プレイヤーにHPバーの表示
まずプレイヤーにHPバーを用意しよう、です。
当然ですが、HPを回復させるためにHPバーを
用意しましょう。
ということでまずはなんでもいいですが、
プレイヤーオブジェクトを用意してください。
cubeよりもcapsuleあたりがプレイヤーぽく
見えるのでオススメです。
でそれをシーンに表示したら、次はHPバーです。
HPバーの作り方は以前記事を書いたので、
以下の記事を参考にしながら、
あなたのUnity内でプレイヤーに見立てた
オブジェクトにHPを表示させてください。
HPを表示できたら、スライダーのvalueのところで
HP満タンじゃなく、真ん中ぐらいに設定しておきましょう。
またMax Valueは100にしておきましょう。
回復アイテムを用意しよう
で次に、回復アイテムを用意しよう。
ですが、回復アイテムと言っても簡単
なやつでいいです。
例えば、普通にcubeとかsphereとか、
そういうのを何個か用意して、シーンに配置
するだけでOKです。
以下の感じです。
(好みの問題ですがオブジェクトにマテリアルつけて
色とかつけると雰囲気でます。)
こんな感じで回復アイテム用意しましょう。
緑の丸い浮いてるやつが回復アイテムに
見立てたオブジェクトです。sphereオブジェクトです。
また回復アイテムオブジェクトには、
tag(タグ)を設定しましょう。
回復アイテムオブジェクトのインスペクタ上に
Tagという部分があるのでクリックして、
クリックしたら出る小さいウィンドウ内に
Add Tagというのがあるのでそこをクリックして、
recoverというタグ名で追加してください。
追加した後またTagの部分をクリックすると
さっき追加したrecoverが出てくるので、
それをクリックしてください。
するとオブジェクトにタグが設定されます。
これを回復アイテムオブジェクト全部にタグを
設定しておきましょう。
これやる理由ですが、接触判定で回復処理を
する場合、プレイヤーが床とか壁とか色々なものと
接触する可能性がある中で、
回復アイテムを見分ける必要があります。
それをTagを使えばこれは回復アイテムと見分ける
ことができ、回復専用の処理ができるのでつけておきましょう。
で、プレイヤーと回復アイテム用意したら、
次はプレイヤーオブジェクトと、
回復アイテムオブジェクトに、
Rigidbodyをつけましょう。
理由は接触判定で回復処理を行うので、
Rigidbodyがないと動きません。
ということで両方にRigidbodyつけましょう。
重力は消した方がやりやすいので、
Use Gravityのチェックは外しておきましょう。
またプレイヤーオブジェクトのcollider
コンポーネントのIsTriggerにチェックをつけて
おいてください。
そうしないと回復アイテムと衝突した挙動が
発生してしまうので微妙になります。
UnityでのプレイヤーHP回復用のスクリプト
でそれができたら次はスクリプトに回復処理を
書いていきましょう。
プレイヤーオブジェクトにスクリプトをつけて、
適当にクラス名をつけて
中身には以下の記述を書きましょう。
では記述の説明をします。
HPバー(スライダー)の取得
まず最初の
public Slider hpSlider;
ですが、スクリプトでHPバーにしてる
スライダーを操作するにはスライダーを取得
する必要があります。ということで変数宣言してます。
これを書くと、プレイヤーオブジェクトの
インスペクタ内に、hpSliderというスロットができます。
そこにプレイヤーの子要素にしてる
スライダーオブジェクトをドラッグアンド
ドロップして取得状態にしておきましょう。
補足ですがcanvasオブジェクトじゃなくて
canvasオブジェクト内にあるslider
オブジェクトです。
接触判定で回復の処理
で、
の部分ですが、ここが回復処理になってる部分です。
具体的には、接触判定をしてまして、
もしも回復アイテムオブジェクトにプレイヤーが
接触したら、
厳密には接触したオブジェクトがrecoverというタグ
を持っていたら、
(ここで回復アイテムオブジェクト用意した時の設定が
生きます。こうしないと床に接触するだけで回復します。)
HPバーとして使ってるスライダーのvalue
値ですね、これを+10するという記述に
なってます。つまりHPが回復するというわけです。
で回復した後Destroyというメソッド部分で、
接触した回復アイテムを消すという処理になってます。
回復アイテムに触れて回復したのに、
アイテムがずっと残ってるとよくないので。
という感じですね。
コードとしてはだいぶシンプルなので、
すぐに実践できるかと思います。
で、これができたら後はUnityの画面に戻って、
ゲーム再生ボタンを押して、
プレイヤーを動かして、回復アイテムに接触させましょう。
この時ちゃんとプレイヤーのHPバーが回復して
いたら、成功です。
うまくいきましたか?
うまくいってたらおめでとうございます。
うまくいかなかったら記事を読み返して
何か抜けてないか探してみてください。
まとめ
ということで、まとめです。
UnityでHPを回復させるには大まかに
以下の4つをやりましょう。
- プレイヤーにHPバーを表示させる。
- 回復アイテムを用意する。
(RigidbodyとIsTrigger,Tagの設定も)
スクリプト内で
- HP用のスライダーの取得の記述
- 接触判定でHPの回復処理の記述
そうすればUnityでHPを回復させる処理は
作れるので、ぜひやってみてください。
ということでまずは早速Unityを開き
プレイヤーをシーンに登場させるところから
始めましょう。
ということで、読んでいただきありがとうございました。
チャーさん