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