さらに発展させます。
今度は「テクスチャ」「スタティックメッシュ」「マテリアル」「マテリアルインスタンス」の4種類のアセットにプレフィックスを与えるリネームに対応してみましょう。
BP を複製して編集
「BP_RenameSM」を複製して「BP_RenameAllType」とでも名付けます。
GetSupportedClass 関数でスタティックメッシュを選択している時だけ BP がメニューに表示されるようにしている場合は、関数を削除しておきます。
RenameSM 関数の名前も変えておきます。
処理の大まかな流れ
ここからの構成は色々な方法があると思いますが、ここでは筆者がまずは試した方法での解説になります。考え方としては以下のような流れになります。
- コンテンツブラウザで選択したアセットを取得して 📓 For Each Loop で回す
↓ - アセットのクラスを取得
↓ - 📓 Branch でテクスチャかどうか判定
・True ならテクスチャ用のリネーム処理
・False なら何も処理せず次へ
↓ - 📓 Branch でスタティックメッシュかどうか判定
・True ならスタティックメッシュ用のリネーム処理
・False なら何も処理せず次へ
↓ - 📓 Branch でマテリアルかどうか判定
・True ならマテリアル用のリネーム処理
・False なら何も処理せず次へ
↓ - 📓 Branch でマテリアルインスタンスかどうか判定
・True ならマテリアルインスタンス用のリネーム処理
・False なら何も処理せず終了
工夫する点
さて、大まかな流れは以上になりますが、リネーム処理が4回登場するので、リネーム用に別の関数に構成を移して使い回すのが良さそうです。
また、4つのプレフィックスをユーザーが編集しやすいよう「列挙体(Enumeration)」のアセットで管理して、それを BP で利用する形にしてみました。
列挙体の作成
コンテンツブラウザで「Enumeration」を作成します。
「Enum_Rename」と名付けました。
※ ネーミングとしては Enum_Prefix とか Enum_PrefixOfAssets の方が良いですね‥
要素を4つ追加して図のように入力します。各要素やこの列挙体自体の説明文も書いておきましょう。Display Name だけでは何のアセットのプレフィックスか分からなくなります。
列挙体の使用準備
BP に戻り「📋 VARIABLES(変数)」を追加します。
Details パネルで型を先ほど用意した列挙体「Enum_Rename」を選択します。
変数名も「PrefixByEnum」と名付けました。
条件分岐
📓 For Each Loop 以降の処理を組んでいきます。まずはアセットのクラスを取得して、指定したクラス(ここではテクスチャ)と一致するか判定し 📓 Branch で処理を分岐させるように組みます。
リネーム処理の関数化
元々のスタティックメッシュ専用のリネーム処理をそのまま流用すると図のような構成になりますが、この構成を4つも並べると見辛いですしメンテナンス性も悪いので関数化します。
新しく関数を追加して「Rename」と名付けます。
この処理自体はエディタから呼び出す必要が無い(BP 内でしか利用しない)ので Call In Editor は無効にしておきます。
リネーム部分の構成を「Rename」関数のグラフ内にカット&ペーストで持ち込みます。
処理の際には対象オブジェクトとプレフィックスが条件によって変わるので、Rename 関数が「対象オブジェクト」と「プレフィックスに利用する文字列」を受け取れるようにします。
「Rename」関数を選んで 📰 Details パネルの 📋 INPUTS に新しく入力を2つ追加します。
- 名前:Asset 型:Object
- 名前:Prefix 型:String
Rename 関数の入力から情報を得るように構成を差し替えます。
Rename 関数の利用
大本の Rename All Type 関数内に戻って、📘 Rename 関数をドラッグ&ドロップで追加します。
同様に変数「PrefixByEnum」をドラッグ&ドロップして「Set PrefixByEnum」を追加します。
📓 Branch と 📘 Rename 関数の間に繋いで「T_」が選択されていることを確認します。
「T_」を 📘 Rename 関数の Prefix に繋ぎます。列挙体の内容を文字列に変換してくれるノード(Enum to String)が自動で挟まれます。これでリネームに「T_」が利用されます。
次に 📓 For Each Loop から選択中のアセットを 📘 Rename 関数に渡してあげます。
しかし繋いだ線が画複数のノードの裏に走って視認性が悪いので、線をダブルクリックして Reroute ノードを作成して見やすくします。
これで、選択中のアセットがテクスチャだった際のリネーム処理は完成しました。
4つ全てのアセットの処理を追加
後はテクスチャの構成を複製して図のように繋げれば全ての処理が完成です。処理するアセットがテクスチャではない場合、最初の 📓 Branch は False を返し、次の 📓 Branch でスタティックメッシュかどうか判定する‥という流れになっています。
「アセットのクラスを調べる」で解説したように、テクスチャとマテリアルインスタンスのクラスの指定にはご注意ください。
BP の実行
実行するためのアセットを適当なフォルダ内に用意します。
実行して正常に動作することが確認できました。
これでリネームシリーズは終了です。