読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

体力をハートマークで表示する・その3

2Dゲーム ウィジェット ブループリント

妹「もしゼルダみたいにハートが1/4ずつ減らせるようにしようとしたらどうなるの? HPを0.25ずつ減らすの?」

「そうじゃなくて、HPの計算を4倍にする。最大HPと、くらうダメージと。10段階あるんだったら同じように10倍する。とにかく1が最小の単位になるように調節する。ステータスとかで数字を出す時は小数にしてもいいんだけど、内部データとしては整数が良い。HPとかだと計算誤差が文字通りに命取りになることがあるから」

妹「今HPはFloatになってるんだけど……」

「そうなの? 整数の足し算と引き算しかしてないんだったら、誤差は出ないから問題はないと思うけど。ともかく1が最小単位と決まれば、ハート1個減るレベルの攻撃では4を引くとか、そうやって調整することで計算上の問題はなくなる」

妹「表示の仕組みは? 同じように比較したらハート表示されすぎになるし、4で割っても端っこの1つの表示が変になるような」

「やり方は色々あると思うんだけど、取り合えず計算用のHPを用意する方法で作ってみた。ハートが欠けてる絵は用意してないから、代わりにウィジェットにテキストを追加して、欠けてる時は1/4とか上に出てくるようにした」

f:id:una_unagi:20151107222352p:plain
f:id:una_unagi:20151107222409p:plain

「計算用HPは、ループの前に現在HPを入れておいて、ハートを1つ進めていくたびに4ずつ減らしていく。そうすると欠けてる部分のハートのとこまでに来ると1とか2とかの端数が出るから、その時に欠けた用に表示すればいい。最後まで0と4以上しか無ければ欠けてないってこと。ArrayIndex*4から現在HPを引いて、差が1~3の間よりなら欠けてると判断してものいいけど、式が違うだけでやることは同じことだね」

妹「たいぶ複雑になったような」

「計算用HPを追加してあるのと、欠けた時用のラベル表示のノードが増えてるだけだよ。ラベル表示のとこを絵と差し替えるなら、SelectでじゃなくてSwitchにして、数字に応じて別の絵が出るようにすればいい」