ゲーム制作

【Unity】広告(AdMob)を実装する方法を解説【Android編】

Unityでゲームを作ったら、収益化したいですよね。Unity Adsを使うというてもありますが、GoogleのAdMobもおすすめな広告です。

しかしAdMob広告の実装って、結構大変だったりします。

そこでUnityでAdMob広告を実装する方法を解説します。

基本的にはGoogle AdMobの公式ページが元ネタになりますが、情報が古い部分があるので、そのままやってもうまくいきません。そんな時は、この記事の情報を参考にしてください。

※広告ポリシーや注意事項があるので、わからなくても、AdMobのヘルプは一通り目を通しておいた方がいいと思います。

 

【Unity】広告(AdMob)を実装する方法を解説【バナー広告編】

まずはざっと手順を示すと次の手順で実施します。

  1. AdMobアカウントを取得する。
  2. AdMobに広告を実装するアプリを登録する。
  3. 広告ユニットを作る。
  4. Google Adsのプラグインをインストールする。
  5. 広告を実装するスクリプトを実装する。

 

それでは順番に説明していきます。

AdMobアカウントを取得する

まずはAdMobアカウントを取得しましょう。取得する方法は公式が公開しているので、そちらを参考にすればよろしいでしょう。

参考:スタートガイド AdMob に申し込む 

ややこしいのが、AdMobのアカウントを取得するためには、AdMob以外に「Goolge Ads」と「Google Adsense」の2つのアカウントも取得しなければならないということです。

Google Adsは広告を出稿するときに使用するアカウントで、Google AdsenseはブログなどのWebサイトに広告を実装するときに使用するアカウントになります。

アカウントを取得するだけなら無料なのですが、使用しないのにアカウントを取得しなければならないのは手間ですね。

 

AdMobに広告を実装するアプリを登録する

さて、めでたくAdMobアカウントを取得したら、次に広告を実装するためのアプリを登録しましょう。この手続きはアプリ単位、OS単位で登録する必要があります。

AdMobのページにログインして、アプリを追加を選択します。

プラットフォームを選択します。本ページではAndroidでストアに登録していないアプリを例に実施してみます。Androidのラジオボタンと「いいえ」のラジオボタンを選んで「次へ」をクリックします。

【Unity】広告(AdMob)を実装する方法を解説

次にアプリの情報を入力します。と言ってもアプリ名を入力するだけですが。アプリ名を入力したら、「アプリを追加」をクリックします。この例ではアプリ名を「Cave Test」としました。

【Unity】広告(AdMob)を実装する方法を解説

次の画面で「完了」ボタンを押して、本手順は完了です。

 

広告ユニットを作る

次は実装する広告ユニットを作ります。広告ユニットはユニットの種類を選んでいると思ってください。バナー広告、インタースティシャル広告、リワード広告のいずれかを選択して広告ユニットを作ります。

各種類ごとに広告ユニットを作る必要があるので、3つとも使用するアプリの場合は、広告ユニットを3つ作りましょう。

それではバナー広告を作る手順を例に解説します。残りの2つもほぼ同じ手順で作れるので、バナー広告の手順でも参考になりますよ。

 

AdMobのトップページで広告を実装するアプリを選択します。

【Unity】広告(AdMob)を実装する方法を解説

AdMobのトップページで「広告ユニット」のアイコンをクリックして、「スタート」ボタンをクリックします。

【Unity】広告(AdMob)を実装する方法を解説

次の広告の種類を選択します。今回はバナー広告を選ぶので、バナーのところにある、「選択」ボタンをクリックします。

【Unity】広告(AdMob)を実装する方法を解説

 

広告ユニットの名称を入力して、「広告ユニットを作成」ボタンをクリックします。

【Unity】広告(AdMob)を実装する方法を解説

以上で広告ユニットの作成が完了します。次の画面で完了ボタンを押して、本手順完了です。

なお、下図の黒塗りした部分にアプリIDと広告IDが表示されます。このIDは実装するときに使用するというのを覚えておきましょう。

【Unity】広告(AdMob)を実装する方法を解説

ここまでで、AdMob側の手順は完了です。次にUnityを使ってAdMobの実装に移ります。

 

Google Adsのプラグインをインストールする

