Blog

[UE4]任意のメッシュに切り替えられるBPを作ろう

執筆: KY

はじめに

はじめまして。普段3D背景デザイナーとして勤めているKYと申します。

最近UE4のブループリント(BP)に興味があり勉強していますので

よく使うBPの設計を紹介させていただきます。

基礎的な作りですので、UE4でBP初心者の方にも優しい内容となっております。

ファイルを用意しよう

・Unreal Engine 4.27.2

・いくつかのFBXアセット

今回は例として「Cone(円錐)」「Cube(立方体)」「 Sphere(球)」の3つのメッシュを用意しました。

一旦以下のような命名を付けました。

今回作成するBP

『レベル内で配置するメッシュを切り替えて選ぶことができるBP』

を目指して作成していきたいかと思います。

プロジェクトの作成(準備)

まず「ゲーム」のカテゴリーのプロジェクトを選択し、次へ。

「Blank」のテンプレートを選択し、次へ。

任意の保存先を決めてプロジェクトを作成します。

用意しておいた配置したいメッシュ3つのFBXをUE4にインポートしましょう。マテリアルでそれぞれ色を変えておくと見やすいです。

Control+Nで「Default」の新規レベルを作ります。

何も置かれてないレベルが生まれました。

コンテンツブラウザに「BP」のフォルダを作り、この中にBPを作っていきましょう。

ブループリントの作成

右クリックでブループリントクラスを作成し

右クリックでブループリントクラスを作成し、「アクター」の親クラスを選択しましょう。(クラスというのは平たく言うと、様々な変数や関数やイベントが入っている親みたいなものです。)

任意の名前をつけてダブルクリックで開いてみましょう。(例:BP_SelectMesh_01_A)

なにやら、ややこしそうなウィンドウが出てきました。

今回は「イベントグラフ」ではなく、「Construction Script」を選択しましょう。

「Construction Script」はレベル内でゲームを実行(プレイ)していない時でもエディタで処理が走ってくれるというものです。非実行時、BP動かしたり値を変えたりするたびに処理が走ります。

左上のコンポーネントを追加の中から「StaticMesh(StaticMeshComponent)」というコンポーネントを追加しましょう。このStaticMeshコンポーネントはまだメッシュやマテリアルなど中身が入っていない状態となります。
この空のコンポーネントに、FBX達を取得するようブループリントを構築していきましょう。

配列の作成

インポートしてきたFBX達を並べる「配列」を作りましょう。

左下の変数の右にある「+」マークをクリックして「変数」を追加します。

「変数」というのは、簡単に言えば「値を入れておく箱」です。

右側の詳細タブに

「変数の箱に入れる値の種類」を決めます。

詳細の「変数の型」を「Static Mesh」と検索し、「オブジェクト参考」を選択します。

変数の型の道の右のコンテナ型を「ー」(単一の変数)マークから、格子状の「田」みたいなマーク(配列)にしましょう。
「値を入れておく箱の種類」が変わったようなものです。

任意の変数名をつけてあげましょう(例:Mesh Set)

一旦ここで左上のコンパイルを押してあげましょう。

配列をにメッシュを登録

先程作成した「Mesh Set」の変数を選択すると「配列エレメント」という項目がありますので「+」でインポートしたFBXの種類分のエレメントを追加しましょう。

空の3つのエレメントが出来ましたのでFBXをドラッグアンドドロップで追加していきましょう。

「0」番目に「SM_Cone_01_A」

「1」番目に「SM_Cube_01_A」

「2」番目に「SM_Sphere_01_A」

という順番で登録しました。

配列をブループリントに配置

「Mesh Set」変数をブループリントに置いてみましょう。

「Construction Script」の下辺りにドラッグアンドドロップで「Get Mesh set」として配置しましょう。

Mesh Setの横にある格子状のマークを左クリックし、ピンを伸ばして離すとそのノードに対応した様々なアクションが選べます。

たくさんありますが検索項目で「get(コピー)を取得」の関数ノードを選択しましょう。

「GET」関数のノードが現れました。これは配列に入っているメッシュを格納してくれるノードとなります。

配列の中身を選ぶノードを追加

「GET」のピンから左クリックで伸ばし、離して「Set Static Mesh」と検索し、「Set Static Mesh(StaticMesh)」というノードを選択し出現させます。

「Set Static Mesh(StaticMesh)」は、繋がっている「GET」中に格納されているメッシュを最初に作成した空っぽの「StaticMeshコンポーネント」ターゲットにして、メッシュをセットする事ができます。

メッシュを選ぶ番号を指定する変数を作成

新しい変数を作成します。

今度の変数の型は「Integer」(整数という意味)にします。横のコンテナ型は「配列」ではなく「単一」に設定します。

任意の変数名も付けておきましょう。(例:Mesh Selector)

変数「Mesh Selector」をグラフにgetとして配置し、「GET」関数ノードにピンをつなぎます。

これで

『「Mesh Selector」で指定した数「0」を入力したら「Mesh Set」での「0」番目である「SM_Cone_01_A」を選び、「StaticMeshコンポーネント」に入れる』

という処理ができるようになりました。

最後に「Mesh Selector」の変数の詳細の中にある「インスタンス編集可能」にチェックを入れ、「カテゴリ名」を「Selector」、「スライダ範囲」と「値の範囲」をメッシュの種類分、3つなので「0~2」にしておきましょう。

処理を実行してみましょう

「Construction Script」からピンを伸ばし、「Set Static Mesh」に繋げ、「コンパイル」を押して、保存をします。

今回作ったBPをレベルにドラッグアンドドロップで置いてみましょう。

既に0番目である「SM_Cone_01_A」が表示されている様になっています。

ブループリントを選択してみましょう。

カテゴリで名前をつけた「Selector」の中にインスタンス編集可能にチェックをいれたので「Mesh Selector」変数の値を変更できるようになっています。

0~2までの数値を入れたり、スライドさせたりして計3つの任意のメッシュに切り替えることができることが可能になりました。

これで『レベル内で配置するメッシュを切り替えて選ぶことができるBP』を作成することが出来ました。

まとめ

これで複数のメッシュを一つのブループリントで監理することができることが可能になりました。

例えば、机の上に配置する「皿」「コップ」「花瓶」「モニター」「スマホ」など先に配列に登録しておくと、毎度アセットを格納しているフォルダから持ってきてレベル内に配置する手間がかからずスピーディーに配置作業が行なえます。

是非参考にしていただけたら幸いです。

もっと応用できる方法を模索してみるのも楽しいかもしれません。

ここまで読んでいただきありがとうございました。

関連リンク

  • キンアジのブログ「UE4】ConstructionScriptについて」:https://kinnaji.com/2021/02/09/aboutconstructionscript/
  • 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典「Integer型【変数の型】」:https://wa3.i-3-i.info/word15160.html
  • 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典「関数(function)」:
    https://wa3.i-3-i.info/word1905.html