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

# 시작하기

> Unity 프로젝트에 DARO Unity SDK를 설치하고 초기화하는 방법을 안내합니다.

<Note>
  애드유닛은 앱에서 광고를 표시할 지면과 광고 포맷을 설정한 단위입니다. DARO 2.0 SDK에는 업데이트된 대시보드의 **Ad Unit Key**를 복사해 입력하세요. 앱 설정에 쓰는 Integration Key와는 다른 값입니다. API 인자 `adUnitId`, `unitId`, `key`와 예제의 `YOUR_AD_UNIT_ID`는 이름을 그대로 사용하지만, 입력할 값은 해당 애드유닛의 Ad Unit Key입니다. 기존 애드유닛 ID를 사용한 연동도 계속 지원합니다. 리포트·콜백의 식별자를 새 연동용 키와 혼동하지 마세요.
</Note>

## 시작하기 전에

Unity 프로젝트에 DARO Unity SDK를 설치하기 전에 다음 항목을 준비하세요.

* DARO 대시보드에서 발급한 플랫폼별 Integration Key
* 사용할 광고 포맷별 Ad Unit Key
* Unity 2021.3 LTS 이상
* Android Build Support 또는 iOS Build Support가 설치된 빌드 환경

[app-ads.txt 설정](/ko/app-ads-txt-settings)도 완료해주세요.

<Note>
  플랫폼별 Integration Key로 SDK를 설정합니다. 별도의 앱 키나 키 파일을 입력할 필요가 없습니다.
</Note>

## SDK 설치하기

권장 설치 방법은 `DaroPackageInstaller.unitypackage`를 사용하는 것입니다.