公式のAdMobの「Get Start」に詳細の手順が記されているので、参考にするのがいいでしょう。具体的には以下の4つの見出しの部分を実施すればOKです。

  • Download the Mobile Ads Unity plugin
  • Import the Mobile Ads Unity plugin
  • Include the Mobile Ads SDK
  • Set your AdMob app ID

 

広告を実装するスクリプトを実装する

この記事では広告IDにはテスト用のIDを使用して実装しています。あなたのアプリに広告を実装するときは、先ほど作成した広告IDで実装してくださいね。

※とはいえ、AdMobの公式ではテスト広告によるテストを行うように言われているので、いきなり本物の広告IDを使えるのは控えた方がよろしいかと思います。どうしてもという場合は、テストデバイスを登録する方法もあるので、そちらの方法を選ぶといいかと思います。

参考:スクリプトでテストデバイスを使う方法

参考:AndroidのデバイスIDを取得する方法

 

さて本題の実装です。

まずは空のゲームオブジェクトを追加して、新規作成したスクリプトをアタッチしましょう。

【Unity】広告(AdMob)を実装する方法を解説

 

AdMobScriptは次のように実装します。「 MobileAds.Initialize(initStatus => { });」の部分は公式とは違いますが、2020年12月現在の最新のAPIではこの記述で大丈夫です。(アプリIDはインスペクターで設定するようになっています。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;

public class AdMobScript : MonoBehaviour
{
  private BannerView bannerView;

  public void Start()
  {

    // Google AdMob Initial
    MobileAds.Initialize(initStatus => { });

    this.RequestBanner();
  }

  private void RequestBanner()
  {
#if UNITY_ANDROID
    string adUnitId = "ca-app-pub-3940256099942544/6300978111"; // テスト用広告ユニットID
#elif UNITY_IPHONE
    string adUnitId = "ca-app-pub-7689051089863147/2788662322"; // テスト用広告ユニットID
#else
    string adUnitId = "unexpected_platform";
#endif

    // Create a 320x50 banner at the bottom of the screen.
    this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);

    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();

    // Load the banner with the request.
    bannerView.LoadAd(request);

  }
}

 

これでバナー広告の実装が完了です。ビルドして動作確認をしてみましょう。

広告が表示されるか動作確認

まずはAndroidにデプロイして動作確認しました。すると下図のように、ちゃんとバナー広告が画面の下に表示されていますね。

【Unity】広告(AdMob)を実装する方法を解説

 

【Unity】広告(AdMob)を実装する方法を解説【インタースティシャル広告&リワード広告編】

ここまででバナー広告については実装できたと思います。バナー広告だけでも収益化可能ですが、インタースティシャル広告やリワード広告を上手にゲームに組み込めば、より収益性が高まります。

そのため、続いては、インタースティシャル広告とリワード広告の実装についても解説します。といっても、ほとんどバナー広告と同じです。

実装したら下の動画みたいに実装しました。

 

簡単に説明すると、敵に何度か当たったらプレイヤーが死んで、インタースティシャル広告を表示します。「Reward Ad」ボタンを押したら、リワード広告が表示して、閉じたら報酬を受け取ったカウントを「Reward Ad」のテキストの部分に表示します(動画では1回報酬を受け取ったので1と表示しています。)

 

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

インタースティシャル広告の広告ユニットを作りましょう。作り方は、先ほどバナー広告を作った方法の中で、バナー広告を選択したところをインタースティシャル広告を選択すればOKです。

そして以下のように実装しましょう。

public class AdmobScript : MonoBehaviour
{
  ・
  ・
  ・
  private InterstitialAd interstitial;

  public void loadInterstitialAd()
  {
#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.
    this.interstitial = new InterstitialAd(adUnitId);

    this.interstitial.OnAdClosed += HandleOnAdClosed;
    this.interstitial.OnAdFailedToLoad += ( sender, args )=>
    {
      Debug.Log("loadInterstitialAd.OnAdFailedToLoad");
    };

    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();

    // Load the banner with the request.
    this.interstitial.LoadAd(request);

  }

  private void HandleOnAdClosed(object sender, EventArgs args)
  {
    this.interstitial.Destroy();
    this.loadInterstitialAd();
  }

  public void showInterstitialAd()
  {
    if (this.interstitial.IsLoaded())
    {
      this.interstitial.Show();
    } else
    {
      Debug.Log("Interstitial Ad not load");
    }
  }
  ・
  ・
  ・
}

 

