敵を倒せる様になったので、今度はプレイヤーも倒されるようにした。
Sliderを使ったHPバーはシューティングゲームで作成した事があるので、今回はSprite Rendererを使った方法。
基本的な方法はSliderと同じ。Sprite Rendererはlocalscaleを変化させてバーの増減を表す。
作ってみた感じ、自分としては、Sprite Rendererの方が扱いやすく感じた。
さらに、今回は以前から実験をしようと残課題にしていた、Unity Actionを実装してみた。
HPバーの更新をUpdateメソッドから切り離すための実装である。
プレイヤー側のスクリプト(今回の話題に関係ない箇所は省略)
次にHPバー側のスクリプト
プレイヤー側のスクリプトにUnityActionでイベントOnUpdateHPメソッドを設定し、
そこにHPバー側から、SetPlayerHPBarメソッドを追加している。
プレイヤー側はHPに変化が発生した時点で、MAX HPに対する今のHPの割合(PlayerHPrate)を算出して、OnUpdateHPに渡している。
ここで、ちょっと忘れていたのが、int変数を使った割り算で、結果が少数を含む場合、その結果をそのままfloat型に格納すると、少数部分が切り捨てられるということ。
今回の場合、MAX HPに対する今のHPの割合は%なので、算定結果は必ず1以下になり、それをそのままfloat型変数に格納すると、格納された値は0になってしまう。
それを防ぐためには、int型をfloat型として明示させる必要がある。
これで、正しい%が格納される。
結果は、こんな感じ。ついにプレイヤーが倒される様になった。
今はその後の処理を作っていないので、倒された後も引き続き攻撃されるという、地獄絵図な様😅になっているので、これは明日以降修正しなくては🤣