[英]Recenter or Reorient view with Cardboard SDK on Unity
使用Unity,CardboardHead腳本被添加到主攝像頭並且可以很好地處理所有內容,但我需要能夠按需“重新定位”視圖,而我到目前為止看到的唯一選項是漫游整個場景,似乎像這樣是第一手資料,我在文檔中找不到任何東西。
使用Oculus Mobile SDK(GearVR),它將是OVRCamera.ResetCameraPositionOrientation(Vector3.one,Vector3.zero,Vector3.up,Vector3.zero); 雖然每次觀看者佩戴時都能很好地處理,所以很少需要它。
CardboardHead上有一個“目標”參數,可讓您使用另一個游戲對象作為旋轉參考。 或者你可以使用虛擬父游戲對象。 無論哪種方式,當您想要重新定位時,您可以設置此參考對象的旋轉,以便CardboardHead現在指向前方。 將此函數添加到CardboardHead上的腳本(或者只是將其添加到該腳本中):
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;
}
}
Cardboard.SDK.Recenter ();
應該做的伎倆。
Recenter orientation將Cardnter.SDK添加到Receboard()功能,重置頭部跟蹤器,使手機的當前標題成為正向(+ Z軸)。
無法找到API / SDK的文檔,但它位於v0.4.5更新的發行說明中。
您可以旋轉Cardboard Main以指向某個方向。
當我希望應用程序以某種方式啟動時,這對我有用。 由於如果沒有分配目標,CardboardHead在啟動時指向Vector3.zero,我在Start()期間為CardboardMain運行了一個函數,該函數將指向我想要的方向。
當然,如果你因為其他原因已經在旋轉CardboardMain,可以通過創建CardboardHead的父級(CardboardMain的子級)並執行相同的操作來使用相同的方法。
這個問題有點舊,但對於Google VR SDK 1.50+,你可以做到
transform.eulerAngles = new Vector3(newRot.x, newRot.y, newRot.z);
UnityEngine.VR.InputTracking.Recenter();
此外,如果您不想讓您感到困惑,您還需要捕獲GvrEditorEmulator實例並同時重新啟動它。
#if UNITY_EDITOR
gvrEditorEmulator.Recenter();
#endif
雖然接收GvrEditorEmulator目前似乎不能很好地工作,但如果你禁用它,你會看到主攝像機的重新調整工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.