2014-12-17 8 views
9

Con Unity, lo script CardboardHead viene aggiunto alla fotocamera principale e gestisce tutto molto bene, ma devo essere in grado di "aggiornare" la vista su richiesta e l'unica opzione I vedere finora è quello di rorating l'intera scena e sembra che questo è qualcosa che sarebbe indirizzato di prima mano e non riesco a trovare nulla nei documenti.Recenter o riorienta la vista con Cardboard SDK su Unity

Con Oculus Mobile SDK (GearVR), sarebbe OVRCamera.ResetCameraPositionOrientation (Vector3.one, Vector3.zero, Vector3.up, Vector3.zero); anche se lo gestiscono bene ogni volta che lo spettatore viene inserito, quindi è raramente necessario.

risposta

6

C'è un parametro "target" su CardboardHead che consente di utilizzare un altro oggetto di gioco come riferimento per la rotazione. Oppure puoi usare un gioco fittizio genitore. In entrambi i casi, quando si desidera il più recente, si imposta la rotazione di questo oggetto di riferimento in modo che CardboardHead sia ora rivolta in avanti. Aggiungi questa funzione per uno script sul CardboardHead (o semplicemente aggiungere in quello script):

public void Recenter() { 
    Transform reference = target != null ? target : transform.parent; 
    if (reference != null) { 
     reference.rotation = Quaternion.Inverse(transform.rotation) * reference.rotation; 
     // next line is optional -- try it with and without 
     reference.rotation = Quaternion.FromToRotation(reference.up, Vector3.up) * reference.rotation; 
    } 
} 
6

Cardboard.SDK.Recenter(); dovrebbe fare il trucco.

Orientamento Recenter È stata aggiunta la funzione Recenter() a Cardboard.SDK, che reimposta il head tracker in modo che la direzione corrente del telefono diventi la direzione di avanzamento (+ asse Z).

Impossibile trovare i documenti per l'API/SDK ma è nello release notes per l'aggiornamento v0.4.5.

+0

Questo ha fatto il trucco nella v0.7.0 ma da quando ho aggiornato a 0.9.1 non funziona più. Molto strano. – Pedro

1

È possibile ruotare il cartone principale per puntare in una determinata direzione.

Questo è ciò che ha funzionato per me quando volevo che l'app iniziasse puntando in un certo modo. Dato che il Cardboardhead punta a Vector3.zero all'avvio se non è assegnato alcun bersaglio, durante la Start ho usato una funzione per il CardboardMain che puntava nella direzione che volevo.

Ovviamente, se stai già ruotando CardboardMain per qualche altro motivo, potrebbe essere possibile utilizzare questo stesso metodo creando un genitore di CardboardHead (figlio di CardboardMain) e facendo la stessa cosa.

1

Questa domanda è un po 'vecchio, ma per Google VR SDK 1.50+ si può fare

transform.eulerAngles = new Vector3(newRot.x, newRot.y, newRot.z); 
UnityEngine.VR.InputTracking.Recenter(); 

anche, se non si vuole fare confusione è necessario anche prendere l'istanza GvrEditorEmulator e Ricentra come bene.

#if UNITY_EDITOR 
     gvrEditorEmulator.Recenter(); 
#endif 

ricentramento GvrEditorEmulator anche se non sembra funzionare molto bene in questo momento, ma se si disattiva esso vi vedere le opere ricentraggio per la fotocamera principale.

Problemi correlati