このクイックスタートガイドでは、Unreal で仮想コンテンツをアタッチ可能な、実世界の固定位置を AR 内に設定する方法を説明します。このガイドでは、HoloLens をプラットフォームとして使用します。
このガイドを読むと、次の方法がわかります。
*ARPin をローカル デバイスに保存する方法
- ローカルの ARPin を削除する方法
*ローカルの ARPin をロードする方法
開始する前に、プロジェクトが AR 用に設定されていることを確認してください。先に進む前に「AR プロジェクトを設定する」を参照してください。
ARPin のローカル ストレージは特定のプラットフォームでのみ機能します。4.26 以降では、Windows Mixed Reality プラグインと Microsoft OpenXR プラグインなどの一部の OpenXR 拡張プラグインがサポートされています。プラットフォームのサポートに関する詳細については、「ARPin」のドキュメントを参照してください。
ステップ 1 - ARPin の追加と保存
次の手順に従って、3D 空間に仮想オブジェクトをスポーンし、そのデータを ARPin で保存します。それには、まず SpawnActor 関数 を設定してから、それを Pin Component に接続して、オブジェクトを特定の場所に固定する必要があります。
このガイドでは、HoloLens プラットフォームによって提供されるユーザーの手の位置をスポーン位置として使用します。HoloLens のモーションコントローラー情報にアクセスできるようにするには、次の手順を実行します。
-
ブループリント エディタの ARPawn に Motion Controller コンポーネントを追加します。
-
[Details (詳細)] パネルで、ピンを配置している手と一致するように、[Motion Source (モーションソース)] を [Right (右)] に設定します。
スポーンアクタ関数を設定する
次の手順に従って、スポーンアクタ関数を設定します。このセクションでは、仮想コンテンツに ピン オブジェクト と呼ばれるカスタム ブループリントアクタ を使用します。
-
プロジェクトのポーン をダブルクリックして、それを ブループリント エディタ で開きます。
-
ブループリント エディタの [Event Graph (イベント グラフ)] タブを右クリックして、次の名前で関数を検索して追加します。
-
Is ARPin Local Store Supported
-
Is ARPin Local Store Ready
-
-
AND 論理ノードへの入力として、2 つの関数からのブールの戻り値を使用します。AND ノードの結果を Branch ノードに接続します。この設定では、ARPin 関数を実行する前に、両方のシナリオが真であることを確認します。
-
Branch ノードから、SpawnActor from Class 関数を追加します。次に、ノードの Class パラメータを Pin Object に設定します。
-
Make Transform 関数を追加して、スポーン位置を基準にしてオブジェクトがスポーンされるローカルトランスフォームを指定します。ワールドトランスフォームは後ほど指定されるため、ローカル空間はデフォルト値のままにしておきます。
プロジェクトに入力アクションを追加する方法の詳細については、一般的な入力アクションについては「Input (入力)」を参照してください。
Pin Component を追加する
次の手順に従って、前のセクションでスポーンされたオブジェクトを固定します。SpawnActor from Class 関数は、 オブジェクト を返します。ただし、Pin Component 関数は シーン コンポーネント を想定しています。オブジェクトを固定するために、オブジェクトのトランスフォームを定義するシーン コンポーネントであるオブジェクトの RootComponent を取得してください。
-
Pin Component 関数を追加します。
-
SpawnActor ノードの Return Value (戻り値) ピンから、Get Root Component を選択します。
-
イベント グラフを右クリックして、オブジェクトを固定する場所を保持する変数を検索します。そして、HoloLens の手の位置をスポーンするには、Get Motion Controller を検索します。その後、それをグラフに追加します。
-
変数を Target として関数 GetWorldTransform に渡します。次に、関数の Return Value を Pin Component ノードの Pin to World Transform 入力に渡します。 ワールド トランスフォームは、コンポーネントが固定されるワールド空間の場所を定義します。
-
関数 Save ARPin to Local Store を追加し、ARPin Object Reference を渡します。これは、Pin Component によって Save ARPin to Local Store ノードの In Pin 入力に返されます。この際、各ピンの保存名が一意になっていることを確認してください。次に、ワールド トランスフォームを String に変換して、保存名を設定します。
-
AR デバイスでアプリを実行します。選択 (R) アクションを実行すると、ピン オブジェクトが表示され、ARPin Local Store が ARPin のエントリを追加します。
HoloLens の場合、Windows デベロッパー ポータルでローカルに保存されているすべてのピンを表示できます。
ステップ 2 - ARPin を削除する
以下の手順に従って、ローカル ストレージから ARPin を削除し、それらに関連付けられている仮想コンテンツを破棄します。
-
Get All Pins を呼び出し、 For Each Loop ノードを追加して、返された ARPin の配列を反復処理します。
-
ピン留めされたコンポーネントの更新を停止するには、Remove Pin 関数を追加します。
-
関数 Destroy Actor を追加して、仮想ピン オブジェクトを削除します。そして、Get Pinned Component と Get Owner を呼び出して、ARPin とその固定されたシーン コンポーネントからアクタを取得します。
-
すべての ARPin を反復処理し、固定されたコンポーネントを破棄した後、Remove All ARPins from Local Store 関数を追加して、保存されているすべてのピンをローカル ストアから削除します。
-
AR デバイスでアプリを実行します。AR デバイスでアプリを実行します。選択 (L) アクションを実行すると、ピン オブジェクトが消え、ARPin ローカル ストアが ARPin のエントリを削除します。
ステップ 3 - ARPin をロードする
次の手順に従って、アプリの前のセッションでデバイスに保存されたすべての ARPin をロードし、ARPin の仮想コンテンツを再度スポーンします。
-
Load ARPins from Local Store を呼び出して、デバイスにローカルに保存されているすべての ARPin にアクセスします。
-
Load ARPins from Local Store は、ARPin 名のマップを返します。マップ内のアイテムを反復処理するには、Values 関数を使用してマップを配列に変換します。配列内のすべてのアイテムにアクセスするには、For Each Loop ノードを追加します。
-
Loop Body で、デフォルトの Make Transform 関数を使用して SpawnActor from Class を呼び出します。スポーンされる場所からオブジェクトをオフセットする場合以外は、トランスフォームのデフォルト値を使用してください。
-
Get Root Component で返されたオブジェクトを シーン コンポーネント に変換し、Pin Component to ARPin に渡します。
-
AR デバイスでアプリを実行し、いくつかの ARPin を作成します。そして、アプリを再起動すると、アプリの起動時に以前に作成したすべてのピンが同じ場所に表示されます。
ロードされたピンを新しく作成されたピンと区別するために、オブジェクトに異なるマテリアルを使用しています。
4 - 応用編
このガイドでは、デバイスにローカル保存される ARPin を作成しました。Azure などのクラウド コンピューティング サービスを使用して保存され、複数のデバイスやプラットフォーム間で共有できるピンを作成するには、「Unreal Engine の Azure Spatial Anchors」に関する Microsoft のドキュメントを参照してください。