天天看點

AR+LBS線下社交遊戲嘗試

前段時間pokemon go的火熱掀起了一股ar風潮,創新小組随後在這方面進行了一些探索,基于unity完成了一個簡單的線下社交遊戲demo,與普通多人遊戲的差別主要在:遊戲地圖是基于真實地圖制作而成,角色的位置和移動也是基于玩家自身的lbs資料。可以看做是抽出pokemon go的地圖和角色部分,在上面增加社交遊戲邏輯。

遊戲截圖:(目前玩家位于黃龍時代廣場附近)

AR+LBS線下社交遊戲嘗試

由于時間關系,玩家間的互動做的比較簡單(ar發紅包),下面介紹一下遊戲地圖的生成和角色的lbs資訊關聯。

由于遊戲地圖需要基于真實地圖生成,這裡采用百度地圖sdk截圖的方式,得到小塊小塊的地圖切片,并記錄切片的序号,然後在遊戲中動态加載。

AR+LBS線下社交遊戲嘗試

地圖切片在二維平面上鄰接排列,所有切片尺寸一緻,給各個切片設定二維坐标,以左上角為起點(坐标為(0,0)),則每個切片所覆寫的經緯度矩形區域都能通過切片坐标、切片尺寸計算而得。

AR+LBS線下社交遊戲嘗試

如圖是切片生成的過程,包括兩部分:地圖圖層的初始化和各切片生成。地圖圖層的初始化主要是設定地圖的整體區域、圖層的樣式(如道路的顔色、是否顯示建築物等)和地圖縮放等級,由于處于3d遊戲環境,本項目将地圖縮放等級設定為固定值,以減少不必要的繪制。

各切片的生成步驟如下:在索引确定後,根據切片尺寸計算目前切片的矩形區域,然後調用百度地圖sdk,渲染出該區域地圖圖檔,最後儲存圖檔,得到目前切片結果。

如下圖,本項目在遊戲引擎中維護9張互相鄰接的地圖切片,構成切片九宮格,設中心切片的坐标為(0,0),則周圍8鄰域内的切片坐标分别為(-1,-1)、(0,-1)、(1,-1)、(-1,0)、(1,0)、(-1,1)、(0,1)、(1,1),在遊戲運作過程中,玩家始終保持在中心切片,玩家在目前切片區域内移動時,玩家視野未超出九宮格切片所覆寫區域,九宮格無需更新;當玩家移動到切片邊緣,進入下一個切片時,則需要更新九宮格:

AR+LBS線下社交遊戲嘗試
AR+LBS線下社交遊戲嘗試

上圖示意的是玩家向右方移動,跨越切片時的情形,即玩家從(0,0)切片移動到(1,0)切片,此時(1,0)切片成為中心區域,需要在九宮格右邊添加3個切片,同時去除九宮格左邊的3個切片,新增加的3個切片需要加載對應的地圖圖檔,保證地圖的正确性。

是以,當玩家在地圖上移動時,玩家始終處于九宮格的中心區域,玩家周圍始終有足夠的視野區域,當玩家跨越切片邊界時,切片九宮格即時更新,使得玩家感受不到地圖的切換過程,達到無縫漫遊的效果。

角色的地理位置、朝向、行走狀态都來自手機的傳感器,如gps、加速度計等。對于角色的地理位置(經緯度坐标),需要進行坐标轉換,以對應到遊戲引擎中的坐标。

如圖,将左上角第一個地圖切片的左上角與unity中的世界原點對應,即(0,0)對應經緯度(o-lat,o-lng),設unity中地圖切片的長寬分别為w、h,切片實際覆寫的經緯度分别為d-lat、d-lng:

AR+LBS線下社交遊戲嘗試

則若目前玩家的真實地理位置經緯度為(x,y),可得玩家所屬切片索引為:

AR+LBS線下社交遊戲嘗試

玩家在unity中的坐标(忽略z軸)為:

AR+LBS線下社交遊戲嘗試

相應地,也能根據玩家在unity中的坐标,計算出玩家的經緯度。

繼續閱讀