> ## 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 API를 호출하려면 먼저 [PlayFab 개발자 계정](https://developer.playfab.com)이 있어야 합니다.

## Defold 프로젝트 설정

OS: 이 가이드는 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 "시작하기 튜토리얼"을 완료하지 않은 경우 지금 진행하세요.

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="Create new Defold project" 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 dashboard" 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="Add PlayFab to dependencies" 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="Project fetch libraries" 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="Main Outline panel" 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 참조](/services/playfab/api-references) 문서를 확인하세요.

즐겁게 코딩하세요!

## 코드 분석

* `PfGettingStarted.gui`
  * `PfGettingStarted.gui`에 대한 지침은 편의를 위한 것이며, 설명을 위한 것이 아닙니다. 이 파일은 화면에 텍스트 상자를 추가하고 다른 스크립트인 `PfGettingStarted.gui_script`에 바인딩하는 GUI 정의입니다. 일반적으로 이 파일을 텍스트 형식으로 편집하지 않습니다.
  * Defold GUI 위젯을 빌드하는 방법에 대한 적절한 지침은 다음 가이드를 참조하세요:
  * [Defold의 GUI 장면](https://www.defold.com/manuals/gui/)

* `PfGettingStarted.gui_script`
  * Require 문 및 설정.
    * `PlayFabClientApi`를 통해 클라이언트 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 서버 문제. 모든 소프트웨어와 마찬가지로 문제가 발생할 수 있습니다. 업데이트는 [릴리스 노트](/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 빠른 시작](/ko/services/playfab/sdks/lua/quickstart-corona.md)
- [Linux용 C++ 빠른 시작](/ko/services/playfab/sdks/playfab-cpp/quickstart-linux.md)
- [Windows용 C++ 빠른 시작](/ko/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [GDK용 C/C++ 빠른 시작](/ko/services/playfab/sdks/playfab-cpp/quickstart-gdk.md)
- [Unity 빠른 시작](/ko/services/playfab/sdks/unity3d/quickstart.md)