<Steps>
  <Step title="Installer 패키지 가져오기">
    GitHub Release에서 [`DaroPackageInstaller.unitypackage`](https://github.com/delightroom/DaroUnitySDK/releases/download/sdk%2F1.0.0/DaroPackageInstaller.unitypackage) 파일을 다운로드합니다.
  </Step>

  <Step title="Unity 프로젝트에 import하기">
    Unity Editor에서 **Assets > Import Package > Custom Package**를 선택한 뒤 `DaroPackageInstaller.unitypackage`를 import합니다.
  </Step>

  <Step title="패키지 설치 확인하기">
    Installer가 `Packages/manifest.json`에 OpenUPM scoped registry, EDM4U, `so.daro.unity` 의존성을 추가합니다.

    `so.daro.unity` 최신 패키지 버전은 `1.0.0`이며, EDM4U `com.google.external-dependency-manager@1.2.187`을 사용합니다.

    설치 중 Unity가 **`Importing a scoped registry`** 알림을 띄웁니다. OpenUPM 레지스트리가 추가됐다는 Unity 자체 안내이므로 **Close**를 누르면 됩니다.
  </Step>

  <Step title="Integration Manager 실행하기">
    Unity Editor 메뉴 막대에서 **Daro > Integration Manager**를 열고 프로젝트 설정을 검증합니다. `Daro`는 `Assets` 아래가 아니라 **최상위 메뉴**입니다.
  </Step>
</Steps>

<Tip>
  Installer는 Unity 프로젝트의 `Packages/manifest.json`에 OpenUPM registry를 추가하고 `so.daro.unity@1.0.0` 설치를 시작합니다.
</Tip>

## 프로젝트 설정하기

Unity Editor에서 **Daro > Integration Manager**를 열고 플랫폼별 설정을 입력합니다.

<Note>
  창 위쪽 드롭다운으로 표시 언어를 English / Korean 중에 고를 수 있습니다. 기본값은 English이고, 선택은 프로젝트가 아니라 **Editor 설정에 저장**되므로 같은 머신의 다른 프로젝트에도 그대로 적용됩니다. 아래 라벨은 한국어 기준이며 괄호 안이 영문 라벨입니다.
</Note>

<Steps>
  <Step title="Settings 에셋 생성">
    Integration Manager에서 **Settings 에셋 생성**(Create Settings Asset)을 선택합니다. `Assets/Daro/DaroSettings.asset`이 만들어집니다.
  </Step>

  <Step title="iOS 설정 입력">
    iOS 빌드를 사용하는 경우 **설정**(Settings) 아래 **iOS** 구역의 `INTEGRATION KEY`에 iOS용 키를 입력합니다. App Tracking Transparency 안내 문구는 `ATT 설명`(ATT Description)에 입력합니다.

    입력한 뒤 `키 검증`(Validate Key)을 눌러 키 형식을 확인하세요. 설정을 완료한 후 실제 앱 빌드와 SDK 초기화도 확인해야 합니다.
  </Step>

  <Step title="Android 설정 입력">
    Android 빌드를 사용하는 경우 **Android** 구역의 `INTEGRATION KEY`에 Android용 키를 입력하고 `키 검증`(Validate Key)으로 형식을 확인합니다.
  </Step>

  <Step title="Android 빌드 템플릿 확인하기">
    빌드 타겟을 Android로 전환하면 EDM4U가 \*\*`Enable Android Auto-resolution?`\*\*을 묻습니다. **Enable**을 선택하세요.

    자동 해석이 켜져 있으면 EDM4U가 광고 디맨드 의존성을 해석하면서 아래 세 파일을 **직접 만들고 Player Settings의 템플릿 옵션도 켭니다.** 손으로 켤 필요가 없습니다.

    * `Assets/Plugins/Android/mainTemplate.gradle`
    * `Assets/Plugins/Android/gradleTemplate.properties`
    * `Assets/Plugins/Android/settingsTemplate.gradle`

    <Warning>
      **Disable을 선택했다면 위 세 파일이 만들어지지 않습니다.** 그 경우 **Edit > Project Settings > Player > Android > Publishing Settings > Build**에서 **Custom Main Gradle Template** · **Custom Gradle Properties Template** · **Custom Gradle Settings Template**을 직접 켜고, 의존성이 바뀔 때마다 **Assets > External Dependency Manager > Android Resolver > Resolve**를 손으로 돌려야 합니다. 해석하지 않으면 앱이 동작하지 않습니다.

      자동 해석은 **Assets > External Dependency Manager > Android Resolver > Settings**에서 다시 켤 수 있습니다.
    </Warning>

    Android 빌드 시 DARO Unity SDK가 필요한 Gradle 플러그인, 최소 SDK 설정, ProGuard 규칙을 내보낸 프로젝트에 적용합니다.
  </Step>

  <Step title="설정 검증">
    Integration Manager의 **빌드 검증**(Build Validation)에서 `검사 실행`(Run Checks)을 누릅니다.

    <Warning>
      **검사는 현재 빌드 타겟만 봅니다.** 빌드 타겟이 Standalone(Windows, Mac, Linux)이면 iOS·Android 검사가 아예 돌지 않아 **INTEGRATION KEY가 비어 있어도 통과합니다.** **File > Build Settings**에서 Android나 iOS로 전환한 뒤 실행하세요.
    </Warning>
  </Step>
</Steps>

<Warning>
  Unity `6000.3.17f1` 이상에서 Android 빌드를 하는 경우 `Assets/Plugins/Android/gradleTemplate.properties`에 다음 설정을 추가하세요.

  ```properties theme={null}
  android.uniquePackageNames=false
  ```

  일부 의존성의 호환성을 위해 필요한 설정입니다.
</Warning>

<Tip>
  Integration Manager의 **AI 통합 헬퍼**(AI Integration Helper)를 켜면 Claude Code · Codex · Cursor · Cline 같은 AI 코딩 에이전트가 세션을 시작할 때 SDK의 integration knowledge base를 자동으로 참조합니다. 연동을 에이전트에게 맡기는 경우에만 켜면 됩니다.
</Tip>

<Tip>
  INTEGRATION KEY는 `InitializeAsync()`의 인자로 전달하지 않습니다. Unity 빌드 시점에 iOS는 `Info.plist`로, Android는 `gradle.properties`로 주입됩니다.
</Tip>

<Warning>
  **0.4.0 이하에서 업데이트하는 경우**, 기존 Settings 에셋의 연동 설정을 Integration Key로 변경하세요. DARO 대시보드에서 발급한 키를 iOS와 Android의 각 `INTEGRATION KEY` 항목에 입력합니다.
</Warning>

## iOS 빌드 설정 확인

EDM4U의 iOS Resolver에서 Podfile 생성을 활성화하세요. 생성된 프로젝트에서 CocoaPods 설치까지 완료해야 연동 설정이 적용됩니다.

기존 `post_install` 블록을 직접 관리한다면 DARO 설정이 포함되어 있는지 확인하고, 같은 블록을 중복 선언하지 마세요.

## SDK 초기화하기

앱 시작 시점에 `DaroSdk.InitializeAsync()`를 호출합니다.

```csharp theme={null}
using Daro;
using UnityEngine;

public sealed class GameBootstrap : MonoBehaviour
{
    private async void Start()
    {
        DaroSdk.HasGdprConsent = true;
        DaroSdk.SetUserId("user-12345");

        await DaroSdk.InitializeAsync();
        Debug.Log("Daro SDK ready");
    }
}
```

<Tip>
  개인정보 보호 설정과 사용자 ID는 SDK 초기화 전에도 설정할 수 있습니다.
</Tip>

## 음소거와 로그 설정

`0.5.0-rc.4`에서는 Android와 iOS 모두 초기화 전에 음소거를 설정할 수 있습니다. Unity 메인 스레드에서 호출하세요.

```csharp theme={null}
DaroSdk.LogLevel = DaroLogLevel.Info;
DaroSdk.SetAppMuted(true);
await DaroSdk.InitializeAsync();
// 초기화와 저장된 음소거 설정 적용이 완료된 뒤 광고를 로드합니다.
```

초기화 전이나 진행 중 여러 번 설정하면 마지막 음소거 값이 적용됩니다. 음소거 적용 후 `OnSdkInitialized` 이벤트와 초기화 Task가 완료됩니다. 초기화 후에는 `SetAppMuted(false)`로 해제할 수 있습니다.

iOS에서는 기본 `Info` 설정이 네이티브 SDK의 오류 로그만 활성화합니다. `DaroRewardedAd.IsReady()`를 반복 조회해도 네이티브 debug 로그가 쌓이지 않습니다. 상세 진단이 필요할 때만 `DaroSdk.LogLevel = DaroLogLevel.Verbose`를 사용하고, 확인 후 `Info`로 되돌리세요. Unity 및 브리지의 로그 단계는 유지되며, 개별 광고 디맨드가 직접 출력하는 로그까지 모두 제거하는 설정은 아닙니다.

## 광고 인스턴스 사용 흐름

전체 화면 광고 인스턴스는 다음 순서로 사용합니다.

1. `await DaroSdk.InitializeAsync()`를 완료합니다.
2. 광고 인스턴스를 생성합니다.
3. 이벤트 핸들러를 등록합니다.
4. `Load()`를 호출합니다.
5. 로드 완료 후 `IsReady()`를 확인하고 `Show()`를 호출합니다.
6. 화면이 사라질 때 `Dispose()`를 호출합니다.

배너 광고는 `Load()`가 성공하면 자동으로 표시됩니다. `Show()`는 `Hide()` 후 배너를 다시 표시할 때만 사용하세요.

```csharp theme={null}
using Daro;
using UnityEngine;

public sealed class InterstitialAdHost : MonoBehaviour
{
    private const string AdUnitId = "your-ad-unit-id";
    private DaroInterstitialAd ad;

    private void OnEnable()
    {
        ad = new DaroInterstitialAd(AdUnitId);
        ad.OnAdLoaded += info => Debug.Log($"Loaded: {info.AdUnitId}");
        ad.OnAdFailedToLoad += error => Debug.LogWarning(error.Message);
        ad.Load();
    }

    public void Show()
    {
        if (ad != null && ad.IsReady())
        {
            ad.Show();
        }
    }

    private void OnDisable()
    {
        ad?.Dispose();
        ad = null;
    }
}
```

## 베스트 프랙티스

### 광고 인스턴스 다루기

1. **초기화가 끝난 뒤에 광고 인스턴스를 만듭니다**
   * `await DaroSdk.InitializeAsync()`가 반환된 다음 생성자와 `Load()`를 호출하세요
2. **공개 메서드는 Unity 메인 스레드에서 호출합니다**
   * 생성자와 `Load()`, `Show()`, `Hide()`, `Dispose()`가 모두 해당합니다. SDK 콜백도 Unity 메인 스레드로 전달됩니다
3. **필요 없어진 인스턴스는 `Dispose()`로 정리합니다**
   * SDK가 finalizer 기반 정리를 보조 수단으로 제공하지만, 정리 시점은 보장되지 않습니다
4. **`Show()` 전에 `IsReady()`를 확인합니다**
   * 배너 광고는 `Load()`가 성공하면 자동으로 표시되므로 예외입니다. `Show()`는 `Hide()` 후 다시 표시할 때만 사용하세요

## 다음 단계

연동과 초기화를 완료했다면 사용할 광고 포맷의 구현 문서로 이동하세요.

* [배너 광고](/ko/sdk-integration-v2/unity/ad-formats/banner)
* [네이티브 광고](/ko/sdk-integration-v2/unity/ad-formats/native)
* [인터스티셜 광고](/ko/sdk-integration-v2/unity/ad-formats/interstitial)
* [리워드 비디오 광고](/ko/sdk-integration-v2/unity/ad-formats/rewarded)
* [앱 오프닝 광고](/ko/sdk-integration-v2/unity/ad-formats/appopen)
* [라이트 팝업 광고](/ko/sdk-integration-v2/unity/ad-formats/lightpopup)

노출 단위 수익을 받으려면 [ILRD 사용하기](/ko/sdk-integration-v2/unity/ilrd)를 참고하세요.
