今回は、Unityちゃんがスライムに衝突した際のダメージを受ける処理を実装します。
また、ダメージを受けた際のアニメーションも追加したいと思います。
Unityちゃんが攻撃を受けた処理を実装する
HPの表示方法について
まずは、体力の表示について考えます。パターンとしてはゲージ型だったり、ドラクエのように数字で表示したりさまざまな方法がありますが、今回は以前使っていたフルーツのアセット「りんご」を使って体力を表現したいと思います。
このように、左上にりんごを3個配置しました。要するに、3回敵に当たるとゲームオーバーという訳ですね。
配置方法は特に難しいこともありません。りんごの透過png画像を用意して、Canvas上でImageを作って配置するだけですね。ただ、それぞれ違う名前にしておいてください。
この後作成するスクリプト上で攻撃を受ける度に各りんごを非表示にするためですね。
攻撃を受けた時のアニメーションを設定する
Unityちゃんにセットしているアニメーションコントローラーを開きます。
「Create State」→「Empty」で「Damage」を作ります。
次に、画像のようにアニメーションの行き来を設定します。各インスペクターから「Has Exit Time」のチェックを外しておきます。
パラメーターからbool型で「Damage」を作成し、各Conditionsの設定を行います。IdleからDamageの矢印なら「Damage」を「true」にする感じで。
「Damage」を選択して、ダメージを受けたときにふさわしいモーションを探しましょう。
「Damaged@loop」がかなりしっくり来たのでこれを使う事にしました。
Unityちゃんにアタッチしているプレイヤースクリプトを修正する
過去に作成していたフルーツキャッチのソースコードが残っていたので、その整理も行いました。
スライムに当たっときの処理はOnCollisionStayを使っています。オブジェクト同士が衝突し続けている時に役に立ちます。
スライムにタグを付けておいて、スライムと衝突したらdamageフラグを「1」にして、アニメーションのステートを「DAMAGE」に変更します。
スライムと衝突し続けている場合はDamageアニメーションを再生し続けるわけですね。
スライムから離れたらOnCollisionExitを使ってdamageフラグを「0」に戻します。
HPとなるりんごを非表示にする処理はコルーチンを使って行いました。
ライフカウントを用意しておき、while文でチェックして、右のりんごから非表示にしていきます。
yield return new WaitForSeconds(1.4f)としているのは、Unityちゃんが放置状態でスライムが衝突し続けている際に、モーションとりんごの非表示を連動させるためです。
1.4秒ぐらいが丁度いい感じなんですよね。
そして、スライムから離れたらコルーチンを強制終了させます。
現状りんごの数は3個ですが、回復アイテムを用意したり、ゼルダのように母数を増やすなど、今後の課題になりそうです。