不知道怎么開發(fā)VR游戲?Unity5.3官方VR教程重磅登場-系列2
筑基
為了準備好學習使用Unity開發(fā)VR應用,我們首先要檢查下自己的電腦硬件和軟件配置是否滿足要求。簡單來說,顯卡要NVIDIA GTX970或AMD290以上,CPU要Intel i5-459以上,內(nèi)存8GB以上,要有兩個USB3.0接口,一個USB2.0接口,一個HDMI 1.3接口。
操作系統(tǒng)比較坑爹,不支持Mac,也不支持Linux。支持Win7,Win8,Win10。
當然,還要把自己的顯卡驅動升級到***版本。
Oculus官方的檢測地址:oculus.us5.list-manage.com
關于電腦配置的相關信息,可以參考:Oculus Rift明天開啟預訂,你的電腦配置夠不?(新增官方檢測工具地址)
一旦完成了這種燒錢的工作,就該安裝Unity了。注意在打開Unity前要把DK2連接好并開啟。 在繼續(xù)之前,打開Oculus Configuration Utility應用,并檢查Demo Scene可以正常運行。注意在運行Demo Scene之前看可能需要在Oculus Configuration Utility中設置一個新用戶。
創(chuàng)建***個VR項目
接下來我們將使用Unity創(chuàng)建一個簡單的VR項目demo,其效果是在VR頭盔中觀察一個立方體。如果你想研究更多VR示例,不妨下載我們在上一篇教程中提到的VR示例項目(Asset Store)。
Step 1.
打開Unity,創(chuàng)建一個新的空項目。
說明一下,我當前用的Unity版本是5.3.1f1,可能你看到這篇教程的時候又已經(jīng)升級換代了。
Step 2.
在Unity的菜單中選擇Fiel- Build Settings,并選中PC,Mac& Linux Standalone
Step 3.
在場景中創(chuàng)建一個新的立方體,從菜單中選擇Game Object - 3D Object -Cube ,通過Translate工具把立方體放到默認的Main Camera 前面,類似下面。
Step 4.
保存界面(File- Save Scene,或是使用快捷鍵)。
Step 5.
在菜單中選擇Edit- Project Settings - Player,在”Other Settings“部分勾選”Virtual Reality Supported”
Step 6.
點擊Unity界面上的Play按鈕進入Play模式。
如果之前的設置沒有問題,現(xiàn)在你應該可以通過DK2看到這個場景,四處看看,Unity中的攝像機將自動根據(jù)DK2的位置和旋轉變化反應。
出錯了怎么辦?
如果你沒有在DK2中看到期望的場景,那么檢查以下的事項:
- 確保你在打開Unity項目前就已經(jīng)把DK2接好并且開啟了。
- 打開Oculus自帶的Oculus Configuration Utility,看看Demo Scene是不是可以正常運作
- 更新你的顯卡驅動到***版本
- 確保你在電腦上裝了***的Oculus Runtime 0.8,或更高版本。
當然,如果還是有問題,可以到論壇里面參與討論。Virtual Reality
關于VR開發(fā)的一些有用信息:
雖然VR應用開發(fā)和標準Unity應用開發(fā)很相似,不過還是有些區(qū)別需要注意的。
1、編輯器中顯示的幀速(Frame rate)
當你通過編輯器查看項目時,注意體驗上可能有些延遲,因為電腦需要將同樣的內(nèi)容渲染兩次。所以在實際測試項目的時候,***創(chuàng)建一個可執(zhí)行版本,在測試設備上實際體驗。
2、攝像機的移動
注意,我們不能在Unity中直接移動VR攝像機。如果你希望調(diào)整攝像機的位置和旋轉,需要確保將它設置為其它游戲物體GameObject的子物體,然后通過所依附的物體進行移動。
關于這一點,可以查看VR Samples項目中的Flyer和Maze場景。
3、相機節(jié)點
左眼和右眼的攝像機并不是由Unity創(chuàng)建的。如果你在開發(fā)中需要獲取這些節(jié)點的位置,則必須使用InputTracking類。
如果你想要獲取場景中眼睛的不同位置(比如測試時),請使用下面的示例腳本,并將其attach到攝像機上。
4、C#腳本
- using UnityEngine;
- using UnityEngine.VR;
- public class UpdateEyeAnchors : MonoBehaviour
- {
- GameObject[] eyes = new GameObject[2];
- string[] eyeAnchorNames ={ "LeftEyeAnchor", "RightEyeAnchor" };
- void Update()
- {
- for (int i = 0; i < 2; ++i)
- {
- // If the eye anchor is no longer a child of us, don't use it
- if (eyes[i] != null && eyes[i].transform.parent != transform)
- {
- eyes[i] = null;
- }
- // If we don't have an eye anchor, try to find one or create one
- if (eyes[i] == null)
- {
- Transform t = transform.Find(eyeAnchorNames[i]);
- if (t)
- eyes[i] = t.gameObject;
- if (eyes[i] == null)
- {
- eyes[i] = new GameObject(eyeAnchorNames[i]);
- eyes[i].transform.parent = gameObject.transform;
- }
- }
- // Update the eye transform
- eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
- eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
- }
5、VR中的圖像效果(Image Effect)
在VR項目中使用眾多圖像效果是很奢侈的事情。考慮到你需要兩次渲染同一個場景(每只眼睛一次),因此很多當前經(jīng)常使用的圖像效果對VR應用來說會很浪費,會嚴重影響游戲的運行幀速。
因為VR將用戶的眼睛置入一個虛擬的空間,因此部分圖像效果對VR來說沒有任何意義。舉例來說,深度視角、模糊效應和鏡頭光暈效果對VR來說沒有任何意義,因為在現(xiàn)實世界中我們是看不到這些效果的。不過如果以后VR頭戴設備可以支持眼動跟蹤,那么深度視角可能會有意義。
不過有些效果還是可以考慮使用的:比如抗鋸齒是有用的(特別是考慮到某些頭戴設備的低分辨率),色彩分級也很有用(關于這一點可以查看這個鏈接:Color Grading with Unity and the Asset Store),對有些游戲來說Bloom會有用。
不過在使用任何效果之前,***先在游戲中實際測試下有沒有用。
Unity自身提供了很多圖像效果(Assets-Import Package-Effects),此外Asset Store里面也提供了很多效果,比如Colorful,Chromatica,Amplify Color,還有更多。
6、Render Scale
根據(jù)VR互動應用場景的復雜度和所運行的硬件環(huán)境,你可能需要更改render scale設置。通過此項設置可以調(diào)整鏡頭校正前texel:pixel的比率,這樣可以犧牲游戲性能來換取畫面的清晰度。
這項設置應該通過代碼進行,可以參考這里:http://unity3d.com/cn
通過使用以下代碼可以改變render scale的設置:
- using UnityEngine;
- using System.Collections;
- using UnityEngine.VR;
- namespace VRStandardAssets.Examples
- {
- public class ExampleRenderScale : MonoBehaviour
- {
- [SerializeField] private float m_RenderScale = 1f;
- //The render scale. Higher numbers = better quality, but trades performance
- void Start ()
- {
- VRSettings.renderScale = m_RenderScale;
- }
- }
- }
關于這項設置,可以參考我們的VR Samples,具體示例是
Scenes/Examples/RenderScale場景。此外在MainMenu場景中也有該項設置的應用。
更改render scale的效果示例如下:Unity的默認render scale是1.0,效果如下:
如果將render scale設置成1.5,可以看到顯示效果更銳利:
接下來把renderscale設置成0.5,可以看到像素化很嚴重:
根據(jù)游戲場景的不同,可以考慮降低render scale來提升游戲運行性能,或者通過增加render scale的數(shù)值讓畫面效果更銳利,但會以犧牲游戲運行性能作為代價。
好了,看到這里,你應該知道如何在Unity項目中整合VR,如何設置游戲中攝像機的移動,以及和非VR游戲相比應該如何使用圖像效果。