Unity 寶可夢遊戲製作 - GO Map 教學

Author: Kelvin Huang

GO Map 是一套支援 Unity AR 擴增實境遊戲的開發套件,協助您製作類 Pokemon GO 寶可夢遊戲,玩家可透過手機的 GPS 定位移動,地圖上的道路與河流可修改外觀,開發時可在 Unity 編輯器使用鍵盤操作移動,支援 Android 與 iOS 行動裝置。

快速連結 [寶可夢] [玩家名稱] [任務系統] [卡路里計算]

 

先從資源商店搜尋並將 GO Map 下載到專案。

 

GoMap 使用向量地圖資料 (Vector map tiles) 建立場景中的 3D 地圖,並且不需要使用點陣影像,向量地圖拼貼包含地圖所需的全部資訊,擁有低網路流量的優點。透過 Inspector 可切換地圖 API 無需再次設定。地圖資料可選擇以下平台:

地理圖資服務平台 Mapbox OSM ESRI
基本地圖功能 YES YES YES
顯示街道名稱 YES ?  
最大縮放等級 16 ?  
使用 protobuffer YES ? YES
申請說明網頁 API Key ? API Key

 

GoMap 重要觀念

Tile Buffer 拼貼暫存是一個可在 Inspector 設定的數值,設定各方向的拼貼數量,建立周圍的地圖。設定較高的 Tile buffer 數值代表更大的地圖並產生更多的請求,當需要在 Unity 編輯器建立地圖時,可以先設定為較高的數值。

 

GoMap 展示場景

開啟 Drop features - Demo 展示場景。

選取 Map-Flat 並設定 Map Type = Esri(使用 Esri 無需輸入 API Key 即可載入地圖資料)

LocationManager 負責處理 GPS 位置,接受來自 GPS 定位訊號或者自行輸入的經緯度,

按下 Play 測試遊戲,您可以從 Hierarchy 視窗選取 LocationManager 位置管理員,透過 Inspector 屬性編輯器可以從 Demo Location 下拉選單選擇不同的位置測試,例如倫敦、紐約、巴黎、威尼斯等著名都市。以下為法國「巴黎」的地圖。可以使用鍵盤 WASD 模擬 GPS 移動位置。

Avatar 是玩家的替身,您可以進行修改,替換成喜歡的物件。

使用 Unity 的 Input.Location 類別處理 GPS 位置,將 GPS 座標轉換成 Unity 世界座標,

(2D x,z). 當玩家移動時,將會使用 Events 與 delegation 的方式,通知 (Notify) 地圖需要進行更新。

 

 

開發時可使用輸入的經緯度,將 Demo Location 設為「Custom」,例如 台北 101 大樓的位置:

Latitude 緯度 = 25.034020

Longitude 經度 = 121.564810

Altitude 海拔 = 海拔高度無需設定

設定地圖上顯示的物件

從 Inspector 展開 Layers 即可設定圖層類型↓

Element 0 = Buildings 建築物

Element 1 = Landuse

Element 2 = Water 河流、湖泊、海域

Element 3 = Roads 道路(高速公路、主要道路、次要道路可分別設定)

 

GO Map + Dialogue System

此遊戲需要的任務管理與對話功能,將整合 Dialogue System 開發。

匯入 Dialogue System 後將預製物件拖曳到場景。

 

玩家接近時,先閃爍或發出提示音。

建立一個新的場景,執行 [ GameObject > 3D Object > GO Map ]

選取 Location Manager 並設定 Demo Location = Custom 自訂,然後輸入經緯度。

選取 Location Manager > Map 使用屬性編輯器輸入 Mapzen_api_key

但是缺少設定項目,刪除 Map 物件,搜尋 Map - 3D (或 Map - Flat )拖曳到 Hierarchy 視窗。

然後將 Location Manager 拖曳到 Location Manager 欄位即可。

 

設定玩家屬性

玩家 HP = 類似擁有精靈球的數量,當 HP 不足時可以前往補給站。

玩家體重 = 提供玩家輸入體重的功能,用於計算消耗的卡路里。

卡路里 = 計算玩家移動時消耗的卡路里,數值僅供參考。

建立 PlayerStats.cs 腳本,套用到場景的 Avatar 物件。

 

加入補給站

GO Map 在編輯模式預設並不會載入地圖,將物件放在正確位置並不容易,您可以先從圖資服務平台下載區域地圖,操作上就會比較簡單,以下是操作的步驟:

選取 Map - Flat 後在 Inspector 的 GO Map Editor 元件按 Load Map in Editor 按鈕。

此時 GO Map 從伺服器開始下載設定位置的地圖,並將這些 3D 物件設為此地圖物件的子物件。

若不再需要此區域地圖,按下 Destroy Map in Editor 刪除已下載的物件,再下載其他位置地圖。

建立一個方塊代表補給站,套用 GO Make Prefab 腳本,玩家進入補給站範圍時能觸發特定事件。

建立一個 C# 腳本並命名為「TriggerTest」,套用到補給站的方塊物件,功能是玩家進入方塊的觸發器區域時,增加玩家 HP 並刪除方塊,腳本的程式碼如下:

 

預先載入資料到 GoMap 快取資料夾

GoMap 允許開發者預先載入指定區域的地圖,遊戲進行時不需要再對伺服器提出請求,請執行以下步驟:

使用 Inspactor 的按鈕清除 Unity editor cache 快取資料夾。

透過在 Unity 編輯器執行 GoMap 並在您需要的範圍走動 (or set a large buffersize and custom coordinates in the locationManager) ,載即下載這個區域所需要的資料。

Go pick the files from the unity editor cache folder of your project and copy them into your project resources folder. GoMap cache folder is situated in the “persistentDataPath/GoCache” folder of your unity editor.

PersitentDataPath

在您的程式碼啟動 GoMap 之前的某個部份,您只需要將這些檔案複製到 build cache 資料夾

Application.persistentdatapath/GoChache

在快取資料夾的每個檔案,您可以使用包含在 GoMap 的 FileHandler.cs 腳本的 static methods :

public static void Save(string filename, byte[] bytes)
public static byte[] Load(string filename)

設定後 GoMap 將會從快取資料夾讀取檔案,試試看吧!

 

設定補給站的座標位置

 

dev

Copyright © 2024 CG Digital Corp. All rights reserved.