妹でもわかるUnrealEngine4

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

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

妹、HPいっぱいあるはずなのにすぐ死ぬ

妹「HP100ある敵に、10のダメージを与えると、死ぬ。 なぜだろう……数学的な見地から考えると、死なない気がするんだけど」

「ダメージが複数回入っちゃってるとか、もしくはHPがまだあるのに間違って消す処理をしてるとか、色々考えられる」

妹「どうすれば助かるのだ」

「まずHPがどうなってるのか確認しときましょう。HPが0以下になってたら一度ダメージくらいすぎだとわかる。なってなかったらHPの判定が間違ってるか、複数回ヒットした結果0以下になってるか」

妹「でもくらうと死んで消えちゃうから、HPもわからないんだけど……」

「敵を消す部分のノードの白い線を切ってもいいけど、ブレークポイントを入れてみましょうか」

docs.unrealengine.com

「パラメータの確認だけならエディタから見ればいいけど、ある一瞬を狙って一時停止とか難しいから、ある瞬間でピタリと止めたい時に使う機能。具体的にはブループリントのノードに設定する」

妹「これをダメージを食らった後のところにつければいいのか」

「それで実行するとどうなった?」

妹「HPがマイナス90になってる。こりゃかなり死んでるね」

「おかしいなあ。ダメージ量が多いのか、そのまえに別の理由でHPが減ってたのか。とりあえずダメージを減らす直前にもブレークポイントを入れてみて……」

妹「マイナス90、マイナス90…… あ! 謎は全てとけた」

「原因はなんだったの?」

妹「HPからダメージから引くんじゃなく、ダメージからHPを引いていたという」

「それは……-90になるね……」

妹「よく考えたら、引き算のノードは形がおかしい。縦に2つ並んでるけど、普通横に並べるものでしょ」

「それだと引数なのか戻り値なのかわかんなくなるし」

妹「ピンの間に記号を書くとか」

「ノードの形まで変えるのは無理だけど、引き算用のマクロなら作れるよ」

toofu0.hatenablog.com

C++の -=演算子 みたいなノードを作れる。こういう風にするとピンに名前が付けられるし、ついでにSETとGETが散らばってめんどくさいのも直る。参照を使ってるからどの変数にでも使える」

妹「でもやっぱり順番間違えたら結局同じなのでは?」

「それはまあ……。書く回数が多いならダメージを減らす専用の関数を作るって方法もある。引数ピンがダメージ量1つになるから、間違えようがない。でも1回2回の処理に関数作るのは大変かも」

妹「やっぱり間違えないように書くしかないのか。これもプログラムあるあるなの?」

「いや別にそんなことは……普通にプログラムする場合は左から、入力した順に並ぶわけだし。ブループリントあるあるにはなるかも」