前言
關於google vr sdk的具體使用,傳送門 Gvr SDK for Unity 分析(一)
Google Daydream平台已經整合進Google VR SDK
本文環境:Unity5.3.1 x64 , Gvr SDK 0.8 , VS2013
單詞翻譯
stereo:立體的; pose:姿勢; gaze:凝視,注視;Reticle:十字線,准星 ;Responder:應答者;
provider:提供者;ProviderFactory:工廠類; Emulator:仿真程序,仿真器
Perspective:透視,3D相機;Orthographic:正交,2D相機;
腳本參考
Scripts\
GazeInputModule.cs
功能:檢測用戶與系統的交互(通過觸發或控制器)
實現UnityEngine.UI.BaseInputModule接口(BaseInputModel繼承自UnityEngine.UI.UIBehaviour)
所以uGUI的元素在被選中或trigger ,touching 觸發的事件,可以傳遞出來。
GvrEye.cs
並排立體呈現模擬,有Left eye,Right eye,每一個控制 stereo 的單個camera
GvrHead.cs
用戶頭部跟蹤模擬,提供頭部跟蹤的數據給camera,在頭部運動過程中它附着的transform屬性也會同步發生改變。
GvrPostRender.cs
模擬鏡頭對立體畫面的失真校正
GvrPreRender.cs
清除整個屏幕。
原理:
Clear Flags 確定了屏幕哪些部分將被清除,這是為了方便使用多個攝像機渲染不同的游戲元素,每個相機在渲染時都會存儲顏色和深度信息。
屏幕的未繪制部分是空的,默認情況下會顯示天空盒。
當你使用多個相機時,每一個相機都將自己的顏色和深度信息存儲在緩沖區中,還將積累每個相機大量的的渲染數據。當場景中任何特定的相機進行渲染時,你可以設定清除標記來清除緩沖區信息的不同集合
camera.clear flags=Solid Color (純色)表示屏幕上的任何空的部分將顯示當前相機的背景顏色。
資料參考:Unity 3D-- 攝像機Clear Flags和Culling Mask屬性用途詳解
GvrProfile.cs
GvrView.cs
可以對vr view進行特殊的配置
Pose3D.cs
StereoController.cs
綁定在MainCamera上,兩個GvrEye渲染stereo view 內容的控制器
StereoRenderEffect.cs
Scripts\Audio\
GvrAudio.cs
空間音頻渲染,負責Gvr音頻類和系統原生音頻系統進行通信
GvrAudioListener.cs
GVR音頻監聽器組件,可提高音頻監聽器,提供先進的空間音頻功能。
GvrAudioRoom.cs
GVR音頻室組件,對綁定此組件的gameobject,模擬房間的環境影響
GvrAudioSource.cs
audiosource組件增強,給audiosource提供先進的空間音頻功能。
Scripts\Controller\
GvrController.cs
GVR Controller API的主入口
Scripts\Controller\Internal\ControllerProviders
Scripts\Controller\Internal\Emulator
EmulatorManager
包括:自動陀螺漂移校正,加速器事件監聽器,touch事件監聽器,指南針事件監聽器,按鈕事件監聽器
該目錄下有以下文件:
- EmulatorManager.cs
- EmulatorClientSocket.cs
- EmulatorConfig.cs
- EmulatorDataTypes.cs
- PhoneEvent.cs
Scripts\UI\
GvrGaze.cs
Class that can perform gaze-based selection, as a simple alternative to the more complicated path of using GazeInputModule and the rest of uGUI.
可以執行准星選中的操作,比起使用gazeinputmodule ,它作為一個簡單的替代
GvrReticle.cs
當用戶凝視任何對象時,在該對象前繪制一個十字准星
Scripts\VRDevices\
包括各種平台及運行環境的模擬
接口
IGvrGazePointer.cs
為GazeInputModule提供接口,接口中定義輸入輸出的處理函數
主要邏輯處理在GazeInputModule.UpdateReticle中
if (gazeObject == previousGazedObject) { if (gazeObject != null) { gazePointer.OnGazeStay(camera, gazeObject, intersectionPosition, isInteractive); } } else { if (previousGazedObject != null) { gazePointer.OnGazeExit(camera, previousGazedObject); } if (gazeObject != null) { gazePointer.OnGazeStart(camera, gazeObject, intersectionPosition, isInteractive); } }
IGverGazeResponder.cs
為GvrGaze提供接口,接口中定義了凝視的觸發事件
三個方法 OnGazeEnter OnGazeExit OnGazeTrigger 當准星對准任何Gameobject時的處理,具體請查看GvrGaze.cs中的HandleGaze
Resources
Resources\SolidColor.shader 純色填充
Resources\UnlitTexture.shader 無光照帖圖
Distortion\GvrDistortion.cginc 扭曲shader
Resources\UI\GvrReticleShader.shader 准星,十字線Shader
Resources\GvrAudioMixer.mixer 音頻文件
Plugins
AndroidManifest.xml
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
Google.ProtocolBuffers.dll
unity_gvr_activity.jar
android目錄下的jar包提供android的API給unity調用
Plugins\Android\unity gvr activity.aar
Plugins\Android\gvr_android_common.aar
Plugins\Android\libs\armeabi-v7a\libgvrunity.so
unitygvractivity_classes.jar
gvr_android_common_classes.jar
aar文件
*.aar是一種壓縮文件,和*.jar類似,不過它可以包含資源文件,例如圖片、drawable、xml資源
JD-GUI
Java反編譯工具 JD:http://jd.benow.ca/
如果運行JD-GUI報下圖錯誤
解決辦法
1. 請下載安裝jre 1.7.0
2. 把jd-gui.exe拷貝到jre安裝路徑下,就可以雙擊jd-gui.exe運行啦
參考資料
Java 存檔:http://www.oracle.com/technetwork/java/javase/archive-139210.html
GVR 官網API :Google VR for Unity SDK Script Reference
Set up a Daydream Development Kit : https://developers.google.com/vr/concepts/dev-kit-setup
Google、Unity等公司專家深度解讀VR平台Daydream:https://yq.aliyun.com/articles/54066