Table of Contents

Simulazione con file EIF in Unity

Questo articolo spiega come utilizzare file EIF per la simulazione in Unity, consentendo di svolgere la maggior parte dello sviluppo su computer e vedere visivamente i risultati.

Prima di iniziare

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

Inoltre, è necessario conoscere:

Abilitazione del frame player nella sessione

ARSession.AssembleOptions offre diversi modi per configurare la combinazione dei componenti della sessione. Un modo è impostare AssembleOptions.FrameSource su FramePlayer per abilitare il componente frame player, consentendo così l'utilizzo di file EIF per la simulazione.

Ad esempio:

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

È anche possibile, nell'editor, selezionare AR Session (EasyAR), e modificare l'opzione corrispondente in Assemble Options nella finestra Inspector:

alt text

In questo modo, all'avvio della sessione verrà abilitato il componente frame player, senza selezionare altri componenti frame source.

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

Questo video mostra l'effetto dell'utilizzo del frame player per la mappatura densa dello spazio in movimento su computer. A sinistra c'è la vista Hierarchy, al centro la vista Scene, a destra la vista Game. Il contenuto della vista Game è identico a ciò che l'utente vedrebbe nel mondo reale con uno smartphone.

Durante la riproduzione del file EIF, tutti i componenti funzionali AR nella sessione possono funzionare normalmente, così come i contenuti e la logica interattiva nella scena, consentendo di svolgere la maggior parte dello sviluppo su computer e vedere visivamente i risultati.

Consiglio

L'effetto visto su computer utilizzando il frame player per riprodurre EIF è sostanzialmente coerente con l'effetto sullo smartphone durante la registrazione del file EIF.

Importante

L'effetto di esecuzione durante la riproduzione di EIF nella scena è correlato al dispositivo utilizzato per la registrazione e alla sorgente frame scelta sul dispositivo in quel momento. Pertanto, durante la registrazione di file EIF, si consiglia di utilizzare un dispositivo identico o simile a quello target, per garantire che l'effetto durante la riproduzione sia coerente con quello sul dispositivo target. Allo stesso tempo, è necessario prestare particolare attenzione al fatto che la funzionalità di tracciamento del movimento sia abilitata durante la registrazione. Se il tracciamento del movimento non era abilitato durante la registrazione, non potrà essere abilitato durante la riproduzione, e le funzionalità AR che dipendono dal tracciamento del movimento (come la mappa spaziale densa, Mega, ecc.) non funzioneranno in modo coerente con il dispositivo.

Riproduzione all'avvio della sessione

Per impostazione predefinita, il frame player inizia automaticamente a riprodurre il file EIF all'avvio della sessione, ma prima della riproduzione è necessario specificare il percorso del file EIF. È possibile impostarlo tramite le proprietà FramePlayer.FilePathType e FramePlayer.FilePath.

Ad esempio:

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

È anche possibile, nell'editor, selezionare AR Session (EasyAR), e modificare le opzioni corrispondenti nel componente Frame Player nella finestra Inspector:

alt text

Se il file non è specificato o il percorso non è valido, il frame player non riuscirà ad avviarsi all'avvio della sessione e registrerà un messaggio di errore:

File not found:

Riproduzione manuale

Per controllare manualmente il momento della riproduzione, è possibile impostare FramePlayer.enabled su false prima di avviare la sessione,

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

È anche possibile, nell'editor, selezionare AR Session (EasyAR), e deselezionare Enabled per il componente Frame Player nella finestra Inspector:

alt text

Quando si desidera riprodurre, utilizzare Play() per avviare la riproduzione.

Ad esempio:

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

Ogni chiamata a Play() interromperà la riproduzione precedente (se presente) e ricomincerà dall'inizio.

Attenzione

Quando si riproducono nuovi dati, i dati originali nella scena non vengono cancellati. Lo stato dei componenti AR non viene reimpostato; si comporteranno come se i dati della fotocamera passassero improvvisamente dal punto in cui i dati precedenti si sono interrotti all'inizio dei nuovi dati.

Sebbene ciò non influisca molto su alcune funzionalità, per funzionalità che dipendono dal tracciamento del movimento (come la mappa spaziale densa, Mega, ecc.), potrebbe causare uno stato anomalo della funzionalità, influenzando l'effetto di esecuzione. Pertanto, si consiglia di riavviare la sessione prima di riprodurre nuovi dati per reimpostare lo stato di tutti i componenti AR.

Pausa e ripresa

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

Ad esempio, impostare FramePlayer.enabled = false per mettere in pausa la riproduzione:

player.enabled = false;

Dopo la pausa della riproduzione, tutti i componenti funzionali AR si interromperanno. I contenuti e la logica interattiva nella scena non si interromperanno necessariamente, dipende dai contenuti stessi. Riprendendo la riproduzione, i componenti funzionali AR riprenderanno dal punto in cui erano stati messi in pausa.

Interruzione della riproduzione

Utilizzare Stop() per interrompere la riproduzione.

player.Stop();

Dopo l'interruzione della riproduzione, tutti i componenti funzionali AR si interromperanno. I contenuti e la logica interattiva nella scena non si interromperanno necessariamente, dipende dai contenuti stessi.

Salto a un punto temporale specifico (seek)

Utilizzare Seek(double) per saltare a un punto temporale specifico per la riproduzione.

Ad esempio, saltare a 5 secondi dopo per la riproduzione:

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

Dopo il salto, la riproduzione potrebbe non iniziare dall'esatto punto temporale, a seconda del metodo di codifica del file EIF e dell'intervallo dei fotogrammi chiave.

Non tutti i file EIF supportano la riproduzione con salto. È possibile utilizzare la proprietà IsSeekable per verificare se il file EIF attualmente in riproduzione supporta la riproduzione con salto.

Nota

Solo i file EIF registrati con il formato H264 e con registrazione interrotta correttamente supportano la riproduzione con salto. Se il file EIF non supporta la riproduzione con salto, la chiamata a Seek(double) non avrà alcun effetto.

Controllo della velocità di riproduzione

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

Ad esempio, impostare la velocità di riproduzione aumentandola di 0,1 volte rispetto all'originale:

player.Speed += 0.1;

Non tutti i file EIF supportano il controllo della velocità di riproduzione. È possibile utilizzare la proprietà IsSpeedChangeable per verificare se il file EIF attualmente in riproduzione supporta il controllo della velocità.

Nota

Solo i file EIF registrati con il formato H264 e con registrazione interrotta correttamente supportano il controllo della velocità di riproduzione. Se il file EIF non supporta il controllo della velocità, l'impostazione di Speed non avrà alcun effetto.

Argomenti correlati