ゲーム開発
Unity
UnrealEngine
C++
Blender
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20200625_01

      【Unity】自作ゲームにAdmob広告を実装する(バナー広告・インタースティシャル広告)

      Unityリリース関連UnityプラグインAdmobゴーゴーゴロヤン
      2020-06-25

      マイケル
      マイケル
      どうもみなさんこんばんは!
      マイケルです!
      エレキベア
      エレキベア
      クマ〜〜〜〜
      マイケル
      マイケル
      今日はUnityで作ったゲームに
      広告を実装する方法について紹介していくよ!
      エレキベア
      エレキベア
      広告は嫌いクマ〜〜〜〜
      マイケル
      マイケル
      そうはいっても広告を入れないと
      アプリで収益を得られないからね・・・
      エレキベア
      エレキベア
      避けられない壁ってやつクマか・・・
      マイケル
      マイケル
      それでも最低限、操作性に影響がでないようにしたり
      間違って押させたりしないよう工夫するのが大事だと思っているよ!
      マイケル
      マイケル
      今日紹介するGoogle Admobという広告は実装もそこまで難しくなくて
      カスタマイズもしやすいと思うので、いろいろ工夫してみてね!
      エレキベア
      エレキベア
      心得たクマ

      Unityで使用できる広告サービスについて

      マイケル
      マイケル
      実装できる広告は大きなところじゃなければ山ほどあるけど、
      よく使われているのが「Google Admob」「Unity Ads」だね!
      エレキベア
      エレキベア
      なんか名前は聞いたことあるクマ〜〜
      マイケル
      マイケル
      「Google Admob」は、Googleが提供している広告サービスで、
      「Unity Ads」はUnity公式の広告サービスだよ!
      マイケル
      マイケル
      「Unity Ads」はUnity公式だから実装が簡単だけど動画広告しかないんだ!
      だからとりあえずは情報が多くて種類がある「Google Admob」をおすすめするよ!
      エレキベア
      エレキベア
      このブログもGoogleの広告サービスだったクマね
      マイケル
      マイケル
      そうだね!
      このブログも「Google Adsense」という広告サービスを使用していて、
      Admobはそのモバイル版というイメージだよ!
      エレキベア
      エレキベア
      なるほどクマ・・・
      マイケル
      マイケル
      それでは早速「Google Admob」を使用して実装していきます!

      広告の種類について

      マイケル
      マイケル
      まず広告の種類について!
      Google Admobで実装できる広告は、大きく下の4種類があるよ!


      ・バナー広告
       -> 画面上部や下部にある小さめな広告

      ・インタースティシャル広告
       -> ゲームクリア後などに挟む動画広告(スキップ可)

      ・リワード広告
       -> 報酬等と引き換えにユーザ自身の判断で再生する広告(スキップ不可)

      ・ネイティブアドバンス広告
       -> ゲームのコンテンツ内容に合わせてカスタマイズできる広告

      エレキベア
      エレキベア
      どれもみたことがあるクマ〜〜〜!
      マイケル
      マイケル
      今回は実装が簡単なバナー広告と、
      シーン遷移の間に挟むインタースティシャル広告の実装について紹介するよ!
      エレキベア
      エレキベア
      がんばるクマ〜〜〜!

      広告IDの取得

      マイケル
      マイケル
      実装に入る前に、まずはGoogle Admobに自身のアプリを登録して
      広告IDを作成する必要があります!
      マイケル
      マイケル
      下記公式サイトからアカウントを作成しましょう!


      Google Admob 公式サイト

      マイケル
      マイケル
      アカウントを作成したら左側の「アプリ」メニューから
      「アプリを追加」ボタンを押します!
      マイケル
      マイケル
      すると下記の画面が出てくるので、自身のアプリケーション名を入力して、
      プラットフォームを選択しましょう!
      マイケル
      マイケル
      ちなみに異なるプラットフォームでゲームを出したい場合には
      アプリIDをその数だけ作らなければならないので注意です。
      マイケル
      マイケル
      アプリIDを入力したら次は広告の作成です!
      冒頭で説明した広告4種類が選べますので、ここでは「バナー広告」を選択します!
      マイケル
      マイケル
      任意の広告ユニット名を入力して作成すると、
      アプリIDとユニットID(広告ID)が表示されます!
      マイケル
      マイケル
      こちらのIDは実装時に使用するので、メモをしておきましょう!
      マイケル
      マイケル
      バナー広告IDを取得できたら、同様の手順で

       iOS インタースティシャル広告
       Android バナー広告
       Android インタースティシャル広告

      も作成しておきましょう!
      エレキベア
      エレキベア
      できたクマ〜〜〜〜
      マイケル
      マイケル
      これで準備完了だね!

      Google Mobile Ads Unityプラグインのインポート

      マイケル
      マイケル
      続いてUnity側でAdmobを実装するためのパッケージをインポートします!
      マイケル
      マイケル
      下記、Googleのスタードガイドで提供されているパッケージ、
      GoogleMobileAds-v5.2.0.unitypackage
      をダウンロードしましょう!

      スクリーンショット 2020 06 25 20 20 08


      Google Admob スタートガイド

      マイケル
      マイケル
      ダウンロードが完了したら
      Assets -> Import Package
      より、パッケージの内容を全てインポートします!
      エレキベア
      エレキベア
      インポートまで完了したクマ〜!
      いよいよ実装クマか?
      マイケル
      マイケル
      実装まではあともう一歩!
      Assets -> Google Mobile Ads -> Setting
      より開いた画面で、先ほど入手したアプリIDを入力しましょう!
      マイケル
      マイケル
      そしてAndroidで広告を出したい場合、
      iOSで広告を出したい場合でそれぞれ下記の設定を行います!

      Androidの場合:Assets -> External Dependency Manager -> Android Resolver -> Resolve をクリック

      iOSの場合:Assets -> iOSResolver -> Setting より、下記項目を選択

      マイケル
      マイケル
      ここまでくればあとは実装していくだけです!
      エレキベア
      エレキベア
      長かったクマ〜〜〜〜〜

      バナー広告の実装

      マイケル
      マイケル
      それではまずは一番簡単なバナー広告を実装していきます!


      Google Admob バナー広告

      マイケル
      マイケル
      基本的には上記、Google Admobのサイトで書かれている
      手順で実装していけば大丈夫です!
      マイケル
      マイケル
      「シーンでずっと表示し続けて、シーン遷移の際に破棄する」場合には、
      下記のようなスクリプトを作成して、空のGameObjectに貼り付けます!
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      using GoogleMobileAds.Api;
      
      public class GoogleAdmobBanner : MonoBehaviour
      {
          BannerView bannerView;
      
          void Start()
          {
              // ★リリース時に自分のIDに変更する
              #if UNITY_ANDROID
                      string appId = "ca-app-pub-3940256099942544~3347511713";
              #elif UNITY_IPHONE
                      string appId = "ca-app-pub-3940256099942544~1458002511";
              #else
                      string appId = "unexpected_platform";
              #endif
              // Initialize the Google Mobile Ads SDK.
              MobileAds.Initialize(appId);
      
              RequestBanner();
          }
      
          private void RequestBanner()
          {
              // ★リリース時に自分のIDに変更する
              #if UNITY_ANDROID
                      string adUnitId = "ca-app-pub-3940256099942544/6300978111";
              #elif UNITY_IPHONE
                      string adUnitId = "ca-app-pub-3940256099942544/2934735716";
              #else
                      string adUnitId = "unexpected_platform";
              #endif
              // Create a 320x50 banner at the top of the screen.
              bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
      
              // Create an empty ad request.
              AdRequest request = new AdRequest.Builder().Build();
      
              // Load the banner with the request.
              bannerView.LoadAd(request);
      
          }
      
          private void OnDestroy()
          {
              bannerView.Destroy();
          }
      }
      マイケル
      マイケル
      ちなみにここで書かれているIDはテスト用のものなので、
      リリースする際には準備段階で取得した自身のアプリID・広告IDに書き換えましょう!
      マイケル
      マイケル
      「bannerView.Destroy()」を忘れると
      ずっと表示されたままになってしまうのも注意してください
      エレキベア
      エレキベア
      これだけで表示されるクマ???
      マイケル
      マイケル
      これだけでOKだよ!
      広告表示を確認するにはビルドして動かさないといけないから、
      ビルドして実機で確認してみます!
      マイケル
      マイケル
      上の図のように表示されれば成功です!
      エレキベア
      エレキベア
      できたクマ〜〜〜!!

      インタースティシャル広告の実装

      マイケル
      マイケル
      そしてもう一つ、インタースティシャル広告も実装してみましょう!


      Google Admob インタースティシャル広告

      マイケル
      マイケル
      こちらもGoogle Admobのサイトで書かれている
      手順通りで大丈夫ですが、バナー広告よりも少し難易度が上がります。
      マイケル
      マイケル
      シーンとシーンの間に広告シーンを挟み込みたい場合には、
      バナー広告と同様、下記のようにスクリプトを作成してゲームオブジェクトに貼り付ければOKです!
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      using UnityEngine.SceneManagement;
      using GoogleMobileAds.Api;
      using System;
      using UniRx;
      
      public class GoogleAdmobInterstitial : MonoBehaviour
      {
          /** 変数 */
          private InterstitialAd interstitial;
          private bool showing;
          public string loadEventParam; // 読込イベント名(遷移元で渡されるゴロ)
      
          void Start()
          {
              showing = false;
              // 広告読み込み
              RequestInterstitial();
          }
      
          void Update()
          {
              // 広告表示
              if (interstitial.IsLoaded() && !showing)
              {
                  interstitial.Show();
                  showing = true;
              }
          }
      
          // 広告読み込み処理
          private void RequestInterstitial()
          {
              // ★リリース時に自分のIDに変更する
              #if UNITY_ANDROID
                      string adUnitId = "ca-app-pub-3940256099942544/1033173712";
              #elif UNITY_IPHONE
                      string adUnitId = "ca-app-pub-3940256099942544/4411468910";
              #else
                      string adUnitId = "unexpected_platform";
              #endif
      
              // Initialize an InterstitialAd.
              interstitial = new InterstitialAd(adUnitId);
      
              // Called when an ad request has successfully loaded.
              this.interstitial.OnAdLoaded += HandleOnAdLoaded;
              // Called when an ad request failed to load.
              this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
              // Called when an ad is shown.
              this.interstitial.OnAdOpening += HandleOnAdOpened;
              // Called when the ad is closed.
              this.interstitial.OnAdClosed += HandleOnAdClosed;
              // Called when the ad click caused the user to leave the application.
              this.interstitial.OnAdLeavingApplication += HandleOnAdLeavingApplication;
      
              // Create an empty ad request.
              AdRequest request = new AdRequest.Builder().Build();
              // Load the interstitial with the request.
              interstitial.LoadAd(request);
          }
      
          // シーン遷移処理
          private void LoadNextScene()
          {
              SceneManager.LoadScene(【遷移先シーン名】);
          }
      
          private void OnDestroy()
          {
              // オブジェクトの破棄
              interstitial.Destroy();
          }
      
          // ---以下、イベントハンドラー
          
          // 広告の読み込み完了時
          public void HandleOnAdLoaded(object sender, EventArgs args)
          {
          }
      
          // 広告の読み込み失敗時
          public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
          {
              // 次のシーンに遷移
              LoadNextScene();
          }
      
          // 広告がデバイスの画面いっぱいに表示されたとき
          public void HandleOnAdOpened(object sender, EventArgs args)
          {
          }
      
          // 広告を閉じたとき
          public void HandleOnAdClosed(object sender, EventArgs args)
          {
              // 次のシーンに遷移
              LoadNextScene();
          }
          
          // 別のアプリ(Google Play ストアなど)を起動した時
          public void HandleOnAdLeavingApplication(object sender, EventArgs args)
          {
          }
      }
      
      マイケル
      マイケル
      基本的にはバナー広告と実装方法は同じなのですが、
      インタースティシャル広告は全画面に表示される動画のため、
      広告が始まった時や広告が閉じられた時の処理を記述
      しなければなりません。
      マイケル
      マイケル
      そのため、用意されている下記のイベントハンドラーを
      オーバーライドして使用することで、各イベントの処理を実現します!
      
      ・・・略・・・
      public class GoogleAdmobInterstitial : MonoBehaviour
      {
      ・・・略・・・
      
          // 広告読み込み処理
          private void RequestInterstitial()
          {
      ・・・略・・・
      
              // Called when an ad request has successfully loaded.
              this.interstitial.OnAdLoaded += HandleOnAdLoaded;
              // Called when an ad request failed to load.
              this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
              // Called when an ad is shown.
              this.interstitial.OnAdOpening += HandleOnAdOpened;
              // Called when the ad is closed.
              this.interstitial.OnAdClosed += HandleOnAdClosed;
              // Called when the ad click caused the user to leave the application.
              this.interstitial.OnAdLeavingApplication += HandleOnAdLeavingApplication;
      
      ・・・略・・・
          }
      
      ・・・略・・・
      
          // ---以下、イベントハンドラー
          
          // 広告の読み込み完了時
          public void HandleOnAdLoaded(object sender, EventArgs args)
          {
          }
      
          // 広告の読み込み失敗時
          public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
          {
              // 次のシーンに遷移
              LoadNextScene();
          }
      
          // 広告がデバイスの画面いっぱいに表示されたとき
          public void HandleOnAdOpened(object sender, EventArgs args)
          {
          }
      
          // 広告を閉じたとき
          public void HandleOnAdClosed(object sender, EventArgs args)
          {
              // 次のシーンに遷移
              LoadNextScene();
          }
          
          // 別のアプリ(Google Play ストアなど)を起動した時
          public void HandleOnAdLeavingApplication(object sender, EventArgs args)
          {
          }
      }
      
      マイケル
      マイケル
      これでインタースティシャル広告の実装は完了です!
      あとはこの広告シーンを一定確率に一回だけ遷移する、
      などという処理にすると広告の表示率も調整できそうですね!
      マイケル
      マイケル
      バナー広告と同様、ビルド・実行して、上の図のような広告が表示されたら成功です!
      エレキベア
      エレキベア
      なんとかできたクマ〜〜〜〜
      マイケル
      マイケル
      おめでとう!
      こちらもテスト用の広告IDなので、
      リリース時には自分のIDに書き換えてくださいね!

      おわりに

      マイケル
      マイケル
      というわけで今回は広告の実装でした!
      どうだったでしょうか!
      エレキベア
      エレキベア
      なんとなく使い方は分かった気がするクマ〜〜〜
      マイケル
      マイケル
      それならよかった!
      アプリへの広告実装は面倒くさそうに見えるけど、
      意外と簡単にできるから是非やってみてね!
      エレキベア
      エレキベア
      おもったより楽勝だったクマ
      マイケル
      マイケル
      それでは今日はこの辺で!
      アデュー!
      エレキベア
      エレキベア
      クマ〜〜〜〜

      【Unity】自作ゲームにAdmob広告を実装する(バナー広告・インタースティシャル広告) 〜完〜


      Unityリリース関連UnityプラグインAdmobゴーゴーゴロヤン
      2020-06-25

      関連記事
      【Unity】Timeline × Excelでスライドショーを効率よく制作する
      2024-10-31
      【Unity】Boidsアルゴリズムを用いて魚の群集シミュレーションを実装する
      2024-05-28
      【Unity】GoでのランキングAPI実装とVPSへのデプロイ方法についてまとめる【Go言語】
      2024-04-14
      【Unity】第二回 Wwiseを使用したサウンド制御 〜インタラクティブミュージック編〜
      2024-03-30
      【Unity】第一回 Wwiseを使用したサウンド制御 〜基本動作編〜
      2024-03-30
      【Unity】第二回 CRI ADXを使用したサウンド制御 〜インタラクティブミュージック編〜
      2024-03-28
      【Unity】第一回 CRI ADXを使用したサウンド制御 〜基本動作、周波数解析編〜
      2024-03-28
      【Unity】サウンドミドルウェアに依存しない設計を考える【CRI ADX・Wwise】
      2024-03-27