第 3 部分 - 撰寫程式碼 + 範例
現在您已備妥環境並熟悉 Game Manager,我們可以開始為遊戲撰寫程式碼了。必要條件
步驟 1 - 設定環境設定
開始撰寫程式碼後,我們建議您做的第一件事就是設定環境設定。如此一來,您就可以放心,您所做的每個呼叫都會連結至您的遊戲,並使用您特定的開發人員祕密金鑰。 若要完成此步驟,您可以在程式碼中的任何位置 (最好是您容易找到的地方) 指定 TitleId 和 DeveloperSecretKey 變數,並為其指派您的值。 請新增如下兩行個別的程式碼來執行此動作:步驟 2 - 進行驗證
設定好環境、在專案中安裝並設定 PlayFab NuGet 套件,並建立工作室和遊戲之後,我們就可以開始撰寫驗證的程式碼。使用者有數種方式可以進行驗證。在此範例中,我們將使用 LoginWithCustomId 方法。還有其他驗證方式,包括平台特定的方式。如需詳細資訊,請造訪登入基本概念。
接著,驗證使用者的邏輯如下:
C# SDK
API
上述程式碼會尋找連結至您遊戲的任何現有玩家。但如果沒有使用者名稱相符的使用者,就會失敗。若要略過此問題,我們可以在要求本文中新增 “CreateAccount = true” 參數。這樣一來,如果使用者傳送作為使用者名稱的內容沒有相符項目,PlayFab 就會建立新的玩家。這會產生如下所示的程式碼:
C# SDK
API
成功登入之後,API 會傳回一些資料集,例如 SessionTicket、使用者的 PlayFab ID 和 EntityToken。這些可在 API 的直接回應中看到,詳述如下。
當 API 傳回
"code":200,或您從上述 C# 範例的 loginTask 中取得資訊時,表示您已通過驗證,可以繼續進行下一個步驟!
步驟 3 - 設定您的起始庫存
現在您已使用有效的玩家登入 (或建立了新的玩家),您的第一個步驟應該是設定該玩家的起始庫存。為此,我們將使用 ExecuteInventoryOperations API 呼叫。ExecuteInventoryOperations 呼叫可讓我們對玩家的庫存執行多個/批次 InventoryOperations。支援的作業類型包括:- Add - Delete - Purchase - Subtract - Transfer - Update
若要讓此步驟運作,您必須先在 Game Manager 中於您的遊戲內建立物品。
C# SDK
在此 C# 範例中,您可以看到我們一開始就將 purchasePrice 設定為所有交易的標準值,這是因為我們會讓所有交易的價格都為 0。 任何一個物品都可以有多個價格,這就是purchasePrice 變數的類型為 List<PurchasePriceAmount> 的原因。
您可能會注意到的下一個層面是,除了 InventoryOperation 清單之外,要求還需要一個 Entity。為此,我們將使用先前登入時取得的值建立一個新的 Entity。
最後,每個 InventoryOperation 都會接受一個 Purchase 值,不過這可以是 ExecuteInventoryOperations 呼叫下可用的任何一種 (Add、Delete、Purchase、Subtract、Transfer 和 Update)。在此案例中,我們使用 Purchase 識別碼,因此需要 new PurchaseInventoryItemsOperation。
您也必須清楚指定要購買的物品。您可以使用 InventoryItemReference 來執行此動作,它會接受物品的 ID 作為其唯一參數。
在我們的程式碼中,有一個名為 SearchItem({itemName}) 的方法,但您可以輕鬆地以代表物品 ID 的字串加以取代。請務必將每個物品的名稱 (或 ID) 與對應的數量相符。
AlternateId 和 FriendlyId,您的物品必須在 Game Manager 中設定這些值。若要這樣做,建議您查看第 2 部分 - 使用 Game Manager,我們在其中詳細說明您應遵循的步驟。
API
使用下列要求本文呼叫 ExecuteInventoryOperations API 端點。請將 ID 取代為對應的 ID。請注意,Operations 是陣列,您可以同時填入多種類型的作業。
請務必了解,對於您所做的每個 API 呼叫,都必須設定 X-EntityToken 標頭,其中包含您的使用中工作階段或已登入使用者特定的 EntityToken。換句話說,在進行任何 API 呼叫之前,您應先執行 LoginWithCustomID (在此範例中),並從傳回訊息中取得 EntityToken,以作為所有 API 呼叫中的標頭。
步驟 4 - 建立組合
組合可讓您將多個物品分組成單一物品。如需組合的詳細資訊,請透過此連結參閱我們的組合文件。 在我們的範例中,我們將使用組合來分組 Kitchen 傳回的物品,這有助於我們保留 Icebox 物品。Icebox 背後的概念是,在購買冰淇淋時它是非消耗性物品,即使 Icebox 是所需材料之一。 以下是此運作方式的高階概觀。假設有一位玩家的庫存中有一個 Cream 和一個 Icebox。存取 Kitchen 商店後,該玩家必須使用這兩個物品來購買/製作一個 Ice Cream。由於 Icebox 是非消耗性物品,預期的結果是庫存中有一個 Ice Cream 和一個 Icebox,只消耗了一個 Cream 物品。 我們在幕後的處理方式是使用一個組合,其價格為一個 Icebox 和一個 Cream,而其傳回的物品為一個 Ice Cream 和一個 Icebox。這表示玩家庫存中的 Icebox 會被消耗,但消耗它的同一筆交易會再傳回一個,讓玩家感覺 Icebox 一直都在庫存中,但實際上 Icebox 執行個體是不同的,只是玩家看不到。 若要建立組合,您必須前往遊戲的 Economy 區段,就像建立新物品時一樣。在 Items、Currency 等索引標籤旁,會有一個名為 Bundles 的索引標籤。選取之後,畫面右上角會出現一個顯示 New bundle 的藍色按鈕。 接著會顯示一個類似於建立新物品的表單,主要差異在於,如果您向下捲動,會找到一個標題為 Items 的區段。您可以在此新增想要讓組合包含的物品,這些物品會在購買時轉移至玩家的庫存。 按一下 Add 按鈕之後,會彈出目錄中所有物品的可搜尋清單,您可以在此選取要包含在組合中的物品。選取並新增物品之後,您就可以繼續進行 Save and publish,您的組合現在就會處於使用中,並可在商店中選取作為購買價格。步驟 5 - 建立商店
依照我們的製作遊戲範例,我們必須讓玩家從商店購買物品。會有三個不同的商店 (在此案例中為地點):Science Machine、Alchemy Engine 和 Kitchen。 我們將著重於 Kitchen。在這裡,玩家能夠以 1 個 Cream 和 1 個 Icebox (應建立的新物品) 的價格購買 Ice Cream (應建立的新物品)。之所以選擇這個特定案例,是因為它展示了組合如何與商店和交易搭配運作。 商店只能從 Game Manager 建立,方法是前往左側導覽列上的 Economy 區段,然後從不同的索引標籤選項中選擇 Stores,並選取藍色的 New store 按鈕。 這會顯示一個類似於建立新物品時所使用的表單,其中唯一的必要欄位是開始日期以及您想要為商店指定的標題。向下捲動,您將會步驟 6 - 將組合新增至商店
現在您已建立並發佈組合和商店。您可以將組合新增為商店中可傳回的物品。若要這樣做,請進入您的商店,向下捲動直到看到 Items 標題,然後選取 Add 按鈕。 這會顯示目錄中的物品清單。在搜尋列的左側,會有一個下拉式功能表,其中填入不同類型的物件,例如 Items、UGC Items、Bundles 和 Subscription。如果您選擇 Bundles,清單會經過篩選而只顯示組合類型的物品,您應該會在這裡看到先前建立的組合。選取組合名稱旁的 Add 按鈕,然後選取視窗底部的 Add 按鈕之後,該組合就會新增為該特定商店可能的交易物品。 在繼續之前還有最後一個步驟,就是為您的組合設定價格。此價格的運作方式與任何其他物品定價相同,也就是說,在接受購買之前,玩家的庫存中必須有所需的任何價格物品。若要設定價格,您可以選取組合右側的 Add new price 按鈕,然後從物品清單中選取您想要作為價格的任何物品。在我們的案例中,我們希望價格為 1 個 Icebox 和 1 個 Cream。 現在您的組合已新增至商店並已適當定價,我們可以繼續進行下一個步驟。步驟 7 - 購買組合
建立組合和商店,並將組合連結至商店之後,您現在就可以購買該組合,並將產生的物品放入您的庫存中。 若要從玩家的角度購買組合,您可以使用 PlayFab API 的 PurchaseInventoryItems。它不僅適用於組合,也適用於單一物品。API
在下列案例中,我們要以 1 個 Icebox 和 1 個 Cream 的價格購買 1 個組合。我們將使用 PriceAmount 的陣列屬性,將 1 個以上的物品設定為價格。只要確定您已為組合指定 FriendlyId 即可。您會在回應中注意到,您取得了 2 個不同的
TransactionIds。這是因為 DeleteEmptyStacks 屬性會以額外的交易處理。在上一個範例中,交易 212 對應於購買組合,而交易 213 對應於刪除空的 Cream 堆疊 (假設您的庫存中只有 1 個 Cream)。