ARKitを利用してGoogle Cardboardでポジショントラッキング
過去、モバイル向けARエンジンであるVuforia・Kudanを利用したモバイルVRでのポジショントラッキングに挑戦してきました。
今回は、先のWWDCで発表されたAppleのARエンジンであるARKitを利用したポジショントラッキングに挑戦してみます。
UnityでARKitを利用するための準備
これについては、各所で詳細な説明がされているようなので、仔細は書きませんが、
- Apple Developer Programより、XCode 9 betaをインストールする
- 同じく、iOS11 betaをインストールする(こちらはMacからではなくiOS端末にて)
- Unityを5.6.1以上にアップデートする
- こちらより、unity-arkit-plugin.unitypackageをダウンロードする
となります。
ARKitでポジショントラッキング
まずは、Assets -> Import Package -> Custom Packageにて「unity-arkit-plugin.unitypackage」をインポートします。
次に、以下のスクリプトを作成し、適当なオブジェクト(MainCameraなど)に設定します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.iOS; public class PositionTracker : MonoBehaviour { public Transform vrCamera; private UnityARSessionNativeInterface m_session; void Start () { Application.targetFrameRate = 60; m_session = UnityARSessionNativeInterface.GetARSessionNativeInterface(); ARKitWorldTackingSessionConfiguration config = new ARKitWorldTackingSessionConfiguration(); config.planeDetection = UnityARPlaneDetection.Horizontal; config.alignment = UnityARAlignment.UnityARAlignmentGravity; config.getPointCloudData = true; config.enableLightEstimation = true; m_session.RunWithConfig(config); } void Update () { if (vrCamera != null) { Matrix4x4 matrix = m_session.GetCameraPose(); vrCamera.transform.localPosition = UnityARMatrixOps.GetPosition(matrix); } } }
次に、プレイヤーが歩き回るための適当なオブジェクト群を用意します。
私は、夏に向けてホラーコンテンツを開発すべく、以下を利用しました。
https://www.assetstore.unity3d.com/jp/#!/content/18703
次に、Scene上に空のGameObject(CamParent)を生成し、Main CameraをCamParentへドラッグ&ドロップします。
また、Main Cameraに貼り付けたPositionTrackerのCr Cameraに、CamParentを設定します。
Main CameraのClipping Planes->nearは0.1等としてください。これで、オブジェクトに近づき過ぎても、オブジェクトが欠けづらくなります。
ビルド・実行
あとは、iOS向けにビルドし、実行するだけです。
- File->Build Settingsにて、PlatformをiOSにする
- Player Settingsにて、Virtual Reality Supportedにチェックを入れ、Virtual Reality SDKsにCardboardを追加する
- Bandle IdentifierやCamera Usage Description(ここが空だと、実行直後に落ちる)を適当に設定する
- Build and Runを押下する。しばらくするとXCode9 betaが起動してくるので、Signing -> Teamを正しく設定し、実行する
終わりに
ARKitよくできていると思います。Google CardboardでVR空間を自由自在に歩き回れる日が来るとは・・感激です!
私の端末はiPhone 6S plusですが、処理落ち等は全く気にならず、精度・パフォーマンス共に素晴らしいです。
ただ、iOSでしか利用できないのがネックです・・Kudanさんがポジショントラッキング機能をサポートする日が待ち遠しい・・