2017年1月17日 星期二

Unity開發經驗分享:I Expect You To Die

原文
潤稿:Kelvin Lo

今天為大家分享密室逃脫類型的VR遊戲I Expect You To Die(以下簡稱IEYTD)在開發過程中所遇到的挑戰,並詳細介紹開發團隊如何優化VR沉浸式體驗。


超級間諜之手

自從我們的Oculus分享版本發佈以來,IEYTD最大的功能改變是手的整合。遊戲最初是用滑鼠玩,現在也都還支援這項功能。當初我們收到Oculus Touch原型機之後,我們發現用手玩才是真正遊戲的王道,因為它提升了很多沉浸感。

操作方式轉換

IEYTD最初版本和最終版本最大的差異就是操作方式的改變:最初的展示版只支援滑鼠操作,後來加了對Oculus Touch的支援,得到了更自然的抓取及其它手勢操作模擬。

IEYTD的核心思想是玩家透過與VR環境中的物體互動解決謎題。專案初期玩家使用滑鼠將準星瞄準到物體上進行意念控制。這個模式允許玩家與遠處的物件互動。當操控方式轉為雙手操作時,我們希望保留這個功能,同樣也讓玩家獲得在VR中抓握物體的美妙體驗。因此最後遊戲中有兩種手勢操作的模式:近距離抓取模式和遠端意念控制模式。


近距離抓取模式

使用虛擬手掌抓取物體是一種很奇妙的體驗,這個機制對於IEYTD遊戲來說非常關鍵。在遊戲中玩家的手顯示為虛擬的間諜手套,並由動畫來表現不同手勢。這個模式下玩家抓取物體時手會完全消失,這麼做的主要原因就是範圍。IEYTD中可以抓取的物體有很多,如果都使用統一的抓取動作並不實際。再者,抓取方式因人而異,還得受環境限制。



當玩家的手出現在環境裡時,"可抓取"的物件將會變亮。我們借由一個觸發器(Trigger)和從玩家頭部到手發出一條射線來進行偵測。觸發器用於管理可抓取的物件清單,射線投射用來選則哪一個是最靠近玩家頭部的物體。遊戲中預設玩家最想碰的是最靠近玩家頭部的物體。
 


意念抓取(TK)模式

TK模式允許玩家和
範圍外的物件進行互動,這能讓遊戲的謎題設定更靈活並且可以創造出更多樣的環境。它也奠定了"超級間諜"的遊戲主題,擁有許多厲害的間諜工具。


TK模式的設計目標是將原本用滑鼠控制的準星模式改為用手互動。為了實現這一點,我們為每隻手放入一個做為父物件的準心並朝向正前方。之後準星沿著這個方向放置在3D空間裡,並朝該關卡的幾何碰撞體進行射線投射。這種方法在大多數條件下都適用,當然還是會有一些不理想的情況。

首先準星會抖動,因為它和你的手相連,輕微的手部運動都會導致它抖動。距離越遠時移動因此被放大會顯得很奇怪。這時瞄準遠處的物件就會變得很困難。為了解決這個問題,我們用了一個阻尼曲線(damping curve)對原始準星加了"平滑準心處理"。平滑值與原始準星位移成反比,結果小的位移可以被平滑處理掉,太大的位移仍會產生問題。


第二個問題是,準星在遊戲中的渲染順序。為了避免遮擋問題並讓準星保持一個2D效果,我們將它渲染在遊戲世界的所有幾何最上層。這種方法在準星基於頭部時很有效,但並不適用於手部,玩家對準星位置的感知會受到嚴重影響。這個問題在玩家視線上有多個物件不同景深的位置時尤其明顯。對於玩家而言,準星將出現在距離他們最近的物件表面,但實際上是在一個物件表面的不同深度上。這種差異造成了玩家與目標物件互動時的混淆。為了解決這種問題,我們從頭部朝準星進行了射線投射,並在路徑上檢測是否存在可互動的物件。如果檢測到可互動物件,就將準星瞄準到該物件。

手的碰撞模型


VR環境下實現"手"的一大挑戰是如何從物理的角度與虛擬世界進行互動。遊戲的物理規則只是一種模擬,當和虛擬手結合後,它的移動不受物理限制,就會發生一些奇怪又搞笑的事。手部碰撞模型由兩部分組成:手部的物理和持物的物理。

手部的物理
在IEYTD中,手沒有碰撞器(Collider),只有抓取物體的觸發器(Trigger)。玩家可以將虛擬手伸入物件中並穿過去。我們曾一度考慮在發生觸碰時給予虛擬的回饋,但最終並沒有這麼做,原因是這樣可能會誤導玩家將手伸入物件中。我們不希望玩家可以將那些近處的物件推遠,尤其是那些對於謎題很重要的物件。

持物的物理
判斷玩家要抓取物件的物理行為是一個有趣的課題。我們一開始的模式是用手持物件與環境碰撞,當碰撞總數超過一個值時,物體會從玩家手中滑落。最初這個解決方案似乎可行,但當關卡和互動變複雜之後,互動感令人失望。比如我們有一堆現金,雪茄和手榴彈放在狹小的空間裡,當玩家在高速移動時
抓取到這些物件,狹小的空間將導致物理系統持續嘗試穿透,然後產生嚴重的物理問題。經常因為這種穿透導致碰撞總數超出範圍使玩家手中物體無意中掉落。這種體驗很不爽也會成為解決謎題的障礙。


