注意:Google 地圖平台遊戲服務已於 2021 年 10 月 18 日淘汰。2022 年 12 月 31 日過後,現有使用者仍可繼續使用。在此期間,我們會持續提供重大錯誤和服務中斷問題的相關支援和修正。請參閱遊戲服務轉換指南,瞭解如何妥善規劃專案的後續步驟。

Playable Locations API 設計總覽

Playable Location API 提供一系列已收集和產生的地理點 (可播放位置)。Google 會選擇每個可前往的地點,並根據位置遊戲中是否適合使用資源,為維修站和遊戲獎勵等層面提供積分。

有些可試玩的地點以及鄰近的搜尋點之間有些地點,有些道路位於道路旁的人行道上,有些則標榜在公園、遊樂場、城鎮廣場和其他公共區域上。

本文件將概略說明 API 的實作方式,讓第三方開發人員運用重要概念,以替代資料來源產生一組可播放位置。

背景

本節概述使用的支援資料庫,並介紹與可播放位置相關的基本概念。

支援資料庫

本指南使用了下列支援資料庫。

程式庫 說明
S2 幾何圖形 彈性支援空間索引功能。
通訊協定緩衝區 語言中立的平台中性和可擴充性方法,可以將結構化資料序列化,以便用於通訊通訊協定、資料儲存空間等。

S2 幾何圖形程式庫

S2 幾何圖形程式庫是代表 3D 全景資料的地理資訊系統。這個程式庫包含下列功能:

  • 支援空間索引。
    • 這可以讓您將任意區域視為大致獨立的 S2 儲存格。
    • 快速增加記憶體內點、折線和多邊形的記憶體空間索引作業。
  • 完善的建構作業 (例如交集、聯集和簡化) 和布林值述詞 (例如是否包含影片)。
  • 高效率的查詢作業,可用於尋找附近的物件、測量距離,以及計算質感。
  • 一系列數學運算式,用於測試幾何原始物件之間的關係。
  • 對齊圓滑。

S2 儲存格統計資料

S2 Cell 統計資料可用於計算特定 QPS 的下載時間,

S2 幾何圖形程式碼存放區

複製任何這些存放區,即可開始使用 S2 Cell。

SSTable

SSTable 檔案格式是用來有效儲存、處理及交換資料集。SSTable 提供從鍵到值的不可變更有序映射,其中的鍵和值均為任意位元組字串。

可播放位置

一般來說,「位置」是地圖上的地理點,但「可播放位置」是適合在實際遊戲中放置遊戲物件的位置 (也就是獎品等點數)。

可播放位置的類型

精選

收錄的可播放位置是指與特定位置存在物件的關聯點。代表地點介面集的搜尋點位置。

已產生

如果可收錄的可播放地點數量不符合你的條件,那麼 Playable Location API 就會產生額外的可播放位置。這些可產生的播放位置是與現有物件「沒有」的地理位置點。這些地理區域點是以程式輔助方式建立,並會隨機地置於人行道、公園、海灘、遊樂場、城鎮廣場和其他公共區域。

這個目標必須至少提供可播放位置的最小密度,並根據以下條件進行考量:

條件 範例
玩家安全 遊戲獎勵不應出現在高速公路的中間或軍事基地中。
適合玩遊戲的遊戲環境 玩家不應幹擾墓地或宗教場所。

可播放的位置屬性

以下討論 Google Play 實作中與 Playable Location 物件相關聯的部分屬性,開發人員可能認為這些技術對於建構位置遊戲很有用。

