#はじめに
自分は普段、コンシューマーゲームの開発会社にて、UE4を使用したプロジェクトに背景アーティストとして携わっています。
実際のゲーム内に組み込まれるようなプログラムを書くことはほとんど無いのですが、UE4にはエディタースクリプティングなるものが用意されており、その導入のし易さから様々な業務を自動化しています。
今回はその中から、お気に入りのスクリプトを幾つか抜粋し紹介させていただきます。
本記事では具体的なコードの書き方やテクニックの紹介をしません。
実装方法よりも実装内容を重視し記載していきます。
未経験者には「こんなことができるのか~」と、
経験者には「こんな需要があるのか~」と、
そんな感じでアレしてもらえたら幸いです。
##BlueprintとPythonの使い分け
この記事を書いている現在(UE4.23)、UE4のエディタースクリプティングは、BlueprintとPythonの2種類の方法が用意されています。
用意されている処理の内容にはほとんど違いを見つけられませんでしたが、
それぞれ、得意なことが微妙に異なります。
今回紹介するスクリプトがどのような判断基準で使い分けられているのか、以下にそれぞれの利点を紹介します。
**Blueprint**が得意なこと
-
手早くそこそこのクオリティのGUIが作れる
-
アセットを変数にアサインする際に検索ボックスが用意されているなど、基本機能が充実している
-
機能の検索をし易い
**Python**が得意なこと
#実際に作成したスクリプトの紹介
##アセットを一定間隔で配置するやつ(Blueprint)
作ったアセットを一望できるレベルが欲しいという要望があり作成しました。
アセットの大きさに応じて配置順や間隔を変える処理を入れました。
**機能紹介**
- TargetClasses:このスクリプトで配置するクラスを指定します
- StartLocation:この位置からY方向に、小さい順で配置していきます
- ConstDistance:必ずConstDistance分は距離を離してくださいね。という値です
- MaxExtentY:ここで指定した幅まで達したらX方向に改行します
##特定の値のパラメーターを持つマテリアルインスタンスをログに出すやつ(Blueprint)
- 意図しないテクスチャのアサインが無いか?
- スペキュラの値が大きすぎるものが無いか?
- 使用していないパラメータは無いか?
など、マテリアルインスタンスの使用状況を調査するときに使用しました。
**機能紹介**(テクスチャを調べるとき用)
- ParameterName:調べたいパラメーター名を入力します
- InputTexutre:ここでアサインされたテクスチャと合致した場合にログに出力します
- UseListMode:Trueの場合、合致の判定は行わず、対象の全マテリアルインスタンスのテクスチャをログに出力します
**機能紹介**(スカラー値を調べるとき用)
「12個のサブレベルを6種類作る」みたいな業務があったとき作成しました。
##パラメーターコレクションの値をプリセット管理するやつ(Python)
マテリアルパラメーターコレクション内で値の調整をする業務の際、プリセット保存できれば試行錯誤できて便利だなあ、ということを思い、Pysideで作成しました。
**機能紹介**
- Select MPC:コンテントブラウザ上で選択したMPCを登録します。リストにはMPCに対応した登録済のプリセットが表示されます
- Import Preset:リスト内で選択したプリセットの値を登録したMPCに入力します
- Export Preset:"New Preset Name"に入力した名前で新規プリセットを作成します
プリセットはCSVファイルで作成していますが、外部ファイルを扱い易いのはPythonの強みです。
##検証用にマテリアルを複製して全部差し替えてくれるやつ(Python)
現行のレベルデータに影響を与えずに、マテリアルの機能を追加するような検証を行いたい場合
1. レベルデータ複製
2. レベル内で使われているマテリアルと親マテリアルを複製
3. 複製マテリアルの親を検証用ベースマテリアルに差し替え
4. レベル内のメッシュコンポーネントに複製マテリアルをオーバーライド
という手順が必要です。
手作業で行うのは厳しいので、これらを一括で行うスクリプトを作りました。
自分の業務の都合上、思ったよりも使用する機会が多く、作った中では最も費用対効果の高いスクリプトとなりました。
このように大量のデータを扱う処理はPython向きです。
##その他
- テクスチャアセットに対し、テクスチャグループやCompressionSettingを一括設定するやつ(Blueprint)
- ドキュメント記載用に、全アセットのリストを作成するやつ(Python)
- マテリアルインスタンスの親を差し替える際、既にオーバーライドしていた値を別名のパラメーターに引き継がせるやつ(Python)
など、細かいものを上げれば他にも様々なスクリプトを作成しています。
##まとめ
今回紹介したスクリプトは全てローカルで完結しており、且つROMには直接組み込まれないものばかりです。
自己の作業で完結しているため、エディタースクリプトは他のプログラム業務と比べ、実験をし易く、プログラムの精度も(比較的)求められません。
プログラムに興味があるけれどハードルが高い、と感じられている非プログラマーの方がいらっしゃったら、是非エディタースクリプティングの導入をオススメします。
##エディタースクリプティング入門にオススメの記事
下記の記事は初心者に易しく、段階的に、且つ凄く丁寧に記載されています。自分も学習の際には活用させていただきました!
- [UE4]エディタ上で動作するツール・エディタ拡張をUMGで簡単に作れる Editor Utility Widget について
- 【UE4】Pythonつかって、MaterialInstanceアセットのパラメーターとかいじってみた