> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Defold 的 Lua 快速入門

> 設定 Defold 專案，並使用 PlayFab Defold 用戶端 SDK 以 Lua 進行您的第一次 PlayFab API 呼叫，以進行跨平台遊戲開發。

本快速入門可協助您使用 Defold 進行第一次 PlayFab API 呼叫。

您必須先擁有 [PlayFab 開發人員帳戶](https://developer.playfab.com)，才能呼叫任何 PlayFab API。

## Defold 專案設定

作業系統：本指南是針對 Windows 10 撰寫的。它在 Mac 上應該也能正常運作。

1. 建立帳戶並下載 Defold，或在 [https://www.defold.com/](https://www.defold.com/) 登入 (使用 Google O-Auth)：[https://d.defold.com/stable/](https://d.defold.com/stable/)。

2. 如果您尚未完成 Defold 的「Getting Started Tutorial」，現在應該先完成。

3. 在 Defold Dashboard 上建立新專案，如下所示。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-add-project.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cb5e329e814177d3456031004cccfe39" alt="建立新的 Defold 專案" width="162" height="376" data-path="images/playfab/sdks/lua/defold-add-project.png" />

4. 執行 **Defold**，然後載入您的新專案。您應該會看到數個類似下方範例的視窗。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dashboard.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=3451047b4d248b54063ae35d647b01f4" alt="Defold 儀表板" width="1626" height="1360" data-path="images/playfab/sdks/lua/defold-dashboard.png" />

5. 更新專案設定，並將 PlayFab 加入相依性中：

   [https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip](https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip)

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-1.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=801a76d9fbd6fd3c4d1c2674a6cae4be" alt="將 PlayFab 新增至相依性" width="865" height="294" data-path="images/playfab/sdks/lua/defold-dependency-1.png" />

6. 選取：**Project** -> **Fetch Libraries**，您應該會看到新的內建 PlayFab 資料夾，如下所示。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-2.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=ce12f4685d293dc015acdf6132997d53" alt="專案擷取程式庫" width="812" height="289" data-path="images/playfab/sdks/lua/defold-dependency-2.png" />

7. 建立幾個檔案：

   * **main/PfGettingStarted.gui**

   * 選取「main」資料夾 -> **new** -> **Gui File** -> **PfGettingStarted.gui**。

   * **main/PfGettingStarted.gui\_script**

   * 選取「main」資料夾 -> **new** -> **Gui Script File** -> **PfGettingStarted.gui\_script**。

8. 在 main.collection 中連結我們新的 GUI。

   * 選取 main.collection 以將其開啟。

   * 在 Outline 面板中：
     * 選取 **Add Game Object** (可選擇將其重新命名為 **PfGui**)。
       * 選取新物件，然後選取 **Add Component From File...**
         * PfGettingStarted.gui (於上方建立)。

   * 檢視 main.collection 的 Outline 面板應該會類似下方所示的範例。

     <img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-main-outline.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cdc7b1fa9078bf5fcd4bb85877858a7a" alt="主要 Outline 面板" width="259" height="110" data-path="images/playfab/sdks/lua/defold-main-outline.png" />

PlayFab 安裝已完成。此專案還無法建置，但我們會在下一個步驟中修正這個問題。

## 設定您的第一次 API 呼叫

本指南將提供進行第一次 PlayFab API 呼叫所需的最少步驟。您可以在遊戲視窗中看到確認訊息。

1. 在 Defold 編輯器中，按兩下 **PfGettingStarted.gui\_script**。

2. 這應該會開啟檔案以進行文字編輯。

3. 更新 PfGettingStarted.gui\_script 的內容，如下所示。

<Note>
  若要查閱此範例中 loginRequest 物件的正確格式，請參閱 [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid) 的 API 參考。
</Note>

```gui_script theme={null}
local PlayFabClientApi = require("PlayFab.PlayFabClientApi")
local IPlayFabHttps = require("PlayFab.IPlayFabHttps")
local PlayFabHttps_Defold = require("PlayFab.PlayFabHttps_Defold")
IPlayFabHttps.SetHttp(PlayFabHttps_Defold) -- Assign the Defold-specific IHttps wrapper

PlayFabClientApi.settings.titleId = "144" -- Please change this value to your own titleId from PlayFab Game Manager

function init(self)
    local loginRequest = {
        -- See the API reference for LoginWithCustomID
        TitleId = PlayFabClientApi.settings.titleId,
        CustomId = "GettingStartedGuide",
        CreateAccount = true
    }
    PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)
end

function OnLoginSuccess(result)
    local pfTestOutput = gui.get_node("pfOutput")
    gui.set_text(pfTestOutput, "Congratulations, you made your first successful API call!")
end

function OnLoginFailed(error)
    local pfTestOutput = gui.get_node("pfOutput")
    local message = "Something went wrong with your first API call.\n"
    local message = message .. "Here's some debug information:\n"
    local message = message .. error.GenerateErrorReport()
    gui.set_text(pfTestOutput, message)
end
```

4. 在 **Defold** 編輯器中，以滑鼠右鍵按一下 **PfGettingStarted.gui** -> **Open With** -> **Text Editor**。遺憾的是，這會變更 Defold 中的內部設定，因此：

   * 再次開啟它：以滑鼠右鍵按一下 **PfGettingStarted.gui** -> **Open With** -> **GUI Editor**。這會將預設值重設回正常狀態。

   * 選取 **PfGettingStarted.gui** 的文字編輯索引標籤。

   * 更新 PfGettingStarted.gui 的文字內容，如下所示。

```gui_script theme={null}
script: "/main/PfGettingStarted.gui_script"
fonts {
  name: "system_font"
  font: "/builtins/fonts/system_font.font"
}
background_color {
  x: 0.0
  y: 0.0
  z: 0.0
  w: 1.0
}
nodes {
  position {
    x: 100.0
    y: 620.0
    z: 0.0
    w: 1.0
  }
  rotation {
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0
  }
  scale {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  size {
    x: 1080.0
    y: 520.0
    z: 0.0
    w: 1.0
  }
  color {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  type: TYPE_TEXT
  blend_mode: BLEND_MODE_ADD
  text: "Logging in..."
  font: "system_font"
  id: "pfOutput"
  xanchor: XANCHOR_LEFT
  yanchor: YANCHOR_TOP
  pivot: PIVOT_NW
  outline {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  shadow {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  adjust_mode: ADJUST_MODE_FIT
  line_break: false
  layer: ""
  inherit_alpha: true
  clipping_mode: CLIPPING_MODE_NONE
  clipping_visible: true
  clipping_inverted: false
  alpha: 1.0
  outline_alpha: 1.0
  shadow_alpha: 1.0
  template_node_child: false
  text_leading: 1.0
  text_tracking: 0.0
  size_mode: SIZE_MODE_AUTO
}
material: "/builtins/materials/gui.material"
adjust_reference: ADJUST_REFERENCE_PARENT
max_nodes: 512
```

## 完成並執行

首先，請確定所有內容都已儲存，然後選取另一個索引標籤。接著尋找「 \* 」標記 - 有時 Defold 不會重新整理。

然後，建置您的遊戲 (Ctrl+b 或下拉式功能表：**Project** -> **Build and Launch**)。您應該會在畫面上看到下列文字：

"Congratulations, you made your first successful API call!"

如需所有可用用戶端 API 呼叫的清單，請參閱我們的 [PlayFab API 參考](/zh-TW/services/playfab/api-references)文件。

祝您程式撰寫愉快！

## 解構程式碼

* `PfGettingStarted.gui`
  * 我們對 `PfGettingStarted.gui` 的指示是為了方便起見，而非教學。此檔案是 GUI 定義，它會在畫面上新增文字方塊，並將其繫結至我們的另一個指令碼：`PfGettingStarted.gui_script`。您通常「不會」以文字形式編輯這些檔案。
  * 如需有關如何建置 Defold GUI 小工具的正確指示，請閱讀本指南：
  * [Defold 中的 GUI 場景](https://www.defold.com/manuals/gui/)

* `PfGettingStarted.gui_script`
  * Require 陳述式和設定。
    * `PlayFabClientApi` 可讓您進行 Client API 呼叫 - 這就是您來到這裡的原因。
    * IPlayFabHttps 和 PlayFabHttps\_Defold：
      * PlayFab Defold 外掛程式是以 PlayFab LuaSdk 為基礎建置的。Lua 語言沒有適當的 HTTPS 模組。每個使用 Lua 的遊戲引擎都會實作自己的模組。這兩個變數會告訴 PlayFabSdk 如何存取 HTTPS。您只需要在專案的第一個場景中執行一次此動作。除此之外，這是必要的重複使用程式碼

  * `PlayFabClientApi.settings.titleId = "144"`
    * 每個使用 PlayFab 的專案都應該在 PlayFab 網站 (我們稱之為 Game Manager) 中建立唯一的遊戲。在 Game Manager 中找到您的 `titleId`，並將 `144` 取代為您的 `titleId`。

  * `function init(self)`
    * Defold 函式 - 在 GUI 初始化時呼叫。

  * `local loginRequest = { TitleId = PlayFabClientApi.settings.titleId, CustomId = "GettingStartedGuide", CreateAccount = true }`
    * 大多數 PlayFab API 方法都需要輸入參數，而這些輸入參數會封裝在要求物件中
    * 每個 API 方法都需要唯一的要求物件，其中包含選擇性和必要參數的組合
      * 對於 `LoginWithCustomIDRequest`，有一個必要參數 `CustomId` 可唯一識別玩家，還有 `CreateAccount` 允許透過此呼叫建立新帳戶。
    * 對於登入，大多數開發人員會想要使用更合適的登入方法
      * 如需所有登入方法和輸入參數的清單，請參閱 [PlayFab 登入文件](xref:titleid.playfabapi.com.client.authentication)。常見的選擇包括：
        * [LoginWithAndroidDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithandroiddeviceid)
        * [LoginWithIOSDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithiosdeviceid)
        * [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress)

  * `PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)`
    * 這會使用要求執行 API 呼叫，並提供成功和失敗情況的回呼函式。

  * `function OnLoginSuccess(result)`
    * 許多 API 成功回呼的 result 物件會包含所要求的資訊。
    * `LoginResult` 包含玩家的一些基本資訊，但對大多數使用者而言，登入只是呼叫其他 API 之前的必要步驟。

  * `function OnLoginFailed(error)`
    * API 呼叫可能因許多原因而失敗，您應該一律嘗試處理失敗情況。

    * API 呼叫失敗的原因 (依可能性排序)
      * 未設定 PlayFabSettings.TitleId。如果您忘記將 titleId 設定為您的遊戲，則一切都無法運作。

      * 要求參數。如果您沒有為特定 API 呼叫提供正確或必要的資訊，呼叫就會失敗。如需詳細資訊，請參閱 `error.errorMessage`、`error.errorDetails` 或 `error.GenerateErrorReport()`。

      * 裝置連線問題。行動電話會不斷失去/恢復連線，因此任何 API 呼叫都可能隨時隨機失敗，然後又立即恢復正常。進入隧道可能會讓您完全中斷連線。

      * PlayFab 伺服器問題。就像所有軟體一樣，可能會發生問題。如需更新資訊，請參閱我們的[版本資訊](/zh-TW/services/playfab/release-notes)。

      * 網際網路並非 100% 可靠。有時訊息會損毀或無法送達 PlayFab 伺服器。

    * 如果您在偵錯問題時遇到困難，而錯誤資訊中的內容又不足夠，請造訪我們的[論壇](https://community.playfab.com/index.html)

  * `local pfTestOutput = gui.get_node("pfOutput")`
    * 這是另一個 Defold GUI 函式。它會擷取在 PfGettingStarted.gui 檔案中定義的 `pfOutput` GUI 物件，並指派要向使用者顯示的文字。


## Related topics

- [Corona 的 Lua 快速入門](/zh-TW/services/playfab/sdks/lua/quickstart-corona.md)
- [Unity 快速入門](/zh-TW/services/playfab/sdks/unity3d/quickstart.md)
- [適用於 Linux 的 C++ 快速入門](/zh-TW/services/playfab/sdks/playfab-cpp/quickstart-linux.md)
- [適用於 Windows 的 C++ 快速入門](/zh-TW/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [Unreal Engine 快速入門](/zh-TW/services/playfab/sdks/unreal/quickstart.md)
