UE4でHoloLens2に豆腐を表示する
今回は久々にUnreal Engineの記事です。
前回:
xr-physics-work-etc.hatenablog.com
最近Unreal Engine 5が正式リリースされましたが、まだMRTKが対応していなかったり、マーケットプレイスで取得したMicrosoft OpenXRではパッケージ作成時にエラーが出たりするため、今回はUnreal Engine 4.27での豆腐表示を試します。
公式ドキュメントもあったりしますが、あくまで自分用の備忘録としてまとめておきます。
前提
Unreal Engine 4.27.2
準備
Microsoft OpenXRの取得
HoloLens2でOpenXRを使用するために、マーケットプレイスからMicrosoft OpenXRを取得します。
「アセットを検索」から「Microsoft OpenXR」を検索すると目的のアセットが表示されます。
「無料」ボタンを押してアセットを取得した後、「エンジンにインストール」から4.27.2のUnreal Engineを選択してインストールします。
ビルド用設定の準備
まずはUnreal EngineでHoloLens用にビルドできるようにします。
Engineバージョンの「4.27.2」の下向き三角をクリックするとメニューが表示されます。
表示されたメニューから「オプション」を選択します。
インストールオプションから、「対応プラットフォーム」にHoloLens2を追加します。
HoloLens2の項目にチェックを入れ、「適用」ボタンを押します。
HoloLens2向けビルドツールのダウンロード/インストールが始まるので、しばらく待つとインストールが終わります。
プロジェクトを作る
次に、Unreal Engineを起動してプロジェクトを作成します。
4.27.2のバージョンのUnreal Engineを選択し、「起動」ボタンを押します。
Unreal Engineが起動したら、新規プロジェクトのテンプレートを選択します。
まずは「ゲーム」を選択し、「次へ」を選択します。
次に「Blank」を選択し、「次へ」を選択します。
次にプロジェクトの詳細設定を行います。
今後のため、C++も使用できるように「C++」を設定します。
端末種別は「モバイル/タブレット」、パフォーマンス特性は「スケーラブルな3D・2D」、「スターターコンテンツなし」、「レイトレーシング無効」を選択します。
プロジェクト名と保存場所を設定し、問題なければ「プロジェクト作成」ボタンを押します。
プロジェクトの初期設定
プラグイン設定
プロジェクトが開いたら、初期設定としてプラグインを導入します。
上部メニューの「編集」→「プラグイン」からプラグインウィンドウを表示します。
検索ウィンドウで「hololens」と検索すると出てくる、「HoloLens」、「Microsoft OpenXR」プラグインの有効にチェックを入れ有効化した後、「今すぐ再起動」ボタンからエディタを再起動してプラグインを有効化します。
プロジェクト設定
次にプロジェクトの設定を変更します。
上部メニューの「編集」→「プロジェクト設定」からプロジェクト設定ウィンドウを表示します。
まずは「説明」の項目を変更します。
「プロジェクト名」にHoloLensでのアプリ名、「企業名」は任意の値、「企業識別名」にはCN=
の後に企業名で入力した値を入力します。
「企業識別名」の値は、この後の「署名証明書」で使用します。
最後に「設定」項目の「VRで開始」にチェックを入れます。
次にプラットフォーム「HoloLens」の項目を確認します。
まず、「Build for HoloLens Device」の項目にチェックがついていることを確認します。
次に、「署名証明書」の新規作成ボタンを押します。
秘密鍵を作成するウィンドウが表示されます。
今回はパスワードを設定しないので、「None」を設定します。
正常に証明書が作成されると、さきほど「説明」で設定した「企業識別名」が表示されます。
これでプロジェクト設定ができました。
レベルの設定
レベル初期設定
次にレベル(シーン)の設定を行います。
現在のレベルには不要なものが多いので新規でシーンを作成します。
上部メニューの「ファイル」→「新規レベル」から新しくレベルを作成します。
新規レベルウィンドウから「空のレベル」を選択します。
これで、まっさらなレベルが作成できます。
今のうちに作成されたレベルを保存します。
上部メニューの「ファイル」→「現在のレベルを保存」から保存できます。
「コンテンツ」ディレクトリ配下に「Maps」ディレクトリを作成し、その中に「Main」という名前でレベルを保存します。
各設定が終わったら「保存」ボタンからレベルを保存します。
これで空のレベルを保存できました。
豆腐を配置する
次にレベル中に豆腐を配置します。
「アクタを配置」から「基本」→「キューブ」を選び、ドラッグアンドドロップでビューポート中に配置します。
位置、姿勢は下記を参考に設定します。
次に光源を設定します。
「ライト」→「ディレクショナルライト」をドラッグアンドドロップでビューポート中に配置します。
位置、姿勢は下記を参考に設定します。
これで豆腐を配置できました。
HoloLens用設定をする
次にHoloLens用にプロジェクトを構成します。
AR Session Config
コンテンツブラウザで右クリックし、「その他」→「データアセット」を選択します。
データアセット選択ウィンドウが表示されるため、「ARSessionConfig」を選択します。
データアセット名も「ARSessionConfig」とします。
次に、ARSessionConfigを有効化するため、レベルブループリントに設定します。
「ブループリント」→「レベルブループリントを開く」をクリックします。
レベルブループリントを設定します。
イベントBeginPlay
(起動時に実行されるイベント)にStart AR Session
を設定し、Session Configに先ほど作成したARSessionConfig
を設定します。
Start AR Session
は右クリックすると見つかるノードです。
イベント EndPlay
とStop AR Session
も同様に設定します。
保存後、「コンパイル」ボタンから再コンパイルを行います。
これでAR Sessionの設定ができました。
ポーン、ゲームモードベースを設定する
次にポーンとゲームモードベースを設定します。
ポーンはプレイヤーを表す実体、ゲームモードベースはゲームモードの基本クラスです。
docs.unrealengine.com
ポーンを作成するため、コンテンツ配下に「Blueprints」フォルダを作成し、右クリックをします。
右クリック後、「ブループリントクラス」を選択します。
「親クラスを選択」ウィンドウで下部の「すべてのクラス」からdefaultPawn
を検索し、選択します。
DefaultPawn
を親クラスとして設定したポーンを作成できるので、名前を設定します。
今回はxR_Pawn
としました。
作成したxR_Pawn
をダブルクリックし、ウィンドウを開きます。
「コンポーネントを追加」からcamera
を検索し、カメラコンポーネントを追加します。
Collision Component
とMesh Component
のコリジョンの設定をNoCollisionに設定します。
設定が終わったらコンパイルを実施し、保存します。
次にゲームモードベースを作成します。
コンテンツブラウザ中で右クリックし、ブループリントクラスを選択します。
「親クラスを選択」ウィンドウから「すべてのクラス」でGameModeBase
を検索し、選択します。
ブループリントの名前はxRGameModeBase
としました。
作成したxRGameModeBase
をダブルクリックし、右の詳細ウィンドウを編集します。
Default Pawn Class
に先ほど作成したxR_Pawn
を設定します。
設定したらコンパイルを実行し、保存します。
最後に、「編集」→「プロジェクト設定」を開き「マップ&モード」を開きます。
ゲームモードには、xRGameModeBase
を、マップにはMain
を設定します。
パッケージを作成する
最後にプロジェクトからパッケージを作成します。
「ファイル」→「プロジェクトをパッケージ化」→「HoloLens」を選択します。
パッケージを保存する場所を選び(多くはBuild配下)決定すると、パッケージ化が開始されます。
パッケージ化が成功すると、先ほど出力先に指定したディレクトリにアプリパッケージが作成されます。
Device PortalからインストールすることでHoloLensでアプリが使用できるようになります。
動作確認
作成したアプリパッケージを実機で動かしてみました。
問題なくお豆腐が表示されています。
Unreal Engine触ってお豆腐出してみた
— napo tech (@SubNapo) May 2, 2022
側面の影が実機だと透明(真っ黒)なのは調整が必要なんだろうな pic.twitter.com/u1rVn3iqzp
影の表現が真っ黒なため、実機だと透明に見えてしまっています。対応が必要そうです。
次回以降は、UnrealEngineのMRTKを触ってみようと思います。