UE4 マクロでワイルドカードを使って等価比較ノードを作る
今回は久し振りに軽めのネタです。
UE4のブループリントマクロではどんな型でも接続可能なワイルドカードピンというものを作成することができます。いわゆるプログラミング言語のジェネリクスと呼ばれるものに近いものではあるのですが、ブループリントのワイルドカードは制約も多く、一般的なジェネリクスのように作成することが難しいです。
等価比較というのは指定した2つの値が同じものかを調べることです。UE4でも等価比較ノードは沢山用意されており、以下のように型ごとに用意されています。(この他にも沢山)
マクロで作成しようとした際、ワイルドカードによって比較しようとしても結局は以下のように型が決められてしまうので、汎用的なノードを作ることができません。
そこで登場するのが配列用ノードです。配列用のノードは元からワイルドカードで指定できるようになっており、これを少し工夫することでなんと等価比較ができるようになります。それを実装したのが以下です。
片方側の要素でMake Arrayで配列を一度作成し、その配列からContainsノードで要素が存在するかをBooleanで受け取ります。これでどんな型にも対応できる等価比較ノードの出来上がりです。実際に使ってみると以下のような具合です。
全て同じノードであらゆる型のピンに対応が可能です。中身はそれぞれ同じ値を設定しているので結果も全てtrueになります。
ちょっとした工夫ですが、こういうハック的なことができるのはブループリントの面白いところかもしれません。非等価比較も条件を逆にすれば簡単に作成できますね。当然ながら内部で配列を作成する必要があるので、通常の等価比較よりも重たくなることは注意が必要です。
以上、ワイルドカードを使った簡単な等価比較ノードの作り方でした。