【UE4】プランナーがBlutilityで仕事を効率化してみた-その1-(Level編)

◯便利な機能ーBlutility


みなさんこんにちは
アンナプルナプランナーの吉田です。

 

【UE4】プランナーがBlutilityでジェネレータを作ってみた
でご紹介させてい頂いたBlutilityですが、
このBlutilityはプランナーが覚えることで、面倒くさい量産作業などを一瞬で終わらせる可能性を秘めています。
そんなBlutilityの可能性を引き出す活用方法を微力ながら書き記したいと思います。
※機能紹介はまた後日書く予定です。

◯作業を効率化

UE4を採用している現場でよくある作業で、大量のマップデータなどを作成、チェックをするというものがあります。
今回はそういった作業をプランナーができる範囲で、ブループリントのみで自動化し、時間短縮&ケアレスミスをなくせたらと思います。

前回も弊社ブログで紹介させていただきました、Blutility
このBlutilityを使って仕事を効率化させたいと思います。

例えば、
「仕様にあるマップのエクセルリストからPersistentLevel,SubLevelを新規で作成する
という作業をするとしましょう。
作業内容としては、

①各マップIDのPersistentLevelを作成し、さらに4つのSubLevelを作成。
②それぞれのレベルに共通で入れてほしいアクター(ControllerActor)を入れる。
③メインのPersistentLevelに入れたControllerActorのDetailにはMapIDを設定してほしい。
※つまり、ControllerActorは各PersistentLevelに共通で入れて欲しいアクターだけど、Detailは可変するということです。

というものです。

まあこれが10個程度なら仕組みを作るまでもないですが……

……え? 200個も……?
なんてことがもしかしたらあるかもしれません。(Unrealの使い方としてどうかと思いますが、例なので気にしないでください!!)
これを手作業でやったら、丁度1000個のLevelを作成することになります。
これだけの量を手作業でやると、入れるべきアクターが入ってなかったり、Detail設定時に誤った値を入れてしまったりなどのミスがあるかもしれませんね。
ここで救世主Blutilityの登場です。

まず、予め必要な情報を含んだマップリストをDT化しておきます。

こんな感じです。

次にBlutilityクラスを作成します。
作り方は前回のブログを参照ください。

中身はとりあえず以下のように書きます。

何やってるかわからん! という人もいると思うので、簡単に解説します。

まず、作ったデータテーブルの情報をデータテーブルの上から順にゲットします。

新規レベルを作成します。

作成したレベルに必要なアクターを入れます。

作成したレベルをデータテーブルにあるパスに保存します。

さらに、データテーブルから、必要なサブレベルの情報を取得し、レベルを作成・必要なアクターを入れ込みます。

終わったら、すべてのレベルをセーブします。

ザックリとこんな感じです。

これを実行すると……

ボタンを押してから約20分程度放置することですべての作業が完了しました! やったね!

機械的だから人為的ミスもないし、作業時間も手作業でやった場合
1ステージ作るのに1分かけたとして、200ステージあるから*200=200分…3時間20分

それに対し、Blutilityだと、動作確認含めて40分程度+実作業20分程度=1時間

2時間20分も時間短縮できました!

今回はLevel作成という1度やったら終わりの作業で紹介しましたが、
指定したリストやパス以下の全マップを開いて自動で中のアクターに何かの設定を行う、なども簡単に作ることが出来ます。
1度作ってしまえば、似た作業を何度も繰り返す必要なく、処理を少し変えるだけでより効果的な結果を出すことができるでしょう!

みなさんもUE4の便利な機能で仕事を効率化しましょう!!

◯+αでちょっと検証

上記のマップ作成の放置時間が約20分と記述していますが、連続でマップを作成していく(開く)と少しずつですがエディターの処理が少しずつですが
重くなっていくのを感じました。

そこでとりあえずどれぐらい重くなっていくのかを検証するものを作成しました。

それで図ってみると・・・

10個NewBlankMapを処理するごとに約1秒ずつ処理が遅くなっていました。
ちなみに、エディターを再起動すると処理速度も一番最初の時間に戻りました。

おそらくですが、開いたレベル情報はメモリーに残り続けているのかなと思います。(EngineSourceとか中はよくわからないので全く違うかもしれませんが)
作成したWorldObjectのPathを表示してみたところ、

Tempという階層にできているということと、新規レベルが作られるたびに、PackageNameの末尾の数字が増えている事がわかりました。
ですが、Explorer上でこれらを検索しても出てきませんでした。
現在開いているレベルじゃないUntitledレベルを参照しようとするとクラッシュしたので、中身は初期化なりされている感じでした。

まあこのあたりの改善は今後のバージョンアップで修正を期待するとしましょう!

以上となります。

※今回検証したUnrealのVersionは、4.19.2です