AR+LBS線下社交遊戲嘗試
一、簡介
前段時間Pokemon Go的火熱掀起了一股AR風潮,創新小組隨後在這方面進行了一些探索,基於Unity完成了一個簡單的線下社交遊戲Demo,與普通多人遊戲的區別主要在:遊戲地圖是基於真實地圖製作而成,角色的位置和移動也是基於玩家自身的LBS資料。可以看做是抽出Pokemon Go的地圖和角色部分,在上面增加社交遊戲邏輯。
遊戲截圖:(當前玩家位於黃龍時代廣場附近)
由於時間關係,玩家間的互動做的比較簡單(AR發紅包),下面介紹一下游戲地圖的生成和角色的LBS資訊關聯。
二、地圖
1、地圖切片生成
由於遊戲地圖需要基於真實地圖生成,這裡採用百度地圖SDK截圖的方式,得到小塊小塊的地圖切片,並記錄切片的序號,然後在遊戲中動態載入。
地圖切片在二維平面上鄰接排列,所有切片尺寸一致,給各個切片設定二維座標,以左上角為起點(座標為(0,0)),則每個切片所覆蓋的經緯度矩形區域都能通過切片座標、切片尺寸計算而得。
如圖是切片生成的過程,包括兩部分:地圖圖層的初始化和各切片生成。地圖圖層的初始化主要是設定地圖的整體區域、圖層的樣式(如道路的顏色、是否顯示建築物等)和地圖縮放等級,由於處於3D遊戲環境,本專案將地圖縮放等級設定為固定值,以減少不必要的繪製。
各切片的生成步驟如下:在索引確定後,根據切片尺寸計算當前切片的矩形區域,然後呼叫百度地圖SDK,渲染出該區域地圖圖片,最後儲存圖片,得到當前切片結果。
2、地圖切片的無縫拼接
如下圖,本專案在遊戲引擎中維護9張相互鄰接的地圖切片,構成切片九宮格,設中心切片的座標為(0,0),則周圍8鄰域內的切片座標分別為(-1,-1)、(0,-1)、(1,-1)、(-1,0)、(1,0)、(-1,1)、(0,1)、(1,1),在遊戲執行過程中,玩家始終保持在中心切片,玩家在當前切片區域內移動時,玩家視野未超出九宮格切片所覆蓋區域,九宮格無需更新;當玩家移動到切片邊緣,進入下一個切片時,則需要更新九宮格:
上圖示意的是玩家向右方移動,跨越切片時的情形,即玩家從(0,0)切片移動到(1,0)切片,此時(1,0)切片成為中心區域,需要在九宮格右邊新增3個切片,同時去除九宮格左邊的3個切片,新增加的3個切片需要載入對應的地圖圖片,保證地圖的正確性。
因此,當玩家在地圖上移動時,玩家始終處於九宮格的中心區域,玩家周圍始終有足夠的視野區域,當玩家跨越切片邊界時,切片九宮格即時更新,使得玩家感受不到地圖的切換過程,達到無縫漫遊的效果。
三、角色
角色的地理位置、朝向、行走狀態都來自手機的感測器,如GPS、加速度計等。對於角色的地理位置(經緯度座標),需要進行座標轉換,以對應到遊戲引擎中的座標。
如圖,將左上角第一個地圖切片的左上角與Unity中的世界原點對應,即(0,0)對應經緯度(O-lat,O-lng),設Unity中地圖切片的長寬分別為w、h,切片實際覆蓋的經緯度分別為d-lat、d-lng:
則若當前玩家的真實地理位置經緯度為(x,y),可得玩家所屬切片索引為:
玩家在Unity中的座標(忽略z軸)為:
相應地,也能根據玩家在Unity中的座標,計算出玩家的經緯度。
相關文章
- 嘗試
- SSD 下的 MySQL IO 優化嘗試MySql優化
- JAVAFX嘗試Java
- 嘗試1
- 網易的這款沙盒遊戲,想嘗試不一樣的長線設計遊戲
- 嘗試做“無線研發工程師”有感工程師
- VMRC控制檯的連線已斷開..正在嘗試重新連線
- 初嘗試swiftSwift
- ios NFC嘗試iOS
- 《浮島物語 Forager》沙盒遊戲的新嘗試遊戲
- vmware中控制檯的連線已斷開…正在嘗試重新連線
- PHP下的非同步嘗試四:PHP版的PromisePHP非同步Promise
- MAC下嘗試PHP7 alpha版本的安裝MacPHP
- Windows環境下嘗試安裝並配置PHP PEARWindowsPHP
- 嘗試 LeetcodeLeetCode
- 嘗試手寫promisePromise
- 初次嘗試HTTPSHTTP
- Redis crackit 漏洞嘗試Redis
- 傳奇遊戲的"美女"素材爆量上線,多方向創意嘗試是破局的關鍵遊戲
- Facebook、微信和陌陌 一起來看看社交應用的商業化嘗試
- Epic遊戲商城上線社交功能,steam有的都得要遊戲
- 《長安夜明》:中國視角敘事遊戲的一次嘗試遊戲
- 嘗試 Leetcode(二)LeetCode
- 微信小程式 TypeScript 嘗試微信小程式TypeScript
- oracle函式初次嘗試Oracle函式
- mview on prebuilt table用法嘗試ViewUI
- 冷門獨立遊戲玩法如何玩轉長線運營?《超時空星艦》的一種全新嘗試遊戲
- svg 線條動畫淺嘗SVG動畫
- 【解決】無法連線 MKS:套接字連線嘗試次數太多正在放棄
- 嘗試在centos5下執行phantomjs2CentOSJS
- 遊戲模型研究:玩法社交,社交玩法遊戲模型
- 自動做遊戲(4),極小樣本生成國畫的嘗試遊戲
- 《破壞全明星》遊戲總監專訪 :嘗試復活一個遊戲型別遊戲型別
- [Hacker News 週報] Deno 原生 SSR web 框架;基於 Vite 的單元測試框架;程式設計師社交新嘗試Web框架Vite程式設計師
- 基於 Redis 的 LBS 嘗試Redis
- MyBatis Generator嘗試與踩坑MyBatis
- React最佳實踐嘗試(三)React
- React最佳實踐嘗試(二)React