見出し画像

【UE4】自動で開くドアの作り方(Blueprint)

UE4(UnrealEngine4)で建築ビジュアライゼーションをするのに使える、自動で開くドアの作り方です。初歩的な内容ですが、今一度まとめました。

1. Blueprint(ブループリント)について

ブループリントはUE4で使われるビジュアルプログラミングの名称です。また、それを使って作られた要素のこともブループリントと呼びます(正確には"ブループリントクラス")。

これから作り方を説明するのは、「自動開閉機能を持ったドアのブループリント(クラス)」ということになります。

ビジュアルプログラミング・・・コードを書かずにプログラミングをする機能。ビジュアルスクリプティングとも。
建築分野では、RhinocerosのGrasshopperや、RevitのDynamoがそれです。

2. 準備

UnrealEngine4のエディタを立ち上げ、「スターターコンテンツあり」でプロジェクトを新規作成します。ここではバージョン4.25を使っています。テンプレートはドアの動作を確認しやすいように「サードパーソン」を使いました。

画像1

ここではUE4そのものの使い方については説明しませんが、新しいレベルを作成し、StarterContentの中に入っている、床や開口付き壁のスタティックメッシュを配置して、適当なマテリアルを設定しました。

画像2

3. ブループリントの作成

コンテンツブラウザで右クリックし、「ブループリント クラス」をクリックします。「Actor」を選ぶとブループリントのアセットが作成されるので、適当な名前を付けます。

画像3

ダブルクリックで開くと、ブループリントの編集画面になります。

画像4

まずはドアの形状を作ります。「ビューポート」というタブが、形状の編集画面になります。

ブループリントのウィンドウを小さくして横に避けておき、元のエディタのウィンドウのコンテンツブラウザから、必要なスタティックメッシュを直接ドラッグします。

画像5

ここではStarterContentPropsに入っている、「SM_Door」と「SM_DoorFrame」を使いました。

取り込んだ枠と扉のスタティックメッシュを、適切な位置に移動します。の部材はスタティックの部材はムーバブルにしておきます。

また、左上の「コンポーネント」タブのところで、SM_DoorとSM_DoorFrameがDefaultSceneRootの直下になるようにしておきます。

画像6

あとは、キャラクター(人)が踏み込んだ時に扉を動作させるための「センサー」のような仕掛けが必要です。

コンポーネントタブにある「コンポーネントを追加」という緑のボタンを押し、Collisonにある「Box Collision」を選択します。フレームだけのオブジェクトが配置されるので、ドアの前後が含まれるように位置と大きさを調整します。

画像7

これも枠や扉と同じく、コンポーネントタブでDefaultSceneRootの直下になるようにしておきます。

4. プログラムを組む

「イベントグラフ」というタブがビジュアルプログアミングの編集画面になります。

画像8

まずドアの回転動作を実行するためのタイムラインを作成します。    何もないところを右クリックし、timelineなどと入力すると、候補の一番下に「タイムラインを追加する」が出てくるのでクリックします。

画像9

作成されたノードをダブルクリックすると、タイムラインを編集できます。「フロートトラックを追加」ボタン(「f+」のアイコン)を押し、トラックを追加します。

トラック上の適当なところを右クリックして「・・・キーを追加」を選択し、2か所に点を置きます。点を選択すると値を手打ちで入力できるので、片方は時間と値を0.0もう片方は1.0にします。上部の「長さ」の項目も1.0にしておきます。(この1.0という数字は、ドアが開ききるまでの時間となるので、適宜変更してください。)

画像10

タイムラインのタブを閉じて戻ります。

次に、動作のきっかけとなる「イベント」を設定します。

コンポーネントタブで「Box」を選択して、右側の詳細タブの下の方にある「On Component Begin Overlap」On Component End Overlapの緑のボタンをクリックします。それぞれ「キャラクターがBoxに重なり始めた時」「・・・Boxから離れた時」に発動します。

画像11

Beginの方の出力ピンからタイムラインの「Play」ピンに、Endの方からはreverseの方につなぎます。

画像12

タイムラインのUpdateピンから引き出し、「Set Relative Rotatinon (SM_Door)」を探してクリックします。一部分を入力するとフィルタがかかるので探しやすくなります。

タイムラインの「新規 Track 0(タイムラインのトラックの名前)」ピンから引き出し、「Lerp (Rotator)」を配置します。「B」「Z」90.0と入力します(扉が開ききると90度なので)。

画像13

Return Valueピンから、先ほど配置したSet Relative Rotatinonの「New Rotation」につなぎます。ここまで完了すると以下のようになります。

画像14

最後にツールバーの「コンパイル」ボタンをクリックし、エラーが出なければブループリントエディタでの作業は終了です。念のために保存しておきましょう。

5. 配置と動作確認

これでドアのブループリントが完成しました。ブループリントのアセットをレベル内にドラッグし、壁の開口部分にはめ込みます。

画像15

「プレイ」を実行してみます。マネキンを操作し、ドアの前に移動すると(ブループリント内で設定した見えないBoxに重なると)、無事にドアが開きました。通り過ぎるか戻るかしてドアから離れると、自動的に閉じます。

画像16

6. 応用 センサーライトを作る

同じ要領で、Box内に踏み込んだときに自動的に点灯するライトのブループリントも作ることができます。

画像17

ビューポートの画面でコンポーネントの追加から「Point Light」を配置し、イベントグラフの画面では、ライトの明るさを設定する「Set Intensity」ノードを使います。

イベントグラフは以下のようになります。Delayというノードは、以後の処理を時間差で実行するもので、この例ではBoxコリジョンを離れてから1秒後にライトが消えるようになります。

画像18

ドア、ライトの他にも、建築のインタラクティブなビジュアライゼーションに必要な、様々な仕掛けを作ることができます。

建築のプレゼンにはこれで十分な気もしますが、ブループリントを本格的に活用しようとすると、変数や関数といったプログラミングの概念を使いこなす必要が出てきます。それはまたの機会に。

7. 参考

ブループリント、UE4全般の初歩についてはこちらのサイトが参考になりました。

自動ドアの作成についてはこちらも参考にさせていただきました。


この記事が気に入ったらサポートをしてみませんか?