Unity AR Foundation は GoogleのAR Core と AppleのARKit を Unity上で統合して、マルチプラットフォームで ARアプリを開発できるフレームワーク です。
そして、これのサンプルを Unityが GitHubにあげております。
前回はそのサンプルの中で一番シンプルなAR、その名も「SimpleAR」の設定法を紹介しました。
【Unity AR Foundation のサンプルを試してみた(SimpleAR)Part.1】
今回は、そのサンプルのもう少し詳しい説明と応用に関して紹介します。
(下の写真は Unite Singapore 2019 の Keynote。)

【サンプル「SimpleAR」の構造】
この「SimpleAR」は名前の通り必要最低限の AR機能を満たしているだけのシンプルなものです。
まず AR Foundationで、ARで一番一般的な機能3DオブジェクトをAR表示する機能を理解するのにはよくできています。
まず、このサンプルには以下のオブジェクトが含まれます。

【「AR Session」オブジェクト】

AR Session クラス:
AR Foundationの ARとしての基本機能(デバイスのトラッキングや、平面の認識)を AR Sessionと呼び、本Game Objectがその機能を担っています。このコンポーネントを付けた Game Objectを Sceneに必ず含める必要があります。
「Attempt Update」をチェックすると、もし可能であれば ARソフトを自動でインストールする設定となります。
AR Input Manager クラス:
このコンポーネントはデバイスで現実世界をトラッキングするのに必要となります。実際は Scene上のどこにあっても良い。

【AR Sessionのコントロール】
この「SimpleAR」は、AR Sessionをコントロールするボタンがついているので、動きの確認やサンプルソースから実装方法が理解できます。

Pauseボタン:
AR Session(デバイスのトラッキングや、平面の認識)を一時停止します。一時停止中は AR SessionはCPUリソースを消費しません。
Resumeボタン:
一時停止した AR Sessionを再開します。デバイスは再度 位置認識をして、Pause前に認識したオブジェクトは新たな位置に移動するかもしれません。
Resetボタン:
全ての認識済みの平面をクリアして、効率的に AR Sessionを開始します。
Reloadボタン:
完全に AR Session ゲームオブジェクトを破壊して、再度インスタンス化します。シーンの変更などで使用します。
【表示オブジェクトの変更】
応用と言うほどではないですが、本サンプルは指定した位置に3Dモデルを AR表示するアプリですので、この3Dモデルを自分の好きなものに変えてみましょう。
そして、これのサンプルを Unityが GitHubにあげております。
前回はそのサンプルの中で一番シンプルなAR、その名も「SimpleAR」の設定法を紹介しました。
【Unity AR Foundation のサンプルを試してみた(SimpleAR)Part.1】
今回は、そのサンプルのもう少し詳しい説明と応用に関して紹介します。
(下の写真は Unite Singapore 2019 の Keynote。)

今回の詳細説明で主に参考にしたのは以下の Unityのマニュアルと GitHubのページとなります。
https://docs.unity3d.com/Packages/com.unity.xr.arfoundation
https://github.com/Unity-Technologies/arfoundation-samples
https://docs.unity3d.com/Packages/com.unity.xr.arfoundation
https://github.com/Unity-Technologies/arfoundation-samples
【サンプル「SimpleAR」の構造】
この「SimpleAR」は名前の通り必要最低限の AR機能を満たしているだけのシンプルなものです。
まず AR Foundationで、ARで一番一般的な機能3DオブジェクトをAR表示する機能を理解するのにはよくできています。
まず、このサンプルには以下のオブジェクトが含まれます。

【「AR Session」オブジェクト】

AR Session クラス:
AR Foundationの ARとしての基本機能(デバイスのトラッキングや、平面の認識)を AR Sessionと呼び、本Game Objectがその機能を担っています。このコンポーネントを付けた Game Objectを Sceneに必ず含める必要があります。
「Attempt Update」をチェックすると、もし可能であれば ARソフトを自動でインストールする設定となります。
AR Input Manager クラス:
このコンポーネントはデバイスで現実世界をトラッキングするのに必要となります。実際は Scene上のどこにあっても良い。
【「AR Session Origin」オブジェクト】