之後我們將解決方案調整成在拾取物體後關閉碰撞檢測器。初期測試的效果很理想,在狹窄空間抓取物體不會再出現物理效果失常。但也延伸出一種狀況,玩家現在可以將物體放到物件裡面了,這時如果放開物體,它們會彈到一個無法預測的位置,因為物理系統會試圖解決穿透而給予壓力。雖然在給玩家的測試中這並不多見,玩家也通常不會注意到這問題。

這種方案還有一個問題,如果關閉了碰撞器,當您拾起物體時,它將不再檢測碰撞,造成我們無法再打碎物件了。這改變影響了整個遊戲的解謎玩法,因為打碎物體是解謎機制的一個重要核心內容,其次無法打破物件會降低沉浸感。因此我們做了一些調整,在玩家快速移動物體時會短暫開啟碰撞器,允許發送和接收碰撞事件。這個方案效果很好動作也很直覺。


最後,在意念抓取模式被抓到的物件身上的碰撞器會一直開著。因為經過測試被意念抓取到的物件在穿過物體時如果沒有任何阻力會非常不自然。並且有很大幾率導致在物體內丟失物件。

超級間諜之耳


音效對於好的VR體驗來說至關重要。IEYTD是解謎遊戲,但它也是一個物理沙箱(Sandbox)。玩家可以在裡面堆疊物體,來回扔它們,打碎它們甚至朝他們射擊。因此這些物體與環境會經常發生碰撞,發生碰撞時要有適當的音效。


為了實現這種音效互動,我們設計了一個系統來標註環境裡的碰撞體是軟的還是硬的,是玻璃還是金屬表面。上圖顯示轎車關卡中用不同顏色來把轎車內部不同的表面上色。音效設計師
為每種類型的表面以及每個可以被玩家抓取的物件做了兩種碰撞聲音(普通和重音)。設計思路是根據碰撞的速度調整這兩種聲音的大小再同時播放這兩種聲音。最初的測試效果很理想,稍作改變後就可以讓系統模擬產生很好的碰撞音效。下圖是整個系統工作原理的概述。




手殘的超級間諜


隱藏區域

正如之前所提及IEYTD也是一個物理沙箱。玩家在解謎的同時也可以進行有趣的物理實驗。我們對這個功能很滿意,但這是會產生一個新問題。因為玩家可能會沉浸在物理實驗中,讓關鍵解謎線索埋在一堆物件下。

我們決定沿用以前遊戲常用的方法來解決這個問題,對被擋住的物件用雷射Shader做透視處理。起初我們覺得會打破玩家的沉浸感,但玩家扮演的是有意念控制的超級間諜,擁有透視能力似乎也合情合理。然而我們又不希望對所有的遮擋物都使用這個功能,這樣反而會暴露謎題隱藏的內容。取而代之的是,我們做了一個系統來定義玩家無法到達的區域:名為Hidden Volumes(隱藏區域)的觸發區域。當物體掉落在這個區域後,就會採用雷射著色器讓玩家透視物體。


接下來我們需要一種讓玩家可以與隱藏區域的物體進行互動的方法。為了實現這個目的,我們將物體放在不同的物理層,用能打在特定層的射線進行探測並選擇目標。這個方法就能讓玩家穿過物體抓取物件。


禁區
顧名思義,這個區域的唯一目的就是別讓玩家看到,這些地方可能是某個解謎的關鍵之處,或者沒有安排場景模型。預設情況下,在玩家的頭部進入這個區域時會將螢幕逐漸轉為黑色。在一些劇情中也很適合做這種禁區,讓玩家的頭部離開該區域時螢幕漸漸變黑。


蓋子
IEYTD中很多夾層都放有玩家可以拿的物體。為了防止玩家隔空取物,我們設定了特殊的物理層並加入蓋子碰撞檢測器。由玩家頭部到手部對該層進行射線投射,使用碰撞檢測器檢測與射線的碰撞。如果檢測到碰撞,就判斷玩家試圖不打開蓋子想拿取內容物,這時就會禁用抓取功能。


VR的力量

IEYTD的開發極具挑戰性,我們穫得了很多經驗。這裡介紹的技術是經過無數的玩家測試和修正的結果,還包括VR社群交流的知識。VR是一個強而有力的媒體,開發者能為玩家帶來全新的體驗。也正是VR,能讓IEYTD給玩家一個成為身手不凡超級間諜的機會。


I Expect You To Die遊戲現已上線,支援Oculus及PlayStation® VR平台,您可在 Oculus StorePlayStation® Store下載。後續我們還將為大家分享更多遊戲及VR/AR開發相關的經驗,請保持關注哦!

沒有留言:

張貼留言

關於我自己

我的相片
Unity台灣官方部落格 請上Facebook搜尋Unity Taiwan取得Unity中文的最新資訊