Niantic Lightship ARDK のチュートリアルをやってみた。

Niantic Lightship ARDKというunity用のARパッケージが配布されたので早速触ってみました。といっても今回はチュートリアルをなぞっただけです。チュートリアルだけでも結構なボリュームが用意されており、動画のようなことをやるのは大変なんじゃないかという感じ。

余談ですけど動画の内容は結構ワクワクするものが多くて好きです。

今回触ったのは「Basic Occlusions Tutorial」になります。

※リンク切れてたので修正しました。

※注意※

この記事はとにかく早く出すことを目的に執筆されています。理解が曖昧な部分があります。もしかしたら間違っている部分もあるかもしれませんのでご注意ください。

①ファイルのダウンロード

公式ホームページの「Download Now」からダウンロードします。

アカウントの作成が必要ですが、ログインするとライセンスキーを発行する画面があったりしますが、マルチプレイヤー機能を使わない限り不要なようです。

ライセンスキー

左右にダウンロード画面に行けるボタンがありますので、そこをクリック。

画像13

ダウンロードと、右下のARDK Example Scenesをダウンロードしてunityに取りこみます。

②シーン設定

AR Session Manager、AR Camera Position Helper、AR Rendering Manager、AR Depth Managerの4つをAddCompornentから追加し、すべての「Camera」欄にMain Cameraを挿入(Capability Checkerは自動で入る)

画像2

(AR Depth Managerで深度計算の更新速度などを変更できる。Prefer smooth edgesをオンにをいれるとデバイスによっては縁の認識精度?が向上するらしい)

カメラ設定をSolid Colorにして背景を黒に

画像1

プロジェクト内のMockupSceneを追加(検索した方が早い)

画像3

MockupSceneのレイヤーが設定されていないので、Add Layerから「ARDK_MockWorld」を作成して設定する。

おそらくこのMockupSceneが疑似的な部屋になっており、いちいちビルドしなくてもこの環境下である程度のデバッグが出来るらしい。これは便利。

「ARDK_MockWorld」はMainCameraのCultingMaskから外しておく。(対象になると常に手前に描画されてしまうと思われる)


次に、イエティをいい感じに配置して、レイヤーをDefaultに設定する。

この時にゲームを動かすとこんな感じになる。机の後ろにイエティが来ている。右クリックでカメラを動かせる。

画像4

さらに、イエティのプレハブ内のShadowを非アクティブにする。

画像9

③スクリプトを書く

ここでやることはタッチした場所にキャラクターを移動させて、カメラを向くようにすること。

Update内でタッチを検出(TouchBeganを動かす)

    void Update()
   {
       //if there is a touch call our function
       if (PlatformAgnosticInput.touchCount <= 0) { return; }

       var touch = PlatformAgnosticInput.GetTouch(0);
       if (touch.phase == TouchPhase.Began)
       {
           TouchBegan(touch);
       }
   }

Start関数の中はAR開始時に呼び出す関数?AR機能を動かす。

    IARSession _session;
   // Start is called before the first frame update
   void Start()
   {
       //we will need to catch the session in for our hit test function.
       ARSessionFactory.SessionInitialized += OnSessionInitialized;
   }

   //callback for the session starting.
   private void OnSessionInitialized(AnyARSessionInitializedArgs args)
   {
       //only run once guard
       ARSessionFactory.SessionInitialized -= OnSessionInitialized;

       //save the session.
       _session = args.Session;
   }

TouchBegan内の関数では、currentFrameでカメラが動いていること、フレームが有効であることを確認、hitTestResults(あらかじめ用意されている関数)で、カメラの位置やタッチの位置を取得し、(検知した平面に?)hitしているか確認、ヒットしている位置にキャラクターが移動してカメラの方向に向くようにする。

スクリプトが出来たらMainCameraにアタッチしてGamePbjectにイエティを、CameraにMainCameraを放り込む。

さらに、AR Plane Manager、AR Depth Interpolation Adapterも設定する。

画像8

ちなみに、unity上で実行すると、PlanePrefabで使用しているシェーダが対応していないらしくピンク色になったが、実機では問題なく再生された。(GPUが対応していないっていわれます。)

画像11
画像12

④ビルド設定

Androidのビルド設定はこちら

AUto Graphics APIからVulkanを削除、してOpenGLES3と2を追加、

画像5

APIレベルを5.0以上に、 Scripting Backend はIL2CPP、Target Architectures は ARMv7とARM64にチェックをいれる。

画像6

これをやらなくてもビルドできてしまうので注意。

⑤実行結果

⑥ハマったところ:unity上ではちゃんと動くのに実機で実行すると真っ暗になる

悲しい。

画像10

②の最後でも触れたが、イエティ内のShadowの中にカメラがあってそこと競合しているっぽい。

画像7

ここを非表示にするときちんと動いた。


ここまで書いたがほぼ迷うことなく実行まで行くことができた。簡単に認識するので、いろいろと遊ぶ余地はありそうでした。




この記事が気に入ったらサポートをしてみませんか?