本文へスキップ

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

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

前提条件

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

独自の録画アプリを作成するには、Lightship ARを有効にしたUnityプロジェクトが必要です。 詳細については、 ARDK 3.0 のインストールを参照してください。

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

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

  1. レコーディングサンプルをデバイスで開きます。 データセットを記録する準備ができたら、 Startをタップします。
  2. デバイスのカメラを使って環境を記録します。 次のことに留意してください:
  • デバイスを ポートレートモードにしておきます。
  • データセットの誤差を減らすため、できるだけ安定してデバイスを持つこと。
  • このサンプルには、 データセットを記録するための1分間のタイムリミット があります。
  1. Stop をタップして録音を終了します。
  2. 準備ができたら、 Export をタップして、最新の録画を再生データセットに変換します。
  3. エクスポートが完了すると、サンプルにはアーカイブされたデータセットへのパスが表示されます。 このパスを覚えておくと、後でエディターでデータセットを探すときに便利です。

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

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

Unityでロケーションスキャナーを作成するには:

  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) の横にあるチェックボックスをオフにして、無効にします。
  3. シーンに2つのボタンを作成します。1つは録画を開始するボタン、もう1つは録画を停止するボタンです。
    1. Hierarchyで右クリックし、 UI メニューで、 ボタンを選択する。 ボタンの名前を"Record"に変更する。
    2. 前のステップを繰り返し、新しいボタンに "Stop "という名前を付ける。
    3. 各ボタンについて、その GameObject を展開し、 Text サブオブジェクトを選択し、 Text フィールドを、必要に応じて "Record "または "Stop "に変更します。
    4. シーンビューのボタンを好きな場所に移動する。
  4. レコーディングを起動するスクリプトを作成し、それをボタンに接続する:
    1. Assets ウィンドウで右クリックし、 Create メニューから C# Script を選択します。 新しいスクリプトの名前は StartScript。 これをもう2回繰り返し、スクリプト名を RecordButtonStopButtonとする。
    2. Hierarchyで右クリックし、 Create Emptyを選択する。 新しい GameObject "Startup "と名付ける。 1. Startup を選択した状態で、 Inspector ウィンドウで、 Add Component をクリックし、 StartScriptStartupに追加します。
    3. Hierarchyで各ボタンを選択し、 InspectorOnClick フィールドに適切なスクリプトを追加します。
  5. このページの最後にあるコードを適切なスクリプトに追加し、あなたのデバイスにビルドしてテストしてください!

レコードデータのエクスポート

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

iOSからのエクスポート

  1. デバイスをXcodeに接続し、開発者モードを有効にする。
  2. Device and Simulatorsで、サンプルアプリを見つけてください。
  3. ドットメニューを使って、 Download Containerをタップする。
  4. コンテナがマシンにダウンロードされたら、パッケージを右クリックし、 Show Package Contentsをクリックする。
  5. 録画出力からパスに移動します(例: AppData/Documents/scankit/(ID of your scan)/chunk_0.tgz).
  6. アーカイブをマシンにコピーし、Unityプロジェクトの Assets/StreamingAssets ディレクトリに解凍します。

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

  1. デバイスを開発マシンに接続する。
  2. デバイスからファイルを取得します:
    1. iOS: Android File Transferを開いて、レコーディング出力からパスに移動してください。
    2. Windows:何をするか尋ねるダイアログがポップアップ表示されたら、 File Tansferを選択し、レコーディングのパスに移動します。
  3. アーカイブをマシンにコピーし、Unityプロジェクトの Assets/StreamingAssets ディレクトリに解凍します。

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

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

  1. Edit メニューから Project Settings を開き、 XR Plugin Management までスクロールダウンし、 Niantic Lightship SDKを選択する。
  2. Editor Playbackを有効にし、 Dataset Path フィールドにデータセットの絶対パスを入力する。

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();
}.
}

レコードボタン.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RecordButton : MonoBehaviour
{
// 録画を開始するためにスキャンマネージャーを有効にする
public void StartRecording() {
ARScanningManager.enabled = true;
}.

}

停止ボタン.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StopButton : MonoBehaviour
{
public async void StopRecordingAndExport() {

// SaveScan()で録画を保存
// ScanStore()で参照を取得し、ScanArchiveBuilder()でエクスポート
// 再生録画へのパスをデバッグメッセージとして出力
string scanId = ARScanningManager.GetCurrentScanId();
await ARScanningManager.SaveScan();
var savedScan = ARScanningManager.GetScanStore().GetSavedScan().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;
}.

}