プレイバック用データセットの作成方法


Lightshipのレコーディング機能を使えば、ARアプリケーションの実際の位置を記録して、Unityエディタでプレイバックしたりテストしたりできます。 プレイバックデータセットの作成は、レコーディング サンプルプロジェクトを使用するか、APIを使用して録画することができます。
スキャニングサンプルを使って録画する
前提条件
レコーディングサンプル・プロジェクトを使用してスキャンするには、それをダウンロードし、お使いのデバイスにビルドする必要があります。 詳しくは、 録画のサンプルプロジェクト をご覧ください。
手順
サンプルを使ってプレイバックデータセットを記録します:
- レコーディングサンプルをデバイスで開きます。 データセッ トを記録する準備ができたら、 Startをタップします。
 - デバイスのカメラを使って環境を記録します。 次のことに留意してください:
 
- デバイスを ポートレートモードにしておきます。
 - データセットの誤差を減らすため、できるだけ安定してデバイスを持つこと。
 - サンプルは1分ごとにデータセットの記録を保存します。 録画時間が1分を超えると、アプリは新しい録画を開始します。 (例えば、3.5分間録音した場合、サンプルは4つの別々のデータセットを作成します。)
 
- Stop をタップして録音を終了します。
 - 準備ができたら、 Export をタップして、最新の録画を再生データセットに変換します。
 - エクスポートが完了すると、サンプルにはアーカイブされたデータセットへのパスが表示されます。 このパスを保存してから、 Accessing Your Recorded Data on the Device(デバイスで録画データにアクセスする) に進んでください。
 

APIを使ってデータセットを記録する
録画のサンプルではプロジェクトに必要な機能が不足している場合は、 自分で録画アプリを作成することもできます。
前提条件
ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳細については、ARDK 3のインストールと 基本的なARシーンの設定を参照してください。
手順
- Lightship Settingsでスキャンを有効にします:
- Lightship トップメニューで、 Settingsを選択します。
 - Inspector ウィンドウで、 Scanningというラベルの付いたボックスをチェックします。
 
 

- AR Sceneで、 AR Scanning Manager をシーンに追加し、無効にします:
- ARSession 
GameObjectを選択する。 - Inspector ウィンドウで、 Add Componentをクリックし、 AR Scanning Manager を追加します。
 AR Scanning Manager (Script)の横にあるチェックボックスをオフにして、無効にします。
 - ARSession 
 

- シーンに2つのボタンを作成します。1つは録画を開始するボタン、もう1つは録画を停止するボタンです。
- Hierarchyで右クリックし、 UI メニューで、 ボタンを選択する。 ボタンの名前を"Record"に変更する。
 - 前のステップを繰り返し、新しいボタンに "Stop "という名前を付ける。
 - 各ボタンについて、その 
GameObjectを展開し、Textサブオブジェクトを選択し、Textフィールドを、必要に応じて "Record "または "Stop "に変更します。 - シーンビューのボタンを好きな場所に移動する。
 
 - レコーディングを起動するスクリプトを作成し、それをボタンに接続する:
- Project ウィンドウの Assets フォルダ内で右クリックし、 Create メニューから C#スクリプト を選択します。 新しいスクリプトに 
StartScriptという名前をつけます。 もう1つスクリプトを作成し、RecorderInputという名前を付けます。 スクリプトに以下のコードを入力して下さい: 
 - Project ウィンドウの Assets フォルダ内で右クリックし、 Create メニューから C#スクリプト を選択します。 新しいスクリプトに 
 
クリックしてStartScript.csを表示
  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;
  public class StartScript : MonoBehaviour
  {
      public void Start() {
          // Androidの場合は位置情報の使用許可を得る
          // 次に位置情報とコンパスサービスを有効にする
  #if UNITY_ANDROID
          if (!Permission.HasUserAuthorizedPermission(Permission.FineLocation))
          {
              var androidPermissionCallbacks = new PermissionCallbacks();
              androidPermissionCallbacks.PermissionGranted += permissionName =>
              {
                  if (permissionName == "android.permission.ACCESS_FINE_LOCATION")
                  {
                      Start();
                  }.
              };
              Permission.RequestUserPermission(Permission.FineLocation, androidPermissionCallbacks);
              return;
          }.
  #endif
          Input.compass.enabled = true;
          Input.location.Start();
      }.
  }
