Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 エディタースクリプティングでアセットを操作してみる

現在UE4.17のPreview 2が既にダウンロード可能となっています。

4.17もかなりの追加機能があり、まだその全容は掴めていません。今回は4.17で追加された、ブループリントを使ってエディタースクリプティングによる、アセット操作をやってみます。

エディタースクリプティングはブループリントやその他のスクリプト言語からUE4のエディター機能が呼び出せるようになる仕組みです。公式ではPythonによるサポートも追加される予定です。

以前にもBlutilityという機能を紹介したことがありますが、今回はそれを更に推し進めたもののように見えます。

unrealengine.hatenablog.com

新たに4.17ではブループリントに『Editor Scripting』というカテゴリーが追加されています。特にBlutilityクラスを作成し、その中で『Editor Scripting』のカテゴリーを検索すると、更にノードの数が増えます。

f:id:alwei:20170720161851p:plain


見ているだけで色々できそうです!

事前にBlutilityのアセットをダブルクリックするとイベントが実行されるようにしておきます。


f:id:alwei:20170720162843p:plain

それでは早速これらでどのようなことができるか見てみましょう。

アセットの作成とアセットのインポート


まずは簡単な例として、Asset Toolsと呼ばれるものを作ってアセットを作成してみます。以下のような具合にノードを組んでみました。


f:id:alwei:20170720162914p:plain

これを実行すると、フォルダーが作成されてスタティックメッシュが生成されました。


f:id:alwei:20170720162958p:plain

ただし、このスタティックメッシュは何もメッシュ情報が割り当てられていないため、開こうとするとエディターがクラッシュしてしまいます。現状の方法のまま使用するのはダメなようです。

ひとまずアセットの生成自体は上手くいっているのでよしとしましょう。

次はアセットのインポートを試してみます。


f:id:alwei:20170720171924p:plain

このノードを使うと呼び出した瞬間にダイアログが表示されてインポート処理が実行されます。"Destination Path"にインポートするパスを指定します。


f:id:alwei:20170720172050p:plain

今回はFBXをインポートしようとしてみました。これでそのままOKを押すと…


f:id:alwei:20170720172139p:plain

いつものようにインポートが完了し、スタティックメッシュとして認識されます。でもこれだけだとあまり意味はないですね。

他にも自動的にインポートを行う"Import Assets Automated"やアセットのエクスポートを行う"Export Assets"やアセットのリネームを行う"Rename Assets"が用意されていますが、いずれもなぜか純粋関数になっており、そのままでは呼び出すことが不可能です。


f:id:alwei:20170720172748p:plain

おそらくこの辺りのノードは公開されているけどまだ使用不可能な状態です。近い将来にきっと使えるようにはずです。

レベルの作成とアクターのレベル間移動とレベルの読み込み

エディタースクリプティングには新規レベルを作成する機能がありました。


f:id:alwei:20170720173848p:plain

これで新規レベルが作成され、選択中のアクターをその新規レベルに移動させるという機能です。ただし、4.17 Preview 2現在ではまだこれらの新規作成を行うだけで確実にクラッシュしてしまいます…

しかし間違いなく面白い機能なので、ちゃんと動くと強力そうです。

他にも"New Blank Map"で空のレベルを作成したり、"New Map from Template"でテンプレートから新しいレベルを作成するノードがありますが、こちらも漏れ無くクラッシュしてるのでまだ使えません…

更にレベルを開く機能もあります。


f:id:alwei:20170720174800p:plain

"Load Map with Dialog"ではダイアログを開き、そこからレベルを選択すると、そのマップを開きます。"Load Map"は指定したファイル名のマップを開きますが、やはりこれも開いた瞬間にクラッシュ…

レベル関係は総じてまだこれからといった感じですね。

ソースコントロール操作やファイルパス変換


ソースコントロールが操作できるようにいくつかのノードが追加されています。


f:id:alwei:20170720175714p:plain

