【UE4】自動で開くドアの作り方(Blueprint)
UE4(UnrealEngine4)で建築ビジュアライゼーションをするのに使える、自動で開くドアの作り方です。初歩的な内容ですが、今一度まとめました。
1. Blueprint(ブループリント)について
ブループリントはUE4で使われるビジュアルプログラミングの名称です。また、それを使って作られた要素のこともブループリントと呼びます(正確には"ブループリントクラス")。
これから作り方を説明するのは、「自動開閉機能を持ったドアのブループリント(クラス)」ということになります。
ビジュアルプログラミング・・・コードを書かずにプログラミングをする機能。ビジュアルスクリプティングとも。
建築分野では、RhinocerosのGrasshopperや、RevitのDynamoがそれです。
2. 準備
UnrealEngine4のエディタを立ち上げ、「スターターコンテンツあり」でプロジェクトを新規作成します。ここではバージョン4.25を使っています。テンプレートはドアの動作を確認しやすいように「サードパーソン」を使いました。
ここではUE4そのものの使い方については説明しませんが、新しいレベルを作成し、StarterContentの中に入っている、床や開口付き壁のスタティックメッシュを配置して、適当なマテリアルを設定しました。
3. ブループリントの作成
コンテンツブラウザで右クリックし、「ブループリント クラス」をクリックします。「Actor」を選ぶとブループリントのアセットが作成されるので、適当な名前を付けます。
ダブルクリックで開くと、ブループリントの編集画面になります。
まずはドアの形状を作ります。「ビューポート」というタブが、形状の編集画面になります。
ブループリントのウィンドウを小さくして横に避けておき、元のエディタのウィンドウのコンテンツブラウザから、必要なスタティックメッシュを直接ドラッグします。
ここではStarterContentのPropsに入っている、「SM_Door」と「SM_DoorFrame」を使いました。
取り込んだ枠と扉のスタティックメッシュを、適切な位置に移動します。枠の部材はスタティック、扉の部材はムーバブルにしておきます。
また、左上の「コンポーネント」タブのところで、SM_DoorとSM_DoorFrameがDefaultSceneRootの直下になるようにしておきます。
あとは、キャラクター(人)が踏み込んだ時に扉を動作させるための「センサー」のような仕掛けが必要です。
コンポーネントタブにある「コンポーネントを追加」という緑のボタンを押し、Collisonにある「Box Collision」を選択します。フレームだけのオブジェクトが配置されるので、ドアの前後が含まれるように位置と大きさを調整します。
これも枠や扉と同じく、コンポーネントタブでDefaultSceneRootの直下になるようにしておきます。
4. プログラムを組む
「イベントグラフ」というタブがビジュアルプログアミングの編集画面になります。
まずドアの回転動作を実行するためのタイムラインを作成します。 何もないところを右クリックし、timelineなどと入力すると、候補の一番下に「タイムラインを追加する」が出てくるのでクリックします。
作成されたノードをダブルクリックすると、タイムラインを編集できます。「フロートトラックを追加」ボタン(「f+」のアイコン)を押し、トラックを追加します。
トラック上の適当なところを右クリックして「・・・キーを追加」を選択し、2か所に点を置きます。点を選択すると値を手打ちで入力できるので、片方は時間と値を0.0、もう片方は1.0にします。上部の「長さ」の項目も1.0にしておきます。(この1.0という数字は、ドアが開ききるまでの時間となるので、適宜変更してください。)
タイムラインのタブを閉じて戻ります。
次に、動作のきっかけとなる「イベント」を設定します。
コンポーネントタブで「Box」を選択して、右側の詳細タブの下の方にある「On Component Begin Overlap」と「On Component End Overlap」の緑のボタンをクリックします。それぞれ「キャラクターがBoxに重なり始めた時」「・・・Boxから離れた時」に発動します。
Beginの方の出力ピンからタイムラインの「Play」ピンに、Endの方からはreverseの方につなぎます。
タイムラインのUpdateピンから引き出し、「Set Relative Rotatinon (SM_Door)」を探してクリックします。一部分を入力するとフィルタがかかるので探しやすくなります。
タイムラインの「新規 Track 0(タイムラインのトラックの名前)」ピンから引き出し、「Lerp (Rotator)」を配置します。「B」の「Z」に90.0と入力します(扉が開ききると90度なので)。
Return Valueピンから、先ほど配置したSet Relative Rotatinonの「New Rotation」につなぎます。ここまで完了すると以下のようになります。
最後にツールバーの「コンパイル」ボタンをクリックし、エラーが出なければブループリントエディタでの作業は終了です。念のために保存しておきましょう。
5. 配置と動作確認
これでドアのブループリントが完成しました。ブループリントのアセットをレベル内にドラッグし、壁の開口部分にはめ込みます。
「プレイ」を実行してみます。マネキンを操作し、ドアの前に移動すると(ブループリント内で設定した見えないBoxに重なると)、無事にドアが開きました。通り過ぎるか戻るかしてドアから離れると、自動的に閉じます。
6. 応用 センサーライトを作る
同じ要領で、Box内に踏み込んだときに自動的に点灯するライトのブループリントも作ることができます。
ビューポートの画面でコンポーネントの追加から「Point Light」を配置し、イベントグラフの画面では、ライトの明るさを設定する「Set Intensity」ノードを使います。
イベントグラフは以下のようになります。Delayというノードは、以後の処理を時間差で実行するもので、この例ではBoxコリジョンを離れてから1秒後にライトが消えるようになります。
ドア、ライトの他にも、建築のインタラクティブなビジュアライゼーションに必要な、様々な仕掛けを作ることができます。
建築のプレゼンにはこれで十分な気もしますが、ブループリントを本格的に活用しようとすると、変数や関数といったプログラミングの概念を使いこなす必要が出てきます。それはまたの機会に。
7. 参考
ブループリント、UE4全般の初歩についてはこちらのサイトが参考になりました。
自動ドアの作成についてはこちらも参考にさせていただきました。