# Unity でのバナー広告の実装

> Unity プロジェクトにバナー広告を実装します。広告コンテンツをロードし、C# スクリプトを使用して画面上の固定位置に表示します。

> **Note:**
>
> SDK バージョン 4.4.1 から、Unity Ads パッケージは Unity エディターで Advertisement Legacy パッケージと呼ばれるようになりました。
> Advertisement Legacy パッケージのバージョン 4.12 は引き続き機能しますが、新機能や拡張機能のアップデートを受けることはできません。
> SDK バージョン 4.12 では Apple プライバシーマニフェストの更新がサポートされており、パッケージの更新は今後予定されていません。

> **Important:**
>
> app-ads.txt は、詐欺に対処し広告エコシステムに透明性をもたらす IAB イニシアチブです。記載されているとおりに app-ads.txt を実装してください。そうしないと、バナーの需要が大幅に減るおそれがあります。

## スクリプトの実装##script-implementation

スクリプトのヘッダーで、[`Banner`](/grow/ads/unity-sdk/unity-api.md#banner) クラスを含む `UnityEngine.Advertisements` 名前空間を宣言します。次に、SDK を初期化し、[`Banner.Load`](/grow/ads/unity-sdk/unity-api.md#banner-load) メソッドと [`Banner.Show`](/grow/ads/unity-sdk/unity-api.md#banner-show) メソッドを使用して、バナー広告をロードして表示します。

以下のスクリプト例は、シーン内にボタンを設定してこの機能をテストする方法を示します。Unity エディターでボタンを作成するには、**Game Object** (ゲームオブジェクト) > **UI** > **Button** (ボタン) を選択します。

> **Note:**
>
> コンテンツのロードは、SDK が初期化された後にのみ行います。そうしないと、スクリプトは動作しません。この例では、初期化は別のスクリプトでハンドルされています。

### バナー広告の例##banner-ad-example

1. **C#**

   ```cs
   using UnityEngine;
   using UnityEngine.UI;
   using UnityEngine.Advertisements;

   public class BannerAdExample : MonoBehaviour
   {
     // For the purpose of this example, these buttons are for functionality testing:
     [SerializeField] Button _loadBannerButton;
     [SerializeField] Button _showBannerButton;
     [SerializeField] Button _hideBannerButton;

     [SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;

     [SerializeField] string _androidAdUnitId = "Banner_Android";
     [SerializeField] string _iOSAdUnitId = "Banner_iOS";
     string _adUnitId = null; // This will remain null for unsupported platforms.

     void Start()
     {
       // Get the Ad Unit ID for the current platform:
       #if UNITY_IOS
       _adUnitId = _iOSAdUnitId;
       #elif UNITY_ANDROID
       _adUnitId = _androidAdUnitId;
       #endif

       // Disable the button until an ad is ready to show:
       _showBannerButton.interactable = false;
       _hideBannerButton.interactable = false;

       // Set the banner position:
       Advertisement.Banner.SetPosition(_bannerPosition);

       // Configure the Load Banner button to call the LoadBanner() method when clicked:
       _loadBannerButton.onClick.AddListener(LoadBanner);
       _loadBannerButton.interactable = true;
     }

     // Implement a method to call when the Load Banner button is clicked:
     public void LoadBanner()
     {
         // Set up options to notify the SDK of load events:
         BannerLoadOptions options = new BannerLoadOptions
         {
             loadCallback = OnBannerLoaded,
             errorCallback = OnBannerError
         };

         // Load the Ad Unit with banner content:
         Advertisement.Banner.Load(_adUnitId, options);
     }

     // Implement code to execute when the loadCallback event triggers:
     void OnBannerLoaded()
     {
         Debug.Log("Banner loaded");

         // Configure the Show Banner button to call the ShowBannerAd() method when clicked:
         _showBannerButton.onClick.AddListener(ShowBannerAd);
         // Configure the Hide Banner button to call the HideBannerAd() method when clicked:
         _hideBannerButton.onClick.AddListener(HideBannerAd);

         // Enable both buttons:
         _showBannerButton.interactable = true;
         _hideBannerButton.interactable = true;     
     }

     // Implement code to execute when the load errorCallback event triggers:
     void OnBannerError(string message)
     {
         Debug.Log($"Banner Error: {message}");
         // Optionally execute additional code, such as attempting to load another ad.
     }

     // Implement a method to call when the Show Banner button is clicked:
     void ShowBannerAd()
     {
         // Set up options to notify the SDK of show events:
         BannerOptions options = new BannerOptions
         {
             clickCallback = OnBannerClicked,
             hideCallback = OnBannerHidden,
             showCallback = OnBannerShown
         };

         // Show the loaded Banner Ad Unit:
         Advertisement.Banner.Show(_adUnitId, options);
     }

     // Implement a method to call when the Hide Banner button is clicked:
     void HideBannerAd()
     {
         // Hide the banner:
         Advertisement.Banner.Hide();
     }

     void OnBannerClicked() { }
     void OnBannerShown() { }
     void OnBannerHidden() { }

     void OnDestroy()
     {
         // Clean up the listeners:
         _loadBannerButton.onClick.RemoveAllListeners();
         _showBannerButton.onClick.RemoveAllListeners();
         _hideBannerButton.onClick.RemoveAllListeners();
     }
   }
   ```

## バナーの位置##banner-position

デフォルトでは、バナー広告は画面の下部中央に固定して表示され、320 x 50 または 728 x 90 ピクセルの解像度がサポートされています。バナーのアンカーを指定するには、`Banner.SetPosition` API を使用します。例を次に示します。

```cs
Advertisement.Banner.SetPosition (BannerPosition.TOP_CENTER);
```

**次のステップ**: [収益化戦略](/grow/ads/monetization-strategy.md) ガイドを確認し、[実装をテスト](/grow/ads/optimization/test-ads-integration.md) します。
