チュートリアル / 3ds Max & UnrealEngine4で建築ビジュアライゼーション ~データフォーマットDatasmithを使ったワークフロー~
第10回:ドアやファンを動かそう
- 3ds Max
- VR
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 建築・製造・広告
こんにちは、スタジオ・デジタルプラスの磯野です。
前回はゲームモードを作成し空間を歩き回れるようにしました。
今回は、動画のようにプレイ中にドアが開いたり、ファンが回るなどの設定をしていきましょう。
Unreal Engine4のバージョンは4.21を使用していきます。
椅子の物理を有効にする
プレイヤーが椅子にぶつかると、椅子が動くようにします。
00:00 物理を有効にしたい椅子を全て選びます
00:18 スタティックメッシュの詳細パネルにある「可動性」を「ム―バブル」に変更
00:25 詳細パネルの「Physics」にある「Simulate Physics」と「MasslnKg」にチェック
00:31 「Linear Damping」を「1.0」、「Angular Damping」を「1.0」
00:39 動きを制御したい軸にチェックを入れます。
00:55 保存してプレイしてみます
01:18 プレイヤーが衝突すると椅子が押されて移動するようになりました
シーリングファンを回転させる
天井のシーリングファンを回転させてみましょう。
第8回でインポートしたシーリングファンの羽根をレベルから削除します。(回転させたい羽根だけでOK)
比較できるよう今回はいくつか残しました。
それでは回転する羽根を作っていきます。
まずブループリントクラスを作ります。(新規にフォルダを作っておくと整理しやすいです)
00:00 右クリックで「ブループリントクラス」から「Actor」を選択
00:09 名前をつける(ここでは〔Fans〕としました)
〔Fans〕を開いて設定していきます。
00:00 ダブルクリックで〔Fans〕を開く
00:05 「コンポーネントを追加」から「Static Mesh」を追加(名前を〔RotaMesh〕に変更)
00:24 同じ手順で「Rotating Movement」を追加
00:36 「Construction Script」を開く
00:42 「Construction Script」からピンを出し「Set Static Mesh」に繋ぐ
00:56 「NewMesh」を変数へ昇格(名前を〔Mesh〕に変更)
01:10 コンパイルしてStatic Meshを割り当てます。ファンのアセット(SM_fanwing05)を追加
01:28 変数から「Rotating Movement」をドラック&ドロップし、「Get Rotating Movement」を選択
01:35 Getした「Rotating Movement」からピンを出し「Set Rotation Rate」に繋ぐ
01:46 「Set Static Mesh」と「Set Rotation Rate」を繋ぐ
01:50 「Set Rotation Rate」の「Rotation Rate」を変数に昇格(名前を〔Time〕に変更)
02:05 コンパイルして〔Time〕のデフォルト値を入力
02:17 変数にある目玉のマークをONにする(ONにすると詳細パネルのコンポーネントに表示されます)
02:25 コンパイルして閉じます
出来たら、レベルに配置します。
00:00 〈Fans〉をレベルにドラッグ&ドロップ
00:05 位置を合わせます
00:32 シミュレートしてみましょう
デフォルトで指定した速度で回転しています
速度を変えるには「詳細パネル」の〔Time〕を変更します
00:46 〈Fans〉をクリックし「詳細パネル」にある〔Time〕のZ値を500に
回転速度を決めたら、他のシーリングファンも配置しましょう。
配置したらシミュレートして確認。
メモ
変数の詳細パネルに「ツールヒント」というのがあります。
ここに文字を入力しておくと、レベルに配置した時にBPクラスの詳細に出てくるので、何の変数だったかを確認するのに便利です。
変数(Time)のツールヒントに〔回転速度〕と入力
BPクラスの詳細で〔Time〕にカーソルを合わせると〔回転速度〕と出てきます。
変数の補足説明代わりに便利なので、積極的に使ってみましょう。
ドアを開ける
ドアの開閉については2パターン紹介します。
一つは、レベルブループリントで組む方法。
もう一つは、シーリングファンの時のように、ブループリントクラスを組む方法。
レベルブループリントの方法は手軽で簡単ですが、ブループリントクラスを使う方法であれば、同じドアを別の場所やレベルでも使いまわせるので、マンションやビルなどには便利かと思います。
始めにレベルブループリントで組む方法をご紹介します。
レベルブループリント
近づいたら開き、離れると閉まるドアを作ります。
レベルブループリントは以下のようにしました。
実際にやってみます。
※左クリックが赤、右クリックが黄色のサインです。
00:00 「モードパネル」の「基本」から「ボックストリガー」をレベルにドラッグ&ドロップで配置
このボックスに当たるとドアが開くので位置は高くし過ぎないように。
00:24 「ボックストリガー」を選択した状態でツールバーから「レベルブループリント」を開く
00:35 「イベントグラフ」で右クリック「On Actor Begin Overlap」を選択
00:56 右クリックで「タイムラインを追加する…」を選択しダブルクリックで開く
【f⁺】アイコンの「フロートトラック」を追加
2つキーを打ちます(右クリック or Shif+左クリック)〈時間0.0 値0.0〉と〈時間1.5 値1.0〉
01:36 「タイムライン(変数)」をGet。ピンを出し「set Play Rate」を追加
「タイムライン」と「On Actor Begin Overlap」につなぐ
02:00 変数を作ります。変数の型は「Float」名前を変更したらイベントグラフにGet
デフォルトの数値を入力しておきます
02:37 レベルに戻り、ドアを選択した状態で「レベルブループリント」を開く
「イベントグラフ」で右クリック。「Box398のリファレンスを作成」を選択
「Box398」からピンを出し「Set Actor RelativeLocation」を選択
「タイムライン」の「Update」とつなぐ
03:09 「Set Actor RelativeLocation」の「New RelativeLocation」からピンを出し「Lerp(vector)」を選択
「タイムライン」の「新規 Track 0」と「Lerp(vector)」の「Alpha」をつなぐ
03:34 「Lerp(vector)」のXYZ値を入力します。Aは現在の位置、Bがドアが開いた後の位置
レベルに戻り位置の値をコピー&ペースト
XとZの値は変わらないのでAB同じ値を入れます
次に、「ボックストリガー」から離れるとドアが閉まるようにBPを追加します。
04:22 レベルで「ボックストリガー」を選択した状態で「レベルブループリント」を開く
「イベントグラフ」で右クリック「On Actor End Overlap」を選択
04:40 「タイムライン」の「Reverse」からピンを出し「Delay」を選択
「On Actor End Overlap」とつなぎ「Duration」を3.0に
「ボックストリガー」から離れて少し待ってからドアを閉めたいので「Delay」を入れました。
05:10 スタートの位置は好きな場所に移動させてください
05:31 プレイして確認します
「レベルブループリント」の作業はこれで完了です。
ドアの開閉速度を変えたい場合は変数〈Time〉の値を変更してください。
次に、ブループリントクラスを使用した方法をご紹介します。
ブループリントクラス
まずドアとドア枠は必要ないので削除しておいてください。
それでは初めていきましょう。
まず、新規にブループリントクラスを作ります。
00:00 コンテンツブラウザで右クリック「ブループリントクラス」から「Actor」を選択、名前を〈BP_door〉とします
00:15 〈BP_door〉をダブルクリックで開き、「コンポーネントを追加」から「StaticMesh」を追加(名前をつけるとわかりやすいです)
00:30 「詳細パネル」の「StaticMesh」にドアのメッシュを追加します(Box398)
同じ手順でドアの枠も追加します
00:45 「コンポーネントを追加」から「StaticMesh」を追加
「詳細パネル」の「StaticMesh」にドア枠を追加します(オブジェクト309)
ドアに枠の位置を合わせます
00:31 プレイヤーの衝突を判定するためのボックスを追加します。
「コンポーネントを追加」から「Box Collision」を追加
位置とサイズを調整します
このボックスに当たるとドアが開くので位置は高くし過ぎないように。
準備できたのでブループリントを組んでいきましょう。
00:00 配置した「Box Collision」を選択
「詳細パネル」の「イベント」にある「On Component Begin Overlap」を選択
「イベントグラフ」を開くと自動的に「On Component Begin Overlap」が表示されます
00:26 右クリックで「タイムラインを追加する…」を選択
名前を変更しダブルクリックで開く
【f⁺】アイコンの「フロートトラック」を追加
2つキーを打ちます(右クリック or Shif+左クリック)〈時間0.0 値0.0〉と〈時間1.0 値1.0〉
01:01 「イベントグラフ」に戻り「On Component Begin Overlap」と「タイムライン」の「Play from Start」をつなぐ
01:13 「コンポーネント」に追加した「StaticMesh(door)」を「イベントグラフ」にドラッグ&ドロップ
「StaticMesh(door)」からピンを出し「Set RelativeLocation」を選択
「タイムライン」の「Update」とつなぐ
01:32 「Set RelativeLocation」の「New RelativeLocation」からピンを出し「Lerp(vector)」を選択
「タイムライン」の「新規 Track 0」と「Lerp(vector)」の「Alpha」をつなぐ
ここで変数を作ります。
「Lerp(vector)」のAは現在の位置、Bはドアが開いた後の位置です。
このBの値(位置)をレベルに配置した状態で変更できるようにしたいと思います。
01:50 「変数」の「+」を選択し名前を〔OpenLocation〕に
「詳細パネル」の「変数の型」を「Vector」に
ここで「3Dウィジェットを表示」にチェックを入れたいのですが、コンパイルしないとできませので、コンパイルします。
目玉はONにしなくても大丈夫です。
02:25 「3Dウィジェットを表示」にチェック
「デフォルト値」のYを仮で「-100」にしておきます
02:39 作った〔OpenLocation〕を「イベントグラフ」にドラッグ&ドロップ
直接「Lerp(vector)」のBまで持っていくと自動的につながります
ここで作った変数〔OpenLocation〕については後で説明します。
ここまではドアが開くというBPを作りました。
次はドアが閉まるBPを追加していきます。
02:50 「タイムライン」の「Reverse」からピンを出し「Delay」を選択し「Duration」を3.0に
03:02 「ビューポート」に戻り「Box Collision」を選択
「詳細パネル」の「イベント」にある「On Component End Overlap」を選択
「イベントグラフ」を開くと自動的に「On Component End Overlap」が表示されます
「On Component End Overlap」と「Delay」をつなぐ
コンパイルして完成です。
ではレベルに配置してみましょう。
00:00 作った「ブループリントクラス(BP_door)」をドラッグ&ドロップでレベルに配置
00:32~ ここで作った変数〔OpenLocation〕について説明します。
レベルに配置すると、ドアの付近に紫の正八面体があると思います。これは変数の詳細でチェックを入れた「3Dウィジェットを表示」をONにすると表示されます。このチェックを外すとレベルに表示されなくなりました。
01:00~「3Dウィジェット」の位置はドアが動いた後の位置、ENDの位置になります。
位置を調整してプレイしてみましょう。
これで完成です。ブループリントクラスで作ればシーンに複数配置する事も簡単にできます。
試しに複数配置してみましょう。
今回は、色々な物を動かしてみました。
家具などに動きがつくとより一層空間を楽しむことができるようになるのではないでしょうか。
次回はウィジェットで簡単なメニュー画面を作っていく予定です。
最後まで読んでいただきありがとうございました。