《Tsuro》實戰分享:移動VR遊戲開發經驗與教訓
丹·泰勒(Dan Taylor)是一位遊戲領域的資深從業者,曾參與過《榮譽勳章》,《殺手》和《古墓麗影》等熱門內容的製作。他目前正在領導英國VR遊戲和手遊開發工作室Thunderbox Entertainment。
日前,他向社群分享了團隊在開發移動VR內容時的經驗教訓,並希望可以為各位同行提供借鑑參考。以下是映維網的具體整理:
2016年伊始是一個激動人心的時刻:我們剛剛釋出了基於桌遊《Tsuro》的手遊《Tsuro通路—造路遊戲》,並準備開始下一個遊戲專案。我們最初沒有制定進軍VR的計劃,這有點自然而然地就發生了(這家公司同時發行過手遊版《Tsuro通路——造路遊戲》。在遊戲中,你需要合理地放置拼圖,使自己的棋子按拼圖上的道路行進,但同時要防止對手的拼圖將你的棋子引入歧途,甚至帶離棋盤)。
當時我們的一位朋友正熱烈地介紹自己新入手的Gear VR,並堅持要我們體驗一番。我們當時並不認可移動VR的潛力,因為你很難為智慧手機開發出畫面像樣的遊戲,更不用說60fps的渲染要求。但我們認為一試無妨。
當我們戴上頭顯後,我們馬上改變了想法,並迅速意識到移動硬體完全可以完全與桌面軟體一樣引人入勝的VR體驗,而且價格要更為親民。
兩週之後,我們拿到了硬體,並開始在VR中開發《Tsuro》。但遊戲玩起來不是特別有趣。在虛擬桌面開玩虛擬版桌遊顯示我們只是單純地模擬真實體驗。如果我們希望能夠像手遊版本一樣做出改變,我們需要與眾不同的遊戲方式。
快進到2018年,Oculus Quest的《SUPERHOT》給了我靈感。
當我在OC5大會體驗這款演示內容時,我完全迷上了體驗,而工作人員甚至要從我頭上搶過頭顯。當我走出演示區後,我突然之間想到:為什麼我們不開發一款房間規模的VR體驗呢?
所以,我們為Oculus Go重新構思了《Tsuro》。我們將所有元素都放大了70倍。當你在棋盤中進行研究分析時,棋子會從你身邊嗖嗖地略過。你同時可以欣賞到任何其他格式都無法實現的炫美景色。
但即便我們已經構思好遊戲概念,專案的進展都並非是一帆風順。回想起來,專案做對的地方要多於做錯的地方。下面我們就來回顧一下。
1. 做錯的地方?
1.1 移植舊版遊戲的問題
為了有效移植《Tsuro》,我們需要儘可能多地重複利用手遊版本的元素。遺憾的是,手遊版本開發至今已超過六年時間,所以一定的歷史問題減緩了我們的進度,並且影響了遊戲效能。
在用IL2CPP進行編譯時,我們的補間系統HOTween並不湊效。我們本來可以更新到DOTween,但由於當時已經是專案的後期階段,我們認為風險太大。
當我們開始製作《Tsuro》的時候,Unity尚未提供原生UI系統,所以我們用的是nGUI。這給我們帶來了非常有效的UI,但存在一定的問題。因為我們必須使用自定義著色器來點亮我們的敘事UI,所以當我們測試亞洲市場本地化所需的動態系統字型時,它們都發生了崩潰。再一次強調,這已經是在專案的後期,所以我們不得不在發行遊戲前的一週內解決照明系統。
我們同時有用Playmaker進行視覺化指令碼編碼。當我們開始《Tsuro》時,我們確實不知道如何使用,所以我們的指令碼非常混亂。如果你打算使用Playmaker,請使用全域性變數來獲取關鍵遊戲資料,保持狀態機小型化,對所有內容進行顏色編碼,並確保狀態機之間的任何切換都是穩定進行,並且正確同步:當我們更新Unity的時候,速度的略有增加意味著某些Playmaker元素突然以不同的順序啟動,並造成重大系統錯誤。
1.2 對於移動框架,我們過於想當然
在移植《Tsuro》的時候,我們低估了VR所需的基本移動端功能,其中包括:
- 推送訊息:我們使用OneSignal進行多人通知推送,更新房間列表,並在匹配完成時通知位於程式之外的使用者。Oculus提供了一個可作為替代方案的通知系統,但我們沒有時間為《Tsuro》進行研究和實施。
- 遊戲中心:《Tsuro》擁有超過50項成就,並旨在在幫助使用者發現各種二級遊戲機制。Oculus同樣提供了一個強大的成就係統……但當你解鎖一個系統時,沒有系統通知彈出視窗,同時沒有用於檢查進度的UI。成就UX必須從零開始設計。
- 社交整合:信不信由你,你無法輕鬆將Facebook整合到Unity遊戲。對於移動裝置,你可以使用Facebook Unity SDK。但對於Oculus,事情就變得棘手起來。
- 鍵盤:《Tsuro》有一個需要使用者輸入文字的例項。這個細小但至關重要的功能意味著我們必須實現VR鍵盤。幸運的是,我們在Unity Asset Store找到了一個解決方案,並能夠快速地進行修改以滿足我們的需求。
1.3 在Gear VR中進行測試:太少而且太遲
出於某些愚蠢的原因,我們認為Gear VR的效能與Go類似…大錯特錯。從Go到Galaxy S7,我們注意到幀率的顯著下降。這需要我們深度優化通道,建立特定於裝置但同時會降低解析度的圖形質量,更換著色器,減半紋理,調整陰影,並相應地調節CPU/GPU。
對於圖形效能,我們的建議是:
- 請將你的環境整合至一個網格中,並禁用動態遮擋剔除。
- 請對你的紋理使用ASTC壓縮:小幅度地進行實驗,以獲得效能和細節之間的最佳權衡。
- 請使用Oculus Lint工具(越快越好)。
- 請勿使用標準著色器。使用最簡單的著色器(在Unity中,這種著色器通常是移動著色器)。
- 請不要使用Unity的預設天空盒,請轉而使用移動版本,並將過於花俏的色彩設定烘焙到紋理中。
- 請不要使用環境照明。它對Go沒有明顯的FPS影響,但它在Galaxy S7上將“殺死”幀率。
- 最後,關注發行首周的玩家評論。準備好優秀的客服支援,並且根據報告問題迅速予以修復。
2. 做對的地方
2.1 低多邊形美術風格
我們一開始希望匹配手遊版本的環境風格。高清環境的實驗表明,我們將需要投入過多的時間,並且依然需要在質量方面進行妥協。幸運的是,Unity Asset Store再次提供了幫助。
我們一直在研究低多邊形美術,而且我們與紐西蘭工作室Synty關係良好。他們擁有一個非常出色的日本幕府時代環境包,而且非常適合《Tsuro》。
這種復古外觀存在一系列的優勢:首先,它非常精美;其次,它的效能非常優秀。經過一定的調整後,我們能夠在Oculus Go以每秒72幀的標準解析度執行《Tsuro》;最後,我們能夠找到其他高質量的低多邊形asset,並新增風格化的天空盒,遠景,粒子效果,甚至一定的野生動物。
2.2 專注於使用者介面
《Tsuro》最初的UI隱藏在螢幕的角落,而VR中沒有螢幕,更不用說什麼角落。我們展開了一定的技敏捷開發,力求構建出可行的UI,其涉及在專用的“健身房”中快速構建,測試和迭代多個UI排列。這有助於我們識別和解決一系列的關鍵問題……
- 明智地選擇你的字型:如果你更重視易讀性,選擇過於風格化的字型是一個壞主意。我們選擇了清新,有趣的手繪風格。
- 保持文字簡短但清晰:玩家可以從環境中的任何位置檢視UI,這使得文字易讀性成為了一個問題。我們嘗試了各種技術解決方案,但最好的方法是保持措辭簡潔,而且選擇儘可能大的字型。
- 模擬照明:如果你的UI需要隨玩家移動,它可能需要點亮。我們最終手動地模擬靜態UI元素的照明,並使用指令碼化的近似法來動態地重新著色移動UI。
- UI不能分散玩家的注意力:將UI與玩家鎖定會令人感到不舒服,但我們的主UI需要始終可見。為了解決這個問題,我們將其鎖定在玩家的位置,但總是令它面對著棋盤上的互動點。它同時可以根據玩家的高度水平重新定位,因此遊玩區域總是不受影響。
2.3 跨平臺多玩家
Oculus《Tsuro》玩家可以與智慧手機和平板電腦玩家對戰。對於能夠與非VR玩家對戰的玩家,他們的反饋都十分積極。這同時意味著遊戲在發行後就已經擁有成千上萬的玩家。
為實現這一目標,我們採用了兩種現成的技術:Photon Networking和PlayFab。兩種系統都經過專門設計,可以很好地協同工作,而且成本低廉。
Photon負責實際的線上遊戲(設定房間,傳輸資料等),PlayFab則管理身份驗證,朋友,匹配和遊戲狀態。它同時可以從玩家賬戶(Facebook,Steam,遊戲中心等)獲取資訊,並且包含與Oculus完美整合的通用選項。
2.4. Gommunity
我們非常幸運,一位早期測試人員向我們介紹了Discord中的GOmmunity,結果證明這非常重要。
這群可愛的人兒幾乎玩過所有Go的遊戲。他們能夠告訴我們遊戲的主要缺陷,並提供了優秀的示例遊戲作為參考。
在他們的幫助下,我們優化了移動系統,建立了穩定了棋盤體驗,並且通過Oculus Rooms實現了Coordinated App Launch(超級容易實現)。
3. 總結
我們相信VR版《Tsuro》是享受造路遊戲的最佳方式……至少從數字維度而言。我們將這款優秀的小型戰略遊戲帶到了VR,並希望在不久的將來能夠為更多的棋盤遊戲提供類似的沉浸式體驗。作為我們第一次涉足VR,《Tsuro》主要是作為一次實驗:一個相對較短的專案,並且允許我們為開發更復雜的VR遊戲積累必要的經驗。《Tsuro》的美術風格,UI,移動機制,測試,優化和框架等等,這一切都會在我們的下一款VR遊戲中發揮重要的作用。
作者:丹·泰勒
來源:映維網
原文地址:https://yivian.com/news/60940.html
相關文章
- 微服務遷移:經驗教訓微服務
- PICO & Unity VR實戰 經驗(1)UnityVR
- 建立機器學習實戰系統的十大經驗教訓機器學習
- 面試經驗之教訓面試
- 移動端真機除錯實戰經驗除錯
- 經驗&教訓分享:我的第一個機器學習專案機器學習
- 需求分析經驗及教訓
- 經驗分享:HelloFresh在生產中執行Istio的經驗教訓 - Craig HuberAI
- 機器學習的教訓:5家公司分享的錯誤經驗機器學習
- Uber微服務實戰經驗分享微服務
- 安裝pytorch-gpu的經驗與教訓PyTorchGPU
- 採用 SOA 最佳實踐,借鑑經驗教訓
- 實戰分享丨MySQL 與Django版本匹配相關經驗MySqlDjango
- 來說說成功的雲遷移的10個經驗教訓
- IGListKit 實戰經驗分享調研
- 經驗教訓,慎用Oracle的審計Oracle
- 經驗教訓:Instacart 的實時機器學習之旅 - shu機器學習
- Cloudflare 從 PHP 到 Go:遷移與經驗分享CloudPHPGo
- 阿里巴巴的 Kubernetes 應用管理實踐經驗與教訓阿里
- Heap使用Postgres SQL後的經驗教訓SQL
- 引入新程式語言的經驗教訓
- 使用MongoDB血淚般的經驗教訓MongoDB
- 關於Web 2.0 的SOA 經驗教訓Web
- 直播預告丨開源SDN互通實戰演示與經驗分享
- 一次 RocketMQ 程式自動退出排查經驗分享(實戰篇)MQ
- Scrum與OKR融合實踐經驗分享ScrumOKR
- 育碧經驗分享:如何設計VR密室逃生遊戲VR遊戲
- [譯] Data Binding 庫使用的經驗教訓
- 我的軟體開發中經驗教訓
- 艱困之道中學到的經驗教訓
- 建立安卓應用的 30 個經驗教訓安卓
- 一次二次開發中的經驗與教訓(一)
- 一次二次開發中的經驗與教訓(二)
- 移動適配:跳轉適配成功生效經驗分享
- 遊戲開發經驗談(二):對戰類全球服遊戲的設計與實現遊戲開發
- 雲控系統的玩法和實戰經驗分享
- Go 併發程式設計中的經驗教訓Go程式設計
- 使用 go micro 搭建微服務介面的經驗教訓Go微服務