Niantic Lightship ARDK のチュートリアルをやってみた。
Niantic Lightship ARDKというunity用のARパッケージが配布されたので早速触ってみました。といっても今回はチュートリアルをなぞっただけです。チュートリアルだけでも結構なボリュームが用意されており、動画のようなことをやるのは大変なんじゃないかという感じ。
余談ですけど動画の内容は結構ワクワクするものが多くて好きです。
今回触ったのは「Basic Occlusions Tutorial」になります。
※リンク切れてたので修正しました。
※注意※
この記事はとにかく早く出すことを目的に執筆されています。理解が曖昧な部分があります。もしかしたら間違っている部分もあるかもしれませんのでご注意ください。
①ファイルのダウンロード
公式ホームページの「Download Now」からダウンロードします。
アカウントの作成が必要ですが、ログインするとライセンスキーを発行する画面があったりしますが、マルチプレイヤー機能を使わない限り不要なようです。
左右にダウンロード画面に行けるボタンがありますので、そこをクリック。
ダウンロードと、右下のARDK Example Scenesをダウンロードしてunityに取りこみます。
②シーン設定
AR Session Manager、AR Camera Position Helper、AR Rendering Manager、AR Depth Managerの4つをAddCompornentから追加し、すべての「Camera」欄にMain Cameraを挿入(Capability Checkerは自動で入る)
(AR Depth Managerで深度計算の更新速度などを変更できる。Prefer smooth edgesをオンにをいれるとデバイスによっては縁の認識精度?が向上するらしい)
カメラ設定をSolid Colorにして背景を黒に
プロジェクト内のMockupSceneを追加(検索した方が早い)
MockupSceneのレイヤーが設定されていないので、Add Layerから「ARDK_MockWorld」を作成して設定する。
おそらくこのMockupSceneが疑似的な部屋になっており、いちいちビルドしなくてもこの環境下である程度のデバッグが出来るらしい。これは便利。
「ARDK_MockWorld」はMainCameraのCultingMaskから外しておく。(対象になると常に手前に描画されてしまうと思われる)
次に、イエティをいい感じに配置して、レイヤーをDefaultに設定する。
この時にゲームを動かすとこんな感じになる。机の後ろにイエティが来ている。右クリックでカメラを動かせる。
さらに、イエティのプレハブ内のShadowを非アクティブにする。
③スクリプトを書く
ここでやることはタッチした場所にキャラクターを移動させて、カメラを向くようにすること。
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も設定する。
ちなみに、unity上で実行すると、PlanePrefabで使用しているシェーダが対応していないらしくピンク色になったが、実機では問題なく再生された。(GPUが対応していないっていわれます。)
④ビルド設定
Androidのビルド設定はこちら
AUto Graphics APIからVulkanを削除、してOpenGLES3と2を追加、
APIレベルを5.0以上に、 Scripting Backend はIL2CPP、Target Architectures は ARMv7とARM64にチェックをいれる。
これをやらなくてもビルドできてしまうので注意。
⑤実行結果
⑥ハマったところ:unity上ではちゃんと動くのに実機で実行すると真っ暗になる
悲しい。
②の最後でも触れたが、イエティ内のShadowの中にカメラがあってそこと競合しているっぽい。
ここを非表示にするときちんと動いた。
ここまで書いたがほぼ迷うことなく実行まで行くことができた。簡単に認識するので、いろいろと遊ぶ余地はありそうでした。
この記事が気に入ったらサポートをしてみませんか?