PlaceId
可明確識別位置的英數字元字串。這是代管可播放位置的地點 ID (例如 Chlj79ZW1ohQwokRWPGmWQ2K4)。您可以使用遊戲中可播放位置的地點 ID,將遊戲專屬中繼資料附加至位置。
plusCode
Plus Code:專門用來識別產生的可播放位置。Plus Code 為英數字元字串。例如 23CPRV2R+WG76。您可以使用產生的位置加號,將遊戲特定中繼資料附加到位置。
類型
可播放位置類型 (字串),指定可播放位置類型的陣列。陣列中的第一個類型會視為「主要類型」。舉例來說,您可以把可播放的位置設為 Entertainment 和 Outdoor_recreation。
中心點
與地點中心點相對應的地理座標。中心點可用來判斷位置是否位於特定區域內。
nnappedPoint
這個位置座標對應到最近道路的巷弄 (如果附近道路存在)。如果業主不想在內部遊戲環境中顯示遊戲玩家,可以使用綁定點放置遊戲物件。如果無法使用貼齊點,則應使用中心點。
biomeType
如果可播放位置在生物簡介中,這個欄位會填入一或多個 BiomeType 值。例如森林、濕地和都會區。

設計

選擇遊戲中的選擇

選取收錄的地點

如上所述,精選地點是現實世界搜尋點 (POI)。以下將概略介紹用於產生這些位置的資料管道 (包括選取和篩選條件)。這個管道的目標,是要輸出 S2CellId 索引鍵的 SStable 虛擬化位置,接著可以提供給資料庫,以取得指定區域中可播放位置的即時查詢。

假設開發人員可以存取具有排除搜尋點的地圖功能或地點存放區,其中包含排除區域的幾何圖形 (不應提供「可播放位置」)。

管道採用合併許可清單/封鎖清單的方式,在此情況下,我們會選取符合遊戲類型允許 (例如咖啡廳、圖書館、花店等) 允許類型的所有搜尋點,同時會篩除屬於排除區域的所有搜尋點。這些排除區域的幾何圖形 (例如定界框) 是一組預先定義的地圖功能 (例如軍事基地、墓園),不適合用來進行遊戲過程 (例如軍事基地、公墓),用於產生 S2 覆蓋。然後,您可以使用這些 S2 涵蓋項目,判斷所選任何搜尋點是否位於排除的區域,以及是否遭到篩除。接下來,系統會將第一組收錄地點的中心點轉換為等級 30 的 S2CellId,藉此建立索引。如此一來,就能針對特定區域內的可播放位置查詢範圍。

收錄位置管道圖。

選取產生的位置

如上所述,產生的地點會用來補充現實世界搜尋點沒有可玩遊戲所需的密度的區域。一般來說,我們在每個 16 S2 儲存格 (約 0.02 公里^2) 的 9 個可播放位置中,找到了 9 個可播放位置,應該都能接受以位置為基礎的遊戲。

系統會使用這些許可清單/封鎖清單做法,產生這些「隨機」地理點。許可清單是認為可以產生點 (例如公園、人行道等) 的地圖項目,而封鎖清單是應該排除某個地區的區域,例如水體、車道等。無論是哪一種情況,地圖地圖項目幾何圖形都會用於產生涵蓋自身區域的 S2,而這兩組區域經過彙整後,系統會從納入的區域扣除這些區域,以便產生產生的最終候選區域。最後一步是「隨機」在這些區域中產生地理位置點,並以 S2CellIds 寫入標示為 SStable 的 SStable,代表中心點。針對產生的位置,「加號」會用來當做地點 ID。

產生的位置管道圖。

位置管道總覽

如前文所述,上述兩個資料管道的輸出內容是兩個使用 Play 位置的 SSTables ,且在 S2Cell 30 層級使用 S2CellId 建立索引。這些檔案可以載入任何已排序的鍵/值儲存庫,以便進行空間查詢。其中一個選項是 Google 的分散式 SQL 資料庫 Spanner

已排序位置鍵/值管道圖。

生物群落

生物學是植物和動物的社群,彼此共享常見的環境調整特性。針對生物共享的氣候而形成的生物群。例如森林、濕地和都會區。

如果在可試玩中位於可播放位置時,生物特徵辨識欄位可填入一或多個 BiomeType 值。

你可以使用生物資訊資訊在地圖上放置不同的遊戲物件類型。 舉例來說,如果生物特徵欄位包含 草地的值,就可能會產生不同類型的生物,比生物基地值包含 urban 值。

