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

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

看代碼:

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

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

這個是編輯器模式下的相機(jī)狀態(tài)。
但是在運行時候,相機(jī)的層級結(jié)構(gòu)會發(fā)生較大的變化。

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

還有ears的處理代碼,設(shè)置ears的相機(jī)參數(shù):

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

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

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

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

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