基于地理位置虛擬現實游戲已經有幾年了,"口袋妖怪GO”的發布是游戲史上的變遷,催化市場發展,引導了大波的需求。是時候讓新手和有經驗的人把他們的點子投入增強現實的移動端游戲,滿足市場需求了。如果你想使用*新的Unity 5 toolkit來開發游戲,那這本書就是為你準備的。這種類型的基于地理位置的增強現實游戲給我們介紹了一個新平臺同時帶來技術上的挑戰,但是這本書會簡化這些難題,告訴你怎么*大程度吸引游戲受眾。它能帶你體驗塑造這種游戲來表現技術概念的這段旅程:GIS的基本原理,移動設備衛星定位,映射,Unity中的地圖映射,移動拍照設備,Unity中攝影映射,訪問基于位置的服務,和其他有用的建議。這種技術物質探討了對于長遠開發多玩家版本游戲來說哪些是必要的。*后,書會教你故障排除技術以防你遇到麻煩需要一些幫助。
適讀人群 :游戲開發與設計者
基于位置的 AR 游戲類型帶來了新的平臺和技術難點。不過這本書會幫你簡化這些難點,展示如何*大化受眾。本書將帶你經歷制作基于位置的 AR 游戲的過程,涵蓋的核心技術概念有: GIS 基礎概念、移動設備上的 GPS、地理映射、在 Unity 里映射貼圖、移動設備上的相機、在 Unity 里的相機貼圖、訪問基于位置的服務,以及其他有用的 Unity 竅門。技術分析部分進一步討論制作一個多人版本游戲的必需組件。最后,分享一個疑難解答章節,以防你遇到困難時需要一點點幫助。
你會學到:
√ 制作一個基于位置的增強現實游戲 Foody Go
√ 在地圖上讓玩家角色運動起來
√ 使用相機作為游戲背景
√ 使用 SQLLite4Unity3D 實現數據庫持久化,以跨會話保存庫存物品
√ 創建基礎 UI 元素,包括游戲界面、庫存、菜單和設置
√ 用 Google Places API 執行定位和內容搜索
√ 添加圖像著色器效果來改進游戲氣氛
√ 添加多人網絡或者別的增強模塊來擴展游戲
推薦序
這本書非常適合沒有任何 AR 開發經驗,甚至沒有游戲開發經驗的開發者,從零開始學習增強現實的開發。文章的內容從安裝 Unity 引擎和配置相關環境開始,進而介紹 AR 及游戲開發中的一些基本概念等,整個講解過程循循善誘,使初學者不用擔心錯過任何一個細節而止步不前。
學習軟件開發的最佳方式就是學習案例,并親自動手實現。如果像傳統的教科書過多地介紹概念和理論,往往讓讀者讀完之后仍不能獨自完成一個完整的作品。這本書介紹了目前最火爆的一款 AR 游戲 Pokemon Go,并將其關鍵技術一一拆解,章節順序遵循游戲開發的標準流程,使讀者在學習相關的技術以外也能了解到游戲開發的工作流程。
AR 被很多人認為是一種革命性的技術,因為它并不是一個游戲專用的技術。恰恰相反,AR 被認為在未來可能會影響到每個人日常生活的方方方面。比如 AR 眼鏡可以在現實世界的背景上增加虛擬的畫面。當你在商場購物時,戴上它你可以看到每一樣商品的詳細信息。當你需要導航時,再不用擔心看不懂地圖,它可以在現實世界里疊加虛擬的導航路線,即使是路癡也只要跟著箭頭的方向行走即可。AR 技術還可以應用在很多領域,這里不再一一闡述。
這本書介紹的核心工具是 Unity 引擎。就像 AR 技術一樣,Unity 已經不僅僅是一款游戲引擎。在游戲行業以外,它已經被應用在 AR、VR、影視、建筑可視化(BIM),甚至汽車制造等領域。Unity 是全球應用最廣的 VR、AR 開發平臺,目前全球大部分的 VR、AR 內容都是通過 Unity 開發的。就 AR 來說,具體的技術還分很多種,比如 AR Kit、AR Core、Vuforia、Hololens、MagicLeap 等。Unity 是目前唯一一個官方支持所有 AR 技術的開發平臺。可以說 Unity 是目前學習 AR 技術、開發 AR 產品的最佳工具。
就像其他所有的新興技術一樣,AR 處于發展的最初期,技術和硬件上還存在著些許不足。但是由于它擁有的巨大潛力,我相信這些困難都會很快被克服。希望有更多的開發者加入增強現實的世界,讓增強現實更快進入現實。
張黎明 Unity 大中華區技術總監
2018 年 3 月 5 日
譯者序1
作為一名程序員在游戲圈工作了十幾年,這是第一次參與翻譯工作,因為這本書的書名引起了我的興趣:《Augmented Reality GameDevelopment》,“Augmented Reality(AR)” 這個詞一下子就映入眼簾。最早認識到這個詞應該是在 2011 年任天堂公司的 3DS 上。這臺掌機自帶了一款 AR 游戲,通過 3D 液晶屏可以看到各種動畫形象躍然于桌子或者地面上,效果非常震撼。但是從那以后,AR 從我的視野中淡出了,直到去年 Pokemon GO 的突然走紅。在這之后,國內也涌現出了許多手機端的 AR 游戲和應用,甚至過年時都流行起了 AR“搶紅包”。而隨著谷歌 Tango 手機和微軟 HoloLens 眼鏡等設備的推出,AR 的應用必然會更加廣泛。當然,我最關心的還是能否有更好的 AR 游戲出現。本書詳細介紹了一個簡單的 AR 游戲的開發過程,非常適合想要一窺 AR 開發之究竟的讀者。本人也是帶著這樣的心態來翻譯的,在翻譯的過程中學習和驗證,獲益匪淺。希望讀者也能從中找到樂趣,對于翻譯中的一些瑕疵請多多包涵。
感謝翻譯合作者 Kai,感謝編輯的辛勤校對。另外獻給我的寶貝女兒和在我翻譯期間輔導女兒學習的妻子,你們給了我莫大的幫助和動力。
——龔震宇
譯者序2
因為一個很偶然的機會,本來已經離開游戲圈,走向萬惡金融界的我,又回到了游戲相關的行業,從事 Google AR和 VR 技術在亞太國家的推廣。恰好以前在 EA 的同事沙鷹在朋友圈牽線,就決定參與翻譯這本書。公司有規定,不論在哪里發表觀點,都必須表明我與 Google 的雇傭關系,這樣讀者可以假設我的觀點帶有偏見,請酌情考慮。
作為一個游戲人和鐵桿玩家,我覺得,一個游戲最重要的還是得好玩。其次才是賺不賺錢,有沒有獨特的美術風格,復雜的畫面渲染什么的。最典型的例子就是任天堂的游戲,過去十幾年分辨率都是主機里面最低的,可它的游戲就是那么好玩。我一直以來都對任天堂致以最高的敬意,所以能夠和震宇一起翻譯這本書,我很歡樂。
游戲開發者一直都在探索新的人機交互,任天堂在這方面做出過很多嘗試,比如很早就制作過 VR 頭盔。這在 AR 領域,精靈寶可夢 GO 也實現了前所未有的成功。這本書從精靈寶可夢 GO 的功能出發,講解怎么使用Unity,制作基于位置并利用地圖,街景以及地點網絡服務的 AR 游戲,對開發者來說是個很好的 AR 游戲入門教材。
那么究竟什么才是 AR。這個問題還沒有確定的答案,世界上的開發者都在探索 AR 是什么,可以做什么。維基百科上有一個觀點,你想象一個一維的坐標軸,左邊無窮遠代表完全真實,右邊無窮遠代表完全虛擬。那么 AR 就在坐標軸的左半邊,代表負數的那個部分;相對的,VR 就在坐標軸右邊,代表正數的部分。可見 AR 的定義不是絕對的,有很大的一段區域都可以叫做 AR。中間一段區間也叫做 XR 混合現實,然而這些定義有著非常模糊的邊界。
實現 AR 有很多種核心技術,GPS,StreetView, SLAM,計算機圖形,計算機視覺,圖像處理,基于大數據的機器學習等等,都有切實的應用例子。本書講解的基于位置的應用,微軟的 HoloLens,Google 的 Tango,它們都屬于 AR 的應用。任天堂的 3DS 里面就有基于卡片的 AR 玩法,那也是一種早期 AR;類似的,目前的技術已經可以做到基于卡片的 AR 不需要一直盯著卡片也能實現設備定位。
從今年的行業動態來看,接下來基于計算機視覺的 AR 將會慢慢走出實驗室進入消費者領域,美國四大科技雇主公司 F.L.A.G. 里面有三個都在做:4 月份的時候 Facebook 推出了 AR Studio,5 月份 Google 在 I/O 宣布基于 Tango 的 WorldSense 和 VPS(視覺定位服務),6 月份蘋果宣布了 iOS 11 里面的 ARKit。根據目前的信息來看,Google 的 Tango 能獲得的對現實世界的描述信息最多,因為它硬件上使用了專門的深度傳感器和魚眼鏡頭。相比之下蘋果的 ARKit 和 Facebook 的 AR Studio 只使用了一個或兩個 RGB 攝像頭。當然,這只是我的推測,畢竟ARKit 和 AR Studio 都還沒有正式對外公開,我還沒有看過它們的文檔。說不定蘋果和 Facebook 會擁有怎么樣的黑科技呢!科技的發展早已不是線性的;十幾年前在我上大學那會兒,人工智能教科書都說超級計算機也絕對沒辦法下圍棋戰勝人類;這不,5 月份 Alpha Go 單機 4 TPU 就挑戰了人類冠軍柯杰。
最近幾年國內創業氣息濃重,投資氛圍也活躍,連習大大都有鼓勵大家創業。希望大家緊跟時代,在 AR 這股風剛剛開始刮的時候就讓自己站在風口,迎接被風吹起的感覺。
最后感謝翻譯同伴震宇,感謝沙鷹牽線帶來這本書,感謝編輯的提示和幫助。書中有一些句子為了通順,采取了意譯而不是直譯,實屬中英文的用詞習慣差別太大。希望大家不要介意。
——周克忠 Kai Google AR/VR 技術推廣工程師
2017 年 6 月 26 日新加坡
前言
在 2016 年初,世界上大多數人對增強現實和基于位置的游戲知之甚少。當然,這一切都隨著那一年 Pokemon Go的發布而改變了。一夜之間,這種游戲類型就不容置疑地成為了游戲開發的發展趨勢。可能你已經玩過 Pokemon Go,而且你閱讀這本書正因為你對 AR 和基于位置的游戲類型產生了興趣。
在本書中,我們將詳細探討創建像 Pokemon Go 這樣的基于位置的 AR 游戲的各個方面。基于位置的 AR 游戲是代價昂貴的,需要為游戲中的一切建立很多服務,從地圖映射到生成怪物。然而,我們開發的游戲將是零成本的,使用的都是可以免費獲得的服務。雖然由于一些許可限制,這可能不是你可以用于商業發布的東西,但是一定能介紹給你大部分概念。而且整個過程中,你還將學習如何使用一個偉大的工具 Unity。另外還會向你介紹游戲開發的許多其他概念。
Micheal Lanham 是為petroWEB工作的一位解決方案架構師,目前居住在加拿大阿爾伯塔省的卡爾加里(Calgary, Alberta)。他目前的職責之一是開發具有先進空間搜索能力的綜合GIS應用。他曾擔任專業和業余游戲開發人員,制作桌面和手機游戲超過15年。2007年,Micheal接觸到Unity 3D,從此以后就一直是Unity 3D狂熱的粉絲和開發者。
龔震宇是一位資深的游戲開發工程工程師,有十余年從事游戲開發的工作經驗。曾在富士通從事編程工作,之后一直在神游科技從事游戲開發工作。周克忠是一位谷歌專業AR開發工程師,長期從事增強現實相關研究和實踐。
第 1 章 準備開始 1
現實世界冒險游戲 1
基于位置 2
增強現實 3
冒險游戲 3
使用 Unity 進行移動開發 4
下載和安裝 Unity 5
設置 Android 開發環境 6
設置 iOS 開發環境 10
Unity 入門 10
創建游戲項目 10
生成和部署游戲 14
總結 17
第 2 章 映射玩家位置 18
GIS 基礎知識 18
映射 19
GPS 基礎知識 22
Google 地圖 23
添加地圖 25
設置服務 37
總結 42
第 3 章 制作游戲角色 43
導入標準 Unity 資源 44
添加一個角色 45
替換攝像機 46
跨平臺輸入 48
修正輸入 49
替換角色 66
總結 68
第 4 章 生成獵物 69
創建一個新的 “怪物服務” 70
理解地圖映射的距離 72
GPS 精度 78
檢查怪物 81
投影坐標到 3D 空間 84
在地圖上添加怪物 85
在 UI 中追蹤怪物 93
總結 96
第 5 章 在 AR 中捕捉獵物 97
場景管理 98
引入游戲管理器 100
加載場景 102
更新觸控輸入 103
碰撞體和剛體物理 106
構建 AR 捕捉場景 110
使用相機作為場景背景 112
添加捕捉球 116
投擲球 117
檢查碰撞 121
粒子效果反饋 125
捕獲怪物 126
總結 130
第 6 章 保存獵物 132
庫存(Inventory)系統 133
保存游戲狀態 135
搭建服務 137
代碼審查 139
怪物的 CRUD (創建,讀取,更新,刪除)操作 144
更新 Catch 場景 146
制作 Inventory(庫存)場景 152
添加菜單按鈕 158
合成游戲 160
移動開發中的痛 161
總結 162
第 7 章 創建 AR 世界 163
回到地圖 164
單件模式 165
Google Place API 入門 167
使用 JSON 169
配置 Google Place API 服務 172
產生標記 173
優化搜索 176
總結 180
第 8 章 與 AR 世界交互 181
Places 場景 182
用谷歌街景作為背景 184
Google Place API 照片幻燈片 186
增加賣出的 UI 交互 192
賣出的游戲機制 198
更新數據庫 200
把片段拼接起來 204
總結 208
第 9 章 完成游戲 209
未完成的開發任務 209
缺少的開發技能 214
清理資源 216
發行游戲 219
開發基于位置游戲的一些問題 220
基于位置的多人游戲 221
使用 Firebase 作為多人開發平臺 225
其他一些基于位置的點子 229
這個種類的未來 230
總結 231
第 10 章 疑難解答 232
Console 窗口 232
編譯錯誤和警告 234
調試 235
遠程調試 237
高級調試 239
記錄日志 240
CUDLR 244
Unity Analytics 246
每章的問題和解決方案 249
總結 251