以下說明在上方的「位置」管道中,將生物特徵資訊新增至「可播放位置」的流程。Google 的 Earth Engine 包含多個地域資料集,當中包含森林、草地和水域,可用於取得生物資訊。建議您按照以下概略步驟新增生物資訊:

  • 彙整包含生物特徵和地理位置資訊的資料。
  • 根據生物地理位置,將生物特徵資訊指定為現有可播放位置的屬性,通常可以透過空間彙整。舉例來說,如果在 S2 Cell 層級 17 提供 Bime 資訊,且使用 S2CellId 的第 30 層為可播放位置建立索引,則彙整方式如下:
    1. 將可播放位置在第 17 級以下:PlayableLocation.s2CellId.parent(17)
    2. 在第 17 關使用 Biome S2CellIds
  • 如果有可試玩的地點與生物特徵屬性,請一起提供

可播放位置的 Bime 存放區圖表。

正在查詢可播放位置

如果您按照上述建議操作,並在第 30 層使用 S2CellIds 建立索引可播放位置 (請參閱 S2 程式庫從 LatLng 轉換成儲存格 ID),我們就能執行範圍掃描,擷取特定區域的所有可播放位置。

查詢範例:

如要擷取位於 S2Cell 層級 12 (~5 公里^2) 內所有可播放位置的所有服務位置,可以發出以下查詢:

S2CellId:0x89c2599000000000 Range Min: 0x89c2598000000001 (s2CellId.rangeMin().id()) Range Max:0x89c2599fffffffff (s2CellId.rangeMax().id())

SELECT * FROM PlayableLocations
WHERE S2CellId BETWEEN 0x89c2598000000001 AND 0x89c2599fffffffff;

間距

S2Library 再次建議使用於控制遊戲可玩位置的密度。S2 層級是階層式,因此在第 14 關的每個儲存格中,都會有 4 個層級的第 4 個儲存格,依此類推 (請參閱「S2 儲存格統計資料」)。當您在遊戲中放置遊戲物件時,可以運用這些屬性。舉例來說,您可以把每個關卡的 14 個儲存格都裝成一個「怪物」,並平均分配到該區域中的 64 個「珠寶」(每把一個 17 個儲存格放在 17 個儲存格中,每個樓層共有 64 個儲存格)。

查詢及快取互動

遊戲用戶端、遊戲伺服器、遊戲狀態資料庫和可玩位置資料庫之間的建議邏輯流程如下圖所示。請注意,您可以將遊戲狀態與可玩位置合併為單一資料庫,但為了清楚起見,我們在這裡將其分開。

可查詢位置的快取和快取圖表。

位置回報錯誤

以下說明在遊戲中,允許玩家回報無法遊玩的位置,以收集遊戲中可播放位置品質的品質。這些報表可在資料管道中處理,並用來從 Playable Location Database 移除錯誤位置。

建議您按照下列步驟導入錯誤的位置回報功能:

  • 建構用戶端進入點 (行動裝置或網路表單),讓玩家提交遊戲的結構化分數報表。
  • 建立資料管道來處理所有收到的報表並產生信號,協助判斷每個位置的劣質程度。
  • 我們會根據實際用途,使用純機器學習模型或混合型機器學習模型+人力解決方案來擴大審核程序,從 PlayableLocationsDB 移除不當地區。

位置回報錯誤圖表。

以下列舉一組條件,可用來判斷 Playable Location 是否有誤:

條件 範例
不安全
  • 可玩位置在懸崖邊緣 50 公尺內。
  • 可試玩的地點位於主要幹道的中間,或是即將搬家。
非公共區域
  • 受限制的政府設施。例如軍事基地。
無法存取
  • 設有圍欄的區域。
  • 水面地標。
暫時無法使用
  • 用於整修的營業地點。
  • 季節性營業的地點。
  • 道路已維修超過一週。
文化敏感
  • 墓園。
  • 宗教場所。