loadInterstitialAdメソッドで広告を読み込みます。showInterstitialAdメソッドで広告を実装します。今回の例では、プレイヤーが死んだときに呼び出しました。

HandleOnAdClosedメソッドは、インタースティシャル広告を閉じた時に実行するように「this.interstitial.OnAdClosed += HandleOnAdClosed; 」でイベントハンドラーとして登録しておきました。インタースティシャル広告は広告を閉じた後にDestroyメソッドを読んでおかないと、メモリリークしてしまうので、必ずDestoryメソッドを呼び出すよう実装してください。

 

リワード広告の実装

リワード広告の広告ユニットを作りましょう。作り方は、先ほどバナー広告を作った方法の中で、リバナー広告を選択したところをリワード広告を選択すればOKです。

ただし、その後の設定が少し違います。それは下図のように広告ユニット名とは別に、報酬の設定があります。

【Unity】広告(AdMob)を実装する方法を解説

ここで設定した報酬は、リワード広告を表示したとに動作するスクリプトで取得することが出来る情報となっており、広告ユニットごとに別の報酬を設定できます。

例えばゲーム内で、複数の報酬を与えるような仕掛けを作った場合、広告ユニットから取得した情報で処理を分けることができますね。

スクリプトの実装としては次のようになります。

public class AdmobScript : MonoBehaviour
{
  ・
  ・
  ・
  private RewardedAd rewardedAd;

  public void loadRewardAd()
  {
    string adUnitId;
#if UNITY_ANDROID
    adUnitId = "ca-app-pub-7689051089863147/2733789604";// "ca -app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
            adUnitId = "unexpected_platform";
#endif

    this.rewardedAd = new RewardedAd(adUnitId);
    this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
    this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
    this.rewardedAd.OnAdFailedToLoad += (sender, args) =>
    {
      Debug.Log("loadRewardAd.OnAdFailedToLoad");
    };

    AdRequest request = new AdRequest.Builder().Build();
    this.rewardedAd.LoadAd(request);

  }

  public void showRewardAd()
  {
    if (this.rewardedAd.IsLoaded())
    {
      this.rewardedAd.Show();
    } else
    {
      Debug.Log("Rewoad Ad not load");
    }
  }

  private void HandleRewardedAdClosed(object sender, EventArgs args)
  {
    this.loadRewardAd();
  }

  public Text rewardText;
  private int rewardCount = 0;

  public void HandleUserEarnedReward(object sender, Reward args)
  {
    this.rewardText.text = (++rewardCount).ToString();

    string type = args.Type;
    double amount = args.Amount;

    Debug.Log(amount.ToString() + " " + type );

  }
  ・
  ・
  ・
}

 

loadRewardAdメソッドでリワード広告を読み込み、showRewardAdメソッドで広告を表示します。ツイートの動画では、ボタンを押したときにshowRewardAdメソッドを呼び出すようにしていました。

HandleRewardedAdClosedメソッドは広告を閉じた時のメソッドで、次に表示するための広告を先に読み込む処理を実装しています。インタースティシャル広告とは違い、Destoryメソッドは呼ぶ必要はありません。

 

そして、リワード広告の目的である、報酬を与えるメソッドをHandleUserEarnedRewardメソッドに実装しています。「this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;」の部分で、リワードを与えるときに呼び出すイベントハンドラーを登録しています。

メソッドの中では、報酬をもらうたびにインクリメントした値をテキストに表示する処理と、報酬情報を取得する処理を書いています。Rewardインスタンスの、 args.Typeとargs.Amountに情報が入っています。例としては、args.Amountには2、args.TypeにはRewardItemが入っていました。

以上で、リワード広告の実装も完了です。

 

最後に:異常時の処理もちゃんと組むこと

Unityで広告(AdMob)を実装する方法を解説しました。この記事でバナー広告、インタースティシャル広告、リワード広告を実装できるでしょう。

本記事では最低限、広告を実装するところの処理まで解説しましたが、あなたがリリースするアプリに実装するときは、異常時の処理もちゃんと実装してください。

例えば、OnAdFailedToLoadイベントの時の処理などですね。ユーザーは常にネットワーク環境の良いところでゲームをしてくれるとは限りません。そんなときに広告の読み込みを失敗することはあります。広告の読み込みに失敗したからといって、ゲームが停止したりしないようにしてくださいね。

 

 

-ゲーム制作