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

妹でもわかるUnrealEngine4

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

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

数字の範囲ごとに分岐させる

ブループリント アルゴリズム

妹「点数に応じてランク表示みたいなのをしたい。10万点以上なら上級者ですみたいな。とりあえず5種類ぐらい。ブランチノードをいっぱいつなげば出来るとは思うんだけど、なんかもっと良い方法ありそうな気がするんだけど」

「それはC++だとSwitchで書けるんだけど、ブループリントだとそこまで簡単には書けないかも。ブループリントのSwitchノード、日本語だと"数字をオンにする"ノードだけど、これってSelectノードと同じで0から1づつ増やす連番のピンだから、そういう範囲指定が出来る仕組みになってない」

妹「そこをなんとかしてブループリントで書くのだ」

「全部まとめてやるとかえって混乱するから、数字の範囲ごとに0から始まる連番に直す処理と、その数字を元に分岐させる処理と、2つに分けて考えるのがいいと思う」

f:id:una_unagi:20150928025618p:plain

「まず最初に前半部分、0から始まる連番に直す。ランクの境界になる点数を入れた配列を作って、それをループで上から順に調べていく。配列0番の数字を超えたらそのまま0を返す。駄目だったら次に1番の数字を調べて、超えてたら0と1の間ということで1を返す。1番も駄目だったら2番と配列の最後までやる。これは関数じゃなくてもいいけど、その場合は配列の最初の方で引っかかった場合にReturnで強制終了出来ないから、代わりにBreakとかを使って書く。数字を小さい順に並べて、条件分岐とか書きかえれば最低ランクを0にも出来る。そのへんは好みで」

妹「そこそこ複雑なしくみだなあ。それで、これが出来たらその後は?」

「後半の、前半で作った数字を元に分岐させる処理だけど、これはSelectとかSwitchか使えば問題ないと思う。というかそれが出来るように0からの連番に直しといたというか」

妹「一発で解決してくれる親切なノードとかはないのか……」

「見た感じではなさそうだった。例えば今回の関数を入力ピンで数字配列を受け取るようにすると、色んなところで使える関数にはなるから、そういうので対処するしかなさそう」