HTC Vive的空間問題是許多小場地的玩家所困擾的,那么這里就跟大家聊聊怎么完美解決這個問題吧。
對于Vive,我們可以正常使用,運動追蹤功能是HTC Vive的一大亮點,這也讓很多適配HTC Vive的游戲能夠讓用戶動起來,聽起來很酷,體驗起來也很酷。
在小范圍移動1:1的范圍內活動或固定位置的游戲中,定位精確,并且延遲很低,各種優點不一而足。
但是空間問題,讓想在小空間大場景的游戲中的玩家排在了門外,HTC官方建議:HTC建議消費者在至少20平米空間使用全套裝備,這也意味著你的游戲房要足夠大。土豪就不用往下看了!
但是對于想要開疆擴土的用戶,在實際中場地大小就成為了局限,用戶沒有恰好游戲場景大小的場地,游戲場地過大,而玩家場地太小,怎么解決呢?
還有就是要是1:1的場地,會有一種游戲場景非常局促,感覺沒有走多遠就到了邊際,讓玩家十分不爽。
所以這里給出了變比空間的HTC頭盔的移動問題的解決方案。
當然,若你有更好的辦法,也歡迎討論。
我們重點來說,游戲場景過大,而實際場地臺較小,需要對位移進行比例加速問題。
我們要解決問題有三個:
1. 邊界放大
2. 起點位置平移
3. 游戲空間與場地非等比空間速度縮放。
一、邊界放大
首先,來看看官方SteamVR給出的預制體的頂視圖:

發現沒有,在HTC頭盔的游戲中,玩家總在藍色框的中間位置。
而對于需要從(0,0)作為起點的游戲,需要在房間內到處移動。
并且根據游戲劇情,需要空間移動的游戲,這個就只可以用原有場地的1/4的場地了,更造成了場地的浪費。
我們首先解決的就是位置需要偏移問題。
其次,看到藍色邊框的大小了沒有,其實藍色框范圍很小。

看代碼:

這個面積小,不滿足需求,怎么辦呢?自己來增加啊,搞大場地!
我就自己做了一個區域標識。

小的藍色框為它原本的400*300的,大的為我自己縮放的區域。
選擇Size為Calibrated這個選項,縮放即可。特地添加了一個父節點。
以防止在直接節點上縮放出問題,xz均縮放為4,Y仍舊為1。
這個標識就基本滿足游戲中場地大小為9*9米的一個大場地了。
二、起點位置平移
好了,現在回來說,起點的平移問題。
分兩部:
一個是視覺上,就是在游戲編輯器模式下,讓玩家在藍色區域的起點角點位置,這個容易,就是還是平移。
平移誰呢,平移藍色區域,把剛才縮放的那個預制體的父節點做了平移,項目中的平移位置為(4.2,0,4.2)即可,這部分就搞定了。
第二部分,就是比較繁瑣一點了。
說這個問題之前,需要稍微說下SteamVR插件的運行時和編輯狀態的相機差別。

這個是編輯器模式下的相機狀態。
但是在運行時候,相機的層級結構會發生較大的變化。

可以看到eye作為父節點,ears作為子節點,而head則被隱藏了。
具體代碼處理是在SteamVR_Camera.cs中的OnEnable中處理。
部分代碼:

還有ears的處理代碼,設置ears的相機參數:

為什么講了這么多結構呢?因為它影響到了玩家起點平移的算法和處理,怎么處理呢?
其實是蠻簡單,給相機的父節點在初始化時候,重置一個與相機初始化一個相反的參數。
為什么呢?這正是為了抵消相機在場景中從(0,0)點作為起點的變化啊.
具體代碼:

這個根據自己需要來處理的按鍵和時間自動開始,可以不這樣用按鍵啥的。

這里順便說一句:就是要添加手柄,只需要把手柄腳本放這節點下,然后設置左右手柄即可。
手柄在隨后中,并不會由于位移的加速對其造成影響。
三、游戲空間與場地非等比空間速度縮放
好了,說完了平移,最后,那就是場景為9*9米,而我場地只有三米或5米,怎么辦呢?
其實結果已經比較明顯了。就是剛才FPSController還有個縮放的父節點。
那有人可能會有異議?直接來控制HTCvive相機的腳本來給得出的相機位置進行修改縮放不就可以了嗎?
哎呀,這個方法確實很好啊,但是無法實現,為什么呢?
因為相機無法在腳本層控制,在編輯器下運行模型下,把所有腳本代碼勾選掉,相機的位置旋轉均還可以正常使用。
這基本說明,相機的控制在腳本層的機會很少,但是,我并不死心,下面就開始了各種嘗試。
當然是在腳本中,看代碼吧。

要說的是:以上代碼對與HTC頭盔的相機設置下工均沒有任何的作用,看清楚是對實際效果有任何作用。
要說有作用,在編輯器模式下,編輯器里面現實為零,但是相機數據仍可以變化。
這是由于編輯器的數據顯示要先于真實的相機坐標,只是個假象,都是幻覺。
最終的解決方案,給FPSController添加一個父節點,這樣就基本搞定了。

為了便于根據場地的大小和游戲場景的大小調節匹配,縮放參數做了一個配置文件,這里就不過多的詳述了。
至此,我們完成了,邊界放大,起點位置平移,游戲空間與場地非等比空間速度縮放。
順便說下,我們游戲場景為9*9而實際測試場地為2.5米左右的時候,縮放系數為0.5,這時候由于場地過小,速度過快有少于不適。
而在5*5左右時候,調節參數,整體感覺還是非常舒服的,也沒有由于空間的大小而在游戲中感到局促。