現在UE4.17のPreview 2が既にダウンロード可能となっています。
4.17もかなりの追加機能があり、まだその全容は掴めていません。今回は4.17で追加された、ブループリントを使ってエディタースクリプティングによる、アセット操作をやってみます。
エディタースクリプティングはブループリントやその他のスクリプト言語からUE4のエディター機能が呼び出せるようになる仕組みです。公式ではPythonによるサポートも追加される予定です。
以前にもBlutilityという機能を紹介したことがありますが、今回はそれを更に推し進めたもののように見えます。
新たに4.17ではブループリントに『Editor Scripting』というカテゴリーが追加されています。特にBlutilityクラスを作成し、その中で『Editor Scripting』のカテゴリーを検索すると、更にノードの数が増えます。
見ているだけで色々できそうです!
事前にBlutilityのアセットをダブルクリックするとイベントが実行されるようにしておきます。
それでは早速これらでどのようなことができるか見てみましょう。
アセットの作成とアセットのインポート
まずは簡単な例として、Asset Toolsと呼ばれるものを作ってアセットを作成してみます。以下のような具合にノードを組んでみました。
これを実行すると、フォルダーが作成されてスタティックメッシュが生成されました。
ただし、このスタティックメッシュは何もメッシュ情報が割り当てられていないため、開こうとするとエディターがクラッシュしてしまいます。現状の方法のまま使用するのはダメなようです。
ひとまずアセットの生成自体は上手くいっているのでよしとしましょう。
次はアセットのインポートを試してみます。
このノードを使うと呼び出した瞬間にダイアログが表示されてインポート処理が実行されます。"Destination Path"にインポートするパスを指定します。
今回はFBXをインポートしようとしてみました。これでそのままOKを押すと…
いつものようにインポートが完了し、スタティックメッシュとして認識されます。でもこれだけだとあまり意味はないですね。
他にも自動的にインポートを行う"Import Assets Automated"やアセットのエクスポートを行う"Export Assets"やアセットのリネームを行う"Rename Assets"が用意されていますが、いずれもなぜか純粋関数になっており、そのままでは呼び出すことが不可能です。
おそらくこの辺りのノードは公開されているけどまだ使用不可能な状態です。近い将来にきっと使えるようにはずです。
レベルの作成とアクターのレベル間移動とレベルの読み込み
エディタースクリプティングには新規レベルを作成する機能がありました。
これで新規レベルが作成され、選択中のアクターをその新規レベルに移動させるという機能です。ただし、4.17 Preview 2現在ではまだこれらの新規作成を行うだけで確実にクラッシュしてしまいます…
しかし間違いなく面白い機能なので、ちゃんと動くと強力そうです。
他にも"New Blank Map"で空のレベルを作成したり、"New Map from Template"でテンプレートから新しいレベルを作成するノードがありますが、こちらも漏れ無くクラッシュしてるのでまだ使えません…
更にレベルを開く機能もあります。
"Load Map with Dialog"ではダイアログを開き、そこからレベルを選択すると、そのマップを開きます。"Load Map"は指定したファイル名のマップを開きますが、やはりこれも開いた瞬間にクラッシュ…
レベル関係は総じてまだこれからといった感じですね。
ソースコントロール操作やファイルパス変換
ソースコントロールが操作できるようにいくつかのノードが追加されています。
指定したファイルをソースコントールに追加したり、チェックアウトができるようになります。更にファイルのコピーを行い、そのファイルをそのままソースコントロール下に追加することができます。
これ以外にもファイルパスを相対パスから絶対パスに変換するノードがあります。
こんな感じで指定してあげると…
プロジェクト相対パスが絶対パスに変換されていることがわかります。"Package Filenames"と"Absolute Filenames"はどちらも絶対パスに変換するノードのようですが、細かい違いまではわかっていません。(そもそもFile NameとPackage Nameの違いは?)
まだこちらも実験的な機能だと思いますので、今後ノードが追加が追加される可能性は高いです。
アクターの操作やグループ化
次はアクターに対する操作です。操作といっても現状はほとんどアクターの状態をとれるノードがほとんど。唯一、"Set Is Temporarily Hidden in Editor"のノードはこのように組むことでエディター内で非表示モードの切り替えができます。
取得できるのは主に『選択しているか?』『編集しているか?』『エディター上で隠されているか』あたりの情報がメインです。
そして次はグループ化です。例えば以下のようにノードを組みます。
更にビューポート上で複数のアクターを選択して、Blutilityを実行すると…
アクターがグループ化されました。これでひとつのピボットで移動などの操作ができます。
他にグループをアクティブ化したり、グループを解除したり、グループをロックするなどの機能が一通りあります。大量のアクターを管理している時などは非常に便利ですね。
"Get All Actors Of Class"ノードなどを使って、特定クラスのアクターのみをグループ化したり、特定タグを持つものをグループ化したりもできるはずです。使い方次第でかなり便利そう。
マテリアルの操作
更にマテリアル関係の操作もあります。
これらはマテリアルの存在をチェックし、そのマテリアルが存在する場合には、Material Interfaceを取得します。存在しない場合にはエラー情報を取得できます。
それとは別に"Material Editing"カテゴリーには更にマテリアルを操作できるノードがあります。例えば以下のようにノードを組みます。マテリアルは予め空のものを作成しておきます。
そしてこれを実行すると…
マテリアル内に指定したマテリアルノードが作成されています。現状では"Connect Material Expressions"ノードを使うとピンとピンのワイヤー接続もできるようですが、この辺りの指定の名前がまだよくわからないので、使い方が曖昧です。
ただし、マテリアルのノード生成までをブループリントのノードから行えるというのは非常に大きい強みとなります。
他にもマテリアルインスタンスやマテリアル関数の更新やセット行うノードや、マテリアルインスタンス内のパラメーターの操作や取得、マテリアルノードの追加や削除、マテリアルのシェーダー再コンパイルなど実に様々なノードがあり紹介しきれません。
現状ではまだまだこれらは追加途中の機能という感じで、まだ実用は難しそうですが本格的に利用できるようになればブループリントだけでマテリアルワークフローの改善ができるようになりそうです。