Table of Contents

Simulare l'esecuzione con file EIF in Unity

Questo articolo spiega come usare i file EIF per simulare l'esecuzione in Unity, così da poter fare la maggior parte del lavoro di sviluppo sul computer e vedere il risultato in modo intuitivo.

Prima di iniziare

La simulazione usa file EIF come input, quindi prima di iniziare è necessario registrare un file EIF:

Inoltre, è utile comprendere:

Abilitare il frame player della session

ARSession.AssembleOptions offre diversi modi per configurare la composizione dei componenti della session. Uno di questi consiste nell'impostare AssembleOptions.FrameSource su FramePlayer per abilitare il componente frame player, così da poter usare file EIF per simulare l'esecuzione.

Per esempio:

Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;

Puoi anche farlo nell'editor: seleziona AR Session (EasyAR) e modifica l'opzione corrispondente in Assemble Options nella finestra Inspector:

alt text

In questo modo, quando la session si avvia, verrà abilitato il componente frame player invece di selezionare altri componenti frame source.

L'effetto della riproduzione di file EIF con frame player è mostrato nel video seguente:

Questo video mostra l'effetto dell'uso del frame player per eseguire la mappatura spaziale densa sul computer. A sinistra c'è la vista Hierarchy, al centro la vista Scene, a destra la vista Game. Il contenuto della vista Game è lo stesso che l'utente vede sul telefono nel mondo reale.

Durante la riproduzione del file EIF, tutti i componenti AR della session possono funzionare normalmente, così come il contenuto della scena e la logica di interazione, permettendoti di fare la maggior parte del lavoro di sviluppo sul computer e vedere il risultato in modo intuitivo.

Consiglio

L'effetto che vedi riproducendo EIF con frame player sul computer è sostanzialmente lo stesso che vedi sul telefono durante la registrazione del file EIF.

Importante

Il risultato di esecuzione durante la riproduzione EIF nella scena dipende dal dispositivo usato per registrare e dalla frame source scelta in quel momento. Per questo, quando registri EIF, è consigliato usare un dispositivo uguale o simile al dispositivo di destinazione, così da garantire che l'effetto di riproduzione sia coerente con quello del dispositivo target. Bisogna anche prestare attenzione a se la funzione di tracking del movimento nella scena era attiva durante la registrazione. Se non era attiva durante la registrazione, non potrà esserlo nemmeno durante la riproduzione, e le funzioni AR che dipendono dal tracking del movimento (per esempio la mappatura spaziale densa, Mega, ecc.) non funzioneranno come sul dispositivo.

Riprodurre all'avvio della session

Per impostazione predefinita, quando la session si avvia, il frame player inizia automaticamente a riprodurre il file EIF. Prima della riproduzione, però, è necessario specificare il percorso del file EIF; questo può essere configurato tramite le proprietà FramePlayer.FilePathType e FramePlayer.FilePath.

Per esempio:

var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;

Puoi anche farlo nell'editor: seleziona AR Session (EasyAR) e modifica l'opzione corrispondente nel componente Frame Player nella finestra Inspector:

alt text

Se non viene specificato alcun file, o se il percorso del file non è valido, il frame player fallirà all'avvio della session e mostrerà un log di errore:

File not found:

Riproduzione manuale

Se vuoi controllare manualmente quando far partire la riproduzione, prima di avviare la session puoi impostare FramePlayer.enabled su false:

Session.GetComponent<FramePlayer>().enabled = false;

Puoi anche farlo nell'editor: seleziona AR Session (EasyAR) e deseleziona Enabled nel componente Frame Player nella finestra Inspector:

alt text

Quando devi riprodurre, usa Play() per avviare la riproduzione.

Per esempio:

if (Session.Assembly.FrameSource is FramePlayer player)
{
    player.Play();
}

Ogni chiamata a Play() interrompe la riproduzione precedente e ricomincia dall'inizio (se era già stata riprodotta in precedenza).

Attenzione

Durante la riproduzione di nuovi dati, i dati già presenti nella scena non vengono cancellati. Anche lo stato dei componenti AR non viene reimpostato; si comporteranno come se i dati della telecamera saltassero improvvisamente dal punto in cui i dati precedenti si erano fermati al punto di inizio dei nuovi dati.

Anche se questo non influisce molto su alcune funzioni, per le funzioni che dipendono dal tracking del movimento (per esempio la mappatura spaziale densa, Mega, ecc.) può causare stati anomali e influire sul risultato di esecuzione. Per questo si consiglia di riavviare la session prima di riprodurre nuovi dati, così da reimpostare lo stato di tutti i componenti AR.

Pausa e ripresa

Usa FramePlayer.enabled per controllare la pausa e la ripresa della riproduzione.

Per esempio, imposta FramePlayer.enabled = false per mettere in pausa la riproduzione:

player.enabled = false;

Dopo la pausa, tutti i componenti AR smetteranno di funzionare. Il contenuto della scena e la logica di interazione potrebbero non fermarsi, a seconda del contenuto stesso. Dopo la ripresa, i componenti AR continueranno a funzionare dal punto in cui erano stati messi in pausa.

Arrestare la riproduzione

Usa Stop() per arrestare la riproduzione.

player.Stop();

Dopo l'arresto, tutti i componenti AR smetteranno di funzionare. Il contenuto della scena e la logica di interazione potrebbero non fermarsi, a seconda del contenuto stesso.

Saltare a un punto temporale specifico (seek)

Usa Seek(double) per saltare a un punto temporale specifico.

Per esempio, salta avanti di 5 secondi:

player.Seek(player.Time + 5);
Nota

Dopo il salto, la riproduzione potrebbe non iniziare esattamente dal punto temporale indicato, a seconda di come è codificato il file EIF e dell'intervallo tra i keyframe.

Non tutti i file EIF supportano il seek. Puoi usare la proprietà IsSeekable per verificare se il file EIF in riproduzione supporta il seek.

Nota

Solo i file EIF registrati nel formato H264 e fermati correttamente supportano la riproduzione con seek. Se il file EIF non supporta il seek, chiamare Seek(double) non avrà alcun effetto.

Controllo della velocità di riproduzione

Usa la proprietà Speed per controllare la velocità di riproduzione.

Per esempio, aumenta la velocità di riproduzione di 0.1 rispetto al valore iniziale:

player.Speed += 0.1;

Non tutti i file EIF supportano il controllo della velocità. Puoi usare la proprietà IsSpeedChangeable per verificare se il file EIF in riproduzione supporta il controllo della velocità.

Nota

Solo i file EIF registrati nel formato H264 e fermati correttamente supportano il controllo della velocità. Se il file EIF non lo supporta, impostare Speed non avrà alcun effetto.

Argomenti correlati