本文へスキップ

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

像のアングル1の再生録画像のアングル2の再生録画

Lightshipのレコーディング機能を使えば、ARアプリケーションの実際の位置を記録して、Unityエディタでプレイバックしたりテストしたりできます。 プレイバックデータセットの作成は、レコーディング サンプルプロジェクトを使用するか、APIを使用して録画することができます。

スキャニングサンプルを使って記録する

前提条件

レコーディングサンプル・プロジェクトを使用してスキャンするには、それをダウンロードし、お使いのデバイスにビルドする必要があります。 詳しくはレコーディング・サンプル・プロジェクトをご覧ください。

ステップ

サンプルを使ってプレイバックデータセットを記録します:

  1. レコーディングサンプルをデバイスで開きます。 データセットを記録する準備ができたら、 Startをタップします。
  2. デバイスのカメラを使って環境を記録します。 次のことに留意してください:
  • デバイスを ポートレートモードにしておきます。
  • データセットの誤差を減らすため、できるだけ安定してデバイスを持つこと。
  • サンプルは1分ごとにデータセットの記録を保存します。 1分後に録音を続けると、アプリは新しい録音を開始します。 (例えば、3.5分間録音した場合、サンプルは4つの別々のデータセットを作成します。)
  1. Stop をタップして録音を終了します。
  2. 準備ができたら、 Export をタップして、最新の録画を再生データセットに変換します。
  3. エクスポートが完了すると、サンプルにはアーカイブされたデータセットへのパスが表示されます。 このパスを覚えておき、「デバイス上の記録データにアクセスする」に進みます。

録音サンプルを使ってデータセットを作成する

APIを使ってデータセットを記録する

レコーディング・サンプルがあなたのプロジェクトにとって限定的すぎる場合、代わりに独自のレコーディング・アプリを作成することができます。

前提条件

ARDK がインストールされたUnityプロジェクトと、セットアップされた基本的な AR シーンが必要です。 詳細については、 ARDK 3のインストール および ARシーンの設定を参照してください。

ステップ

  1. Lightship Settingsでスキャンを有効にします:

    1. Lightship トップメニューで、 Settingsを選択します。
    2. Inspector ウィンドウで、 Scanningというラベルの付いたボックスをチェックします。

    設定でスキャンを有効にする

  2. AR Sceneで、 AR Scanning Manager をシーンに追加し、無効にします:

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

    ARスキャニング・マネージャー

  3. シーンに2つのボタンを作成します。1つは録画を開始するボタン、もう1つは録画を停止するボタンです。

    1. Hierarchyで右クリックし、 UI メニューで、 ボタンを選択する。 ボタンの名前を"Record"に変更する。
    2. 前のステップを繰り返し、新しいボタンに "Stop "という名前を付ける。
    3. 各ボタンについて、その GameObject を展開し、 Text サブオブジェクトを選択し、 Text フィールドを、必要に応じて "Record "または "Stop "に変更します。
    4. シーンビューのボタンを好きな場所に移動する。
  4. レコーディングを起動するスクリプトを作成し、それをボタンに接続する:

    1. プロジェクトウィンドウでAssetsフォルダを右クリックし、CreateメニューからC#スクリプトを選択します。 新しいスクリプトの名前は StartScript。 別のスクリプトを作成し、RecorderInputと名付けます。 スクリプトに以下のコードを入力して下さい:
クリックしてStartScript.csを表示する
```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();
}.
}

</details>


<details>
<summary>クリックしてRecorderInput.csを表示する</summary>
```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;
}.

}
  1. Hierarchyで右クリックし、 Create Emptyを選択します。 新しいGameObjectに"RecordScripts"という名前を付けます。 RecordScriptsを選択した状態で、Inspectorウィンドウで、Add Componentをクリックし、StartScript を追加します。 また、RecorderInputを追加し、HierarchyからAR Scanning Managerを渡すようにします。

    レコードスクリプト gameobject

  2. HierarchyRecordボタンを選択し、RecordScriptsと言うGameObjectをフィールドにドラッグしてRecorderInput.StartRecordingを選択し、InspectorOnClickフィールドにスクリプトを追加します。 最後にRecorderInput.StopRecordingAndExportを選択する。

    レコードスクリプト録画停止スクリプト

  3. あなたのデバイスにビルドしてテストしてみてください!

デバイス上の記録データにアクセスする

お使いのデバイスのオペレーティングシステムの指示に従ってください:

iOSからのエクスポート

  1. デバイスの開発者モードを有効にする:
    1. 設定アプリを開き、「プライバシーとセキュリティ」メニューを開いて「開発者モード」を有効にする。
  2. デバイスをXcodeに接続します。
  3. Windowのトップメニューを開き、Device and Simulatorsを選択し、サンプルアプリを見つけます。
  4. アプリをハイライトした状態で、3つのドットメニューをクリックし、「コンテナをダウンロード」をクリックします。

XCodeコンテナメニュー

  1. コンテナがマシンにダウンロードされたら、パッケージを右クリックし、 Show Package Contentsをクリックします。
  2. 録画出力からパスに移動します(例: AppData/Documents/scankit/(ID of your scan)/chunk_0.tgz)。
  3. アーカイブをあなたのマシンにコピーし、解凍してください。

アンドロイドからのエクスポート

  1. デバイスを開発マシンに接続します。
  2. デバイスからファイルを取得します:
    1. MacOS:Android File Transferを開き、録画出力からパスに移動する。 また、Android StudioのDevice Explorerや、お好みの他のツールを使用することもできます。
    2. Windows:何をするか尋ねるダイアログがポップアップ表示されたら、 File Tansferを選択し、レコーディングのパスに移動します。
  3. アーカイブをあなたのマシンにコピーし、解凍してください。

Unityでプレイバックデータを使う

プレイバックデータセットをUnityに追加する:

  1. Edit メニューから Project Settings を開き、 XR Plugin Management までスクロールダウンし、 Niantic Lightship SDKを選択する。
  2. Editor Playbackを有効にし、 Dataset Path フィールドにデータセットの絶対パスを入力する。
  3. オンデバイス再生を使用する場合は、ビルドする前に、データセットがUnityプロジェクトのAssets/StreamingAssetsディレクトリにコピーされていることを確認してください。