AR Session Origin クラス:
Session Spaceと言う ARの座標と Unity Space:Unityの座標の変換を行います。ARデバイスを起動した位置を Session Spaceの原点(0,0,0)として位置の計算をします。
AR Cameraを配下に持っています。また、トラッキングする認識した平面としての Game Objectや、表示した Game Object等はこの AR Session Originオブジェクト配下に作られる。
AR Plane Manager クラス:
認識した平面の位置に AR Planeとして Prefabを作成する。
AR Point Cloud Manager クラス:
認識した特徴点に Point Cloudとしての Prefabを作成する。
AR Raycast Manager クラス:
Plane上に Cubeを置く位置を取得するため、スクリーンタップ時に Planeへの Raycastを実行する。
Place On Plane クラス:
Raycastで指定した位置にオブジェクトを置くコンポーネント。
画面タップ時に Raycastを行い、認識済みの平面に当たった場合、そこに1つ指定したオブジェクトを置く。
もし、既に作成済みオブジェクトが置いてある場合は、それを新たな位置に移動させる。
以下のソースで上記を実行。

AR Session Origin クラス:
Session Spaceと言う ARの座標と Unity Space:Unityの座標の変換を行います。ARデバイスを起動した位置を Session Spaceの原点(0,0,0)として位置の計算をします。
AR Cameraを配下に持っています。また、トラッキングする認識した平面としての Game Objectや、表示した Game Object等はこの AR Session Originオブジェクト配下に作られる。
AR Plane Manager クラス:
認識した平面の位置に AR Planeとして Prefabを作成する。
AR Point Cloud Manager クラス:
認識した特徴点に Point Cloudとしての Prefabを作成する。
AR Raycast Manager クラス:
Plane上に Cubeを置く位置を取得するため、スクリーンタップ時に Planeへの Raycastを実行する。
Place On Plane クラス:
Raycastで指定した位置にオブジェクトを置くコンポーネント。
画面タップ時に Raycastを行い、認識済みの平面に当たった場合、そこに1つ指定したオブジェクトを置く。
もし、既に作成済みオブジェクトが置いてある場合は、それを新たな位置に移動させる。
以下のソースで上記を実行。

【AR Sessionのコントロール】
この「SimpleAR」は、AR Sessionをコントロールするボタンがついているので、動きの確認やサンプルソースから実装方法が理解できます。

Pauseボタン:
AR Session(デバイスのトラッキングや、平面の認識)を一時停止します。一時停止中は AR SessionはCPUリソースを消費しません。
Resumeボタン:
一時停止した AR Sessionを再開します。デバイスは再度 位置認識をして、Pause前に認識したオブジェクトは新たな位置に移動するかもしれません。
Resetボタン:
全ての認識済みの平面をクリアして、効率的に AR Sessionを開始します。
Reloadボタン:
完全に AR Session ゲームオブジェクトを破壊して、再度インスタンス化します。シーンの変更などで使用します。
【表示オブジェクトの変更】
応用と言うほどではないですが、本サンプルは指定した位置に3Dモデルを AR表示するアプリですので、この3Dモデルを自分の好きなものに変えてみましょう。
Hierarchyビュー上の「AR Session Origin」オブジェクトを選択。Inspectorビューに「Place On Plane」コンポーネントがあります。
この「Placed Prefab」にある Prefab を好きな3Dモデルの Prefabに付け替えます。

この「Placed Prefab」にある Prefab を好きな3Dモデルの Prefabに付け替えます。

そして、「Build And Run」を行い、デバイス上で表示してみます。
3Dモデルの大きさや位置が合わない場合、Prefabの Position、Rotationや Scaleを直接調整します。3Dモデルが大き過ぎるとカメラが3Dモデルの中に入ってしまう場合もあります。
何度か繰り返し、調整していきます。

3Dモデルの大きさや位置が合わない場合、Prefabの Position、Rotationや Scaleを直接調整します。3Dモデルが大き過ぎるとカメラが3Dモデルの中に入ってしまう場合もあります。
何度か繰り返し、調整していきます。

前回・今回で Unity AR Foundation のサンプルプロジェクトから一番シンプルな AR「SimpleAR」の設定法と作りの詳細説明をしました。
また、このサンプルプロジェクトは まだいくつもの ARサンプルが含まれています。他の代表的な機能を含むサンプルに関しても次回以降いくつか紹介していきます。
また、このサンプルプロジェクトは まだいくつもの ARサンプルが含まれています。他の代表的な機能を含むサンプルに関しても次回以降いくつか紹介していきます。
Sponsored Link