比較演算や論理演算を使った、複雑な条件分岐
初質問ありがとうございます! アイテムを取るごとに増えるint変数を作って、それと必要な個数を『>』とかで比較して、比較した結果の赤ピンをブランチノードにつなげる感じです。明日の記事でもう少し細かく #質問箱 #peing_unaunagi1 https://t.co/CmHCusOv4o pic.twitter.com/HLFx43mqVU
— うなうなぎ@ポリバケツ (@unaunagi1) 2017年12月12日
「今日は先日設置した質問箱に初めてきた質問に答えていくところから。厳密に言うと自分でテスト用に送ったやつがあるから、2通目になるんだけど」
妹「それは厳密にいって1通目だと思う」
「で、今回の質問。特定のアイテムを拾うと何かが動くようにする……という仕組みがまずあって、それを複数のアイテムを拾った時に変更したいという話。アイテムが1つの場合までは出来てるということで、たぶん条件分岐のところの話じゃないかと思う」
妹「ブランチノード?」
「そうなんだけど、ブランチノードそれ自体にはBoolean型しかつなげないから、オンかオフかぐらいしか判断できない、非常にシンプルなノード。RPGツクールとかだと、ブランチノード相当のやつに色々設定欄があって、数字の大小とかも出来る」
妹「ハイテクなのかな」
「そういう設計の方がわかりやすいけど、色々やろうとすると柔軟性に欠けるところがある。ブループリントのブランチは柔軟だけど、パッと見で何に使えるのかがわかりにくい」
「数字が大きいか小さいか、それとも同じか。比較する用のノードというのがある。普通のプログラミング言語だと、比較演算子(ひかくえんざんし)とか言うんだけど、UE4の場合は……なんて言うんだろう?」
妹「わたしも使ってはいるけど、何ていうか知らないやつだね」
manapedia.jp
※整数型の場合。型によってノードは違うし、同じ型同士じゃないと比較できない
※Booleanのように==と!=ぐらいしか使えない型もある
「個々の記号の読み方としてはこんな感じだけど、あまり口で言ったことはない気がする。内容の話する時は『○○が××以上の時に~』とかいうから。それはともかく、この数字を比べるノードをブランチノードと組み合わせることで、数字の大小のチェックというのができるようになる。アイテムの個数は整数だから、Int型が最適」
「アイテムの個数をitem_countという変数(仮)に記録しておいて、それが8以上の時にブランチノードを白いピンが通ると、Trueにつながってる方を実行するようになる。このTrueの方に列車を動かすやつを、Falseの方では何もしなければいいんじゃないかと」
妹「アイテム拾った時に、変数を1増やさないと駄目だよね」
「それも要るね。それやっとかないと、いつまでたってもアイテムを拾ったことにならないから」
「さっきのは同じアイテムを複数個拾った場合だけど、例えばいくつかの種類のアイテムを拾うという場合はこんな感じ。各アイテムを拾うと、対応する変数(Boolean型)をTrueにする。で、全部TrueだったらANDもTrueになるから、全部拾った時だけブランチの結果がTrueになる」
妹「これはちょっとむずかしいやつだね。なんとか……なんとかいうむずかしいやつ」
「論理演算。調べたら昔書いた記事があった。比較の結果は必ずBooleanになるから、それをさらに論理演算で組み合わせることが出来る。アイテムAが5つ、アイテムBが7つ、アイテムCが1つあればOKとか、そういった条件も作れる」
妹「ANDぐらいしか使ってない気がする」
「多分ANDが一番使う回数多くて、あと結果を逆にしたいところにNOTをはさんだり。『3つのアイテムのうち、どれか1つでも持ってる場合』だとORも使う」
「あとは、あんまりブランチが沢山ならんじゃう場合は、ブランチ使わない方がいいというか、この記事で紹介されてるSwitch(~をオンにする)とかSelect(選択する)を使った方が便利な場合もある」