本文へスキップ

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

アングル1から録画した銅像のプレイバックアングル2から録画した銅像のプレイバック2

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

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

前提条件

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

手順

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

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

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

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 Scanning manager

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

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

    1. Project ウィンドウの Assets フォルダ内で右クリックし、 Create メニューから C#スクリプト を選択します。 新しいスクリプトに StartScript という名前をつけます。 もう1つスクリプトを作成し、 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を渡すようにします。

    RecordScripts gameobject

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

    録画スクリプト録画スクリプトを停止

  3. デバイスにビルドしてテストしてください。

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

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

iOSからのエクスポート

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

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 ディレクトリにコピーされていることを確認してください。