【UE4】プランナーがBlutilityでジェネレータを作ってみた

今回はUE4の機能、Blutilityについて紹介します。

Blutilityを使うと、エディタ上からカスタムイベントや関数を実行できるようになります。
と…これだけではピンとこないかもしれませんので
先に動画をご覧ください。

このようにボタンを連打するだけで関数が実行され、木がランダムに生成されます。
それでは、どのようにこれを実現していくか説明していきます。

なお、今回のブログはプログラム未経験のプランナーが書いています。
今回UE4を使用し、for文等を用いることでプログラム未経験でも少し技術的な実装を行うことができました。

■手順
①今回は無料で利用できる「Infinity Blade:Grass Lands」を使用します。
Epic Games Launcherから検索し、インストールしておきます。

②UE4を立ち上げます。今回はUE4.18、TPSテンプレを使用します。

③まず、Blutilityはデフォルトではオフになっている為、Editor Preferencesから「Editor Utility Blueprints(Blutility)」にチェックを入れましょう。

④次に「Add New」からBlueprints⇒Blutilityと選択します。

⑤小ウィンドウが開くので、「GlobalEditorUtilityBase」を選択します。

⑥「NewEditorUtilityBlueprint」がコンテンツブラウザ上に作成されるので、
右クリックし、「Edit Blueprint」を選択します。

⑦練習用に適当な関数を作ってみましょう。今回は「Print」にしました。

⑧一旦Blueprintウィンドウを閉じ、「NewEditorUtilityBlueprint」をダブルクリックします。
すると、Blutility用のウィンドウが立ち上がるのでそこにある「Print」ボタンを押してみます。

⑨画面に「Hello」と表示されました。

このように、Blutilityはプレイインすることなく関数やカスタムイベントを実行することができ
エディターに簡単な拡張が行なえます。
というわけで、次に先程の動画のように草を生やしていく手順を書いていきます。


①まずは木や草のBPを作成します。
先程インストールした「Infinity Blade:Grass Lands」をプロジェクトに追加し
「Infinity Blade:Grass Lands」内にあるStatic Mesh
「SM Cherry Tree」「SM GroundCover_Leafy01」をBP化しましょう。

②次に、先程の「NewEditorUtilityBlueprint」を選択し、再び「Edit Blueprint」を選びます。
下記のように組んでみます。(画像クリックで拡大)
現在のワールドアウトライナー上で選択中のバウンディングボックス範囲を取得し、その範囲内でランダムにActorをSpawnさせています。

③メインウィンドウに戻り、「Modes」からTrigger Volumeをドラッグアンドドロップし、少し大きめに広げてみます。
その上で、Blutilityウィンドウから「Random Spawn」を押下してみましょう。

④うまくいけば、このようにプレイヤーキャラの周りに草が生えまくっていきます。
(※もし地面の下に生えてしまうようであれば、地面アセットのLocationのZ軸を0まで下げて調整しましょう)

同様に、木のBPに対しても同じ処理を書けば
あっという間に草木まみれにできます。

「InfinityBlade:Adversaries」のアセットを使用してみることで…


ランダムに生成された動物達のランダムに生成された森が作られます。

もう少し拡張してみます。
・最小値と最大値を指定した上でBlutilityを実行
・最小値と最大値の範囲でランダムな数の木が生成される
・以後押す度に生成し直される
上記のようにしてみます。その結果が下の動画になります。
このようにすることで、ジェネレーター的な使い方もできそうです。

実用的にするにはもう少し拡張が必要になるかとは思いますが、
使い方次第では作業の効率化に繋がりそうですね。
例えばオープンワールドのゲーム作りでは膨大なアセット量が必要になるかと思いますが
賑やかしとしての背景の設置はBlutilityで効率化ができるかもしれません。

そして何より、細かなクオリティよりスピード感を重視する開発段階で威力を発揮する可能性があります。

以上になります。

【UE4】プランナーがBlutilityでジェネレータを作ってみた” に対して1件のコメントがあります。

コメントは受け付けていません。