クリックしてRecorderInput.csを表示
using System.Collections;
using System.Collections.Generic;
using Niantic.ARDK.AR.Scanning;
using Niantic.Lightship.AR.Scanning;
using UnityEngine;
public class RecorderInput : MonoBehaviour
{
    [SerializeField] private ARScanningManager _arScanningManager;
    public async void StopRecordingAndExport() {
        // SaveScan()で録画を保存
        // ScanStore()で参照を取得し、ScanArchiveBuilder()でエクスポート
        // 再生録画へのパスをデバッグメッセージとして出力
        string scanId = _arScanningManager.GetCurrentScanId();
        await _arScanningManager.SaveScan();
        var savedScan = _arScanningManager.GetScanStore().GetSavedScans().Find(scan => scan.ScanId == scanId);
        ScanArchiveBuilder builder = new ScanArchiveBuilder(savedScan, new UploadUserInfo());
        while (builder.HasMoreChunks())
        {
            var task = builder.CreateTaskToGetNextChunk();
            task.Start();
            await task;
            Debug.Log(task.Result); // <- これが再生録画へのパスです。
        }
        _arScanningManager.enabled = false;
    }
    public void StartRecording() {
        _arScanningManager.enabled = true;
    }
}
- Hierarchyで右クリックし、 Create Emptyを選択します。 新しい
GameObjectに"RecordScripts"という名前を付けます。RecordScriptsを選択した状態で、 Inspector ウィンドウで Add Component をクリックし、StartScriptを追加します。 また、RecorderInputを追加し、HierarchyからAR Scanning Managerを渡すようにします。 

- Hierarchyで
Recordボタンを選択し、RecordScriptsと言うGameObjectをフィールドにドラッグしてRecorderInput.StartRecordingを選択し、InspectorのOnClickフィールドにスクリプトを追加します。Stopボタンについても同様の手順を行い、最後にRecorderInput.StopRecordingAndExportを選択します。 


- デバイスにビルドしてテストしてください。
 
デバ イス上の録画データにアクセスする
お使いのデバイスのオペレーティングシステムの指示に従ってください:
iOSからのエクスポート
- デバイスの開発者モードを有効にします。
- 設定アプリを開き、「プライバシーとセキュリティ」メニューを開いて「開発者モード」を有効にする。
 
 - デバイスをXcodeに接続します。
 - Windowのトップメニューを開き、Device and Simulatorsを選択し、サンプルアプリを見つけます。
 - アプリを選択した状態で、3点ドットメニューをクリックし、 Download Container(コンテナのダウンロード) をクリックします。
 

- コンテナがマシンにダウンロードされたら、パッケージを右クリックし、 Show Package Contentsをクリックします。
 - 録画出力からパスに移動します(例: 
AppData/Documents/scankit/(ID of your scan)/chunk_0.tgz)。 - アーカイブをあなたのマシンにコピーし、解凍してください。
 
アンドロイドからのエクスポート
- デバイスを開発マシンに接続します。
 - デバイスからファイルを取得します:
- MacOS: Android File Transfer を開き、録画の出力先パスに移動します。 または、Android StudioのDevice Explorerや、他の任意のツールを使用することもできます。
 - Windows:何をするか尋ねるダイアログがポップアップ表示されたら、 File Tansferを選択し、レコーディングのパスに移動します。
 
 - アーカイブをあなたのマシンにコピーし、解凍してください。
 
Unityでプレイバックデータを使う
プレイバックデータセットをUnityに追加する:
- Edit メニューから Project Settings を開き、 XR Plugin Management までスクロールダウンし、 Niantic Lightship SDKを選択する。
 - Editor Playbackを有効にし、 Dataset Path フィールドにデータセットの絶対パスを入力する。
 - デバイスでのプレイバックを使用する場合は、ビルドする前に、データセットがUnityプロジェクトの 
Assets/StreamingAssetsディレクトリにコピーされていることを確認してください。