わりと扱いが特殊な Wildcard についてです
発端 #
GetAllActorOfClassを先にForEachに繋いでからClassを選択するのと、先にClassを指定してからForEachに繋ぐ場合でWildcardの動作が違います(前者はActor、後者は指定したClassとして扱われる)
— 墨崎達哉 (@T_Sumisaki) September 3, 2021
なおWildcardを正しくしたい場合は繋がっているものを一度切る必要があります #UE4Study https://t.co/gm0KRBtJ15
解説 #
Blueprint の Macro には、Wildcard
という特殊な型が存在します
一番良く使う場所にあるのが、 ForEachLoop
の Array と ArrayElement ですね
この Wildcard、一番最初に接続したものの型になる、という性質を持っています
ForEachLoop ではこれを利用して、Object の配列をループ処理することが多いですね
で、注意点なのですが…
一番最初に接続したものの型になる という性質、これに気をつけておかないと、見た目が同じなのに動作が違う処理が発生してしまいます
例えば、以下の 2 つはノード構成は同じですが、結果が全く違います
GetAllActorsOfClass
の出力を ForEachLoop
の Array に繋いでから Class を指定した場合
GetAllActorsOfClass
の Class を指定してから、 ForEachLoop
の Array に繋ぐ場合
Actor 扱いになってしまうと再度 Cast する、というもったいない状況が発生しますね
こうなると一度 Wildcard の接続を切らないと直りません
あとから型を切り替える際も注意しておく必要があります