指定したファイルをソースコントールに追加したり、チェックアウトができるようになります。更にファイルのコピーを行い、そのファイルをそのままソースコントロール下に追加することができます。

これ以外にもファイルパスを相対パスから絶対パスに変換するノードがあります。


f:id:alwei:20170720175943p:plain

こんな感じで指定してあげると…


f:id:alwei:20170720180011p:plain

プロジェクト相対パス絶対パスに変換されていることがわかります。"Package Filenames"と"Absolute Filenames"はどちらも絶対パスに変換するノードのようですが、細かい違いまではわかっていません。(そもそもFile NameとPackage Nameの違いは?)

まだこちらも実験的な機能だと思いますので、今後ノードが追加が追加される可能性は高いです。

アクターの操作やグループ化


次はアクターに対する操作です。操作といっても現状はほとんどアクターの状態をとれるノードがほとんど。唯一、"Set Is Temporarily Hidden in Editor"のノードはこのように組むことでエディター内で非表示モードの切り替えができます。


f:id:alwei:20170720182658p:plain

取得できるのは主に『選択しているか?』『編集しているか?』『エディター上で隠されているか』あたりの情報がメインです。

そして次はグループ化です。例えば以下のようにノードを組みます。


f:id:alwei:20170720183152p:plain

更にビューポート上で複数のアクターを選択して、Blutilityを実行すると…


f:id:alwei:20170720183304p:plain

アクターがグループ化されました。これでひとつのピボットで移動などの操作ができます。


f:id:alwei:20170720183449p:plain

他にグループをアクティブ化したり、グループを解除したり、グループをロックするなどの機能が一通りあります。大量のアクターを管理している時などは非常に便利ですね。

"Get All Actors Of Class"ノードなどを使って、特定クラスのアクターのみをグループ化したり、特定タグを持つものをグループ化したりもできるはずです。使い方次第でかなり便利そう。

マテリアルの操作

更にマテリアル関係の操作もあります。


f:id:alwei:20170720184003p:plain

これらはマテリアルの存在をチェックし、そのマテリアルが存在する場合には、Material Interfaceを取得します。存在しない場合にはエラー情報を取得できます。

それとは別に"Material Editing"カテゴリーには更にマテリアルを操作できるノードがあります。例えば以下のようにノードを組みます。マテリアルは予め空のものを作成しておきます。


f:id:alwei:20170720185554p:plain

そしてこれを実行すると…


f:id:alwei:20170720190311p:plain

マテリアル内に指定したマテリアルノードが作成されています。現状では"Connect Material Expressions"ノードを使うとピンとピンのワイヤー接続もできるようですが、この辺りの指定の名前がまだよくわからないので、使い方が曖昧です。

ただし、マテリアルのノード生成までをブループリントのノードから行えるというのは非常に大きい強みとなります。


f:id:alwei:20170720190805p:plain

他にもマテリアルインスタンスやマテリアル関数の更新やセット行うノードや、マテリアルインスタンス内のパラメーターの操作や取得、マテリアルノードの追加や削除、マテリアルのシェーダー再コンパイルなど実に様々なノードがあり紹介しきれません。

現状ではまだまだこれらは追加途中の機能という感じで、まだ実用は難しそうですが本格的に利用できるようになればブループリントだけでマテリアルワークフローの改善ができるようになりそうです。

まだまだ色々ある


UE4.17ではエディタースクリプティングだけではなく、アセットの中身を知る"Asset Data"、アセットの登録を行う"Asset Registry"、アセットの統合的管理を行う"Asset Manager"がそれぞれブループリントに追加されています。

これらは今までC++上から利用できていましたが、今後はブループリントからでも利用できるようになり、益々エディター内で作業を完結できるようになりそうです。

現状ではエディタースクリプティング共々、早期アクセスみたいなものなので、まだまだ実用は難しいかもしれませんが非常に楽しみな機能となってきました。