前回の記事に引き続き後編。
手順
Unreal Engine (UE) 側の設定と、アクターの配置や、ブループリント、アニメーションの編集がメイン。前記事のUnreal Editor を開く
でUEを起動した直後からの手順。
前記事同様、自分がつまずいたところを中心に、その他は参考リンクに任せる。
Unreal Engine 側
シーンの作成
シーン = 運転コースなどの走行環境を自由に作る(もっともクリエイティブな部分?)。
参考リンク-1
例:本記事ではスプライン道路のみ
アクターをシーン内で動かす
Simulation 3D Actor Transform Set ブロックを使うと簡単にできる
参考リンク-2
-
コンテンツブラウザ > ソースパネル > MathWorksSimulation C++クラス > MathWorksSimulation > Public > Sim3dActor をベースにブループリントクラスを作成する(この記事では
VehicleSedan
と名付ける) -
ブループリントにSkeltal Mesh コンポーネントを追加し、DefaultSceneRootを上書きする
Static Mesh を選ぶと後でアニメーションがつけれない。タイヤを曲げたりハンドルを回すアニメーションをつけたい場合は必ずSkeltal Meshに!
-
好きなSkeltal Meshを選択。デフォルトで MathWorks の用意したものもあるが、オプションでオリジナルのものを作ってもいい(参考リンク-3,4)
-
VehicleSedan
ブループリントをシーンに配置し、アクタ > Tags にSimulation 3D Actor Transform Set
ブロックの3D シーンのアクターのタグ、ActorTag []
で設定した名前を追加(この記事ではMySedan
とする) -
レベルブループリント > ファイル > ブループリントの親を変更 で 親を必ずSim3DLevelScriptActorに変更しておく
これを忘れると、UEがクラッシュする。
-
Simulinkモデルを実行し、左下に初期化中の表示が出たら、Unreal Editorでプレイして、アクターが動くのを確認する
カメラの設置
参考リンク-5,6 のような方法もあるが、今回はSimulation 3D Actor
ブロックを使って実現した。
-
Simulation 3D Actor
プロパティの親の名前
にMySedan
を設定 -
アクター名
プロパティにカメラアクターの名前を付ける(この記事ではCameraMounted
とする) -
Simulation 3D Scene Configuration
のプロパティシーンビュー
にCameraMounted
を設定
前回記事に説明用のスクリーンショットあり。
アクターにアニメーションをつける
筆者が一番苦労した部分。参考リンク-5に、C++を使用したアクターのアニメーション化の方法はあるが、ブループリントで実現する方法を探った。いろいろ模索した結果、Simulation 3D Message Set
ブロックでアニメーション情報をUEに送るという手段に落ち着いた。
一方C++での方法は、Simulation 3D Actor Transform Set
のみでアニメーションも実現している。ブループリントでも同じようにできないか試行錯誤したが、わからず断念。知っている方がいたら、コメント等で情報お待ちしております。
アニメーションBPの作成
今回アニメーションにするのは、タイヤ4輪の回転方向の角度と、前2輪の曲げ方向の角度とする。
-
コンテンツブラウザ > 追加/インポート > アニメーション > アニメーションBP を選択
-
親クラスを
AnimInstance
に、ターゲットスケルトンはブループリント作成時に指定したものと同じ Skeltal Mesh を指定(この記事ではSedanAnimBP
と名付ける) -
コンパイルして、変数を変化させながらプレビューで動作確認
アニメーション情報をSimulinkから取得
- アクタを配置 > クラスの検索 から
Sim3dGetFloat
を検索してシーンに配置 - レベルブループリントで、
Sim3dGetFloat
で取得した配列をVehicleSedan
内の変数にセットする
例:VehicleSedan
にあらかじめセットした変数を作成しておく(ここでは配列としてセット)
- コンパイルする
ブループリント(VehicleSedan
)とアニメーションBP(SedanAnimBP
)を紐づける
-
VehicleSedan
ビューポートの詳細設定 > アニメーション > Anim Class でSedanAnimBP_C
を検索して指定する
- イベントグラフで、レベルブループリントでセットした変数を
SedanAnimBP
にキャストする
例:VehicleSedan
の変数を必要に応じて加工してからSedanAnimBP
にキャスト
- コンパイルし、Simulinkモデルを実行
- UEでプレイし、アクターが動くのと同時にアニメーションも動いていることを確認(下のgifではタイヤも回転しているが、見えない...)
さいごに
仕事でMATLABを使用しているときにUEと連携できることを知り、GWの課題としてこの記事の内容を仕上げた。UEの編集は初心者だったが、ブループリントはSimulink同様に視覚的にプログラムできるので、学習ハードルは低く、楽しんで作業できた。
Simulinkでモデルを作りUEで可視化するこの方法は、個人の趣味として楽しくシミュレーション開発プロセスを学びながら、なおかつタイムパフォーマンスにも優れた方法だと感じた。
参考リンク
- Landscape Road Spline 【動画】
- Connect a Physical Model in Simulink to Unreal Engine | AUV Deep Dive, Part6 【動画】
- Preparing A Custom Vehicle Mesh for the Unreal Editor【動画】
- Unreal Editor 用のカスタム車両メッシュの準備
- Animate Custom Actors in the Unreal Editor
- Place Cameras on Actors in the Unreal Editor
- Fully Drivable Kinematic Car from Scratch - Unreal Engine 5 Blueprints Tutorial 【動画】
- Get Started Communicating with the Unreal Engine Visualization Environment