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

スポンサーリンク
PC創作
マイケル
マイケル
どうもみなさんこんばんは!
マイケルです!
エレキベア
エレキベア
クマ〜〜〜〜
マイケル
マイケル
今日は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種類があるよ!
スクリーンショット 2020 06 24 23 46 23


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

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

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

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

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

広告IDの取得

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


Google Admob 公式サイト

マイケル
マイケル
アカウントを作成したら左側の「アプリ」メニューから
「アプリを追加」ボタンを押します!
スクリーンショット 2020 06 24 23 54 11
マイケル
マイケル
すると下記の画面が出てくるので、自身のアプリケーション名を入力して、
プラットフォームを選択しましょう!
マイケル
マイケル
ちなみに異なるプラットフォームでゲームを出したい場合には
アプリIDをその数だけ作らなければならないので注意です。
スクリーンショット 2020 06 24 23 55 19
マイケル
マイケル
アプリIDを入力したら次は広告の作成です!
冒頭で説明した広告4種類が選べますので、ここでは「バナー広告」を選択します!
スクリーンショット 2020 06 24 23 56 08
スクリーンショット 2020 06 24 23 56 17
マイケル
マイケル
任意の広告ユニット名を入力して作成すると、
アプリIDとユニットID(広告ID)が表示されます!
スクリーンショット 2020 06 24 23 56 48
マイケル
マイケル
こちらの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
より、パッケージの内容を全てインポートします!
スクリーンショット 2020 06 25 20 22 53
エレキベア
エレキベア
インポートまで完了したクマ〜!
いよいよ実装クマか?
マイケル
マイケル
実装まではあともう一歩!
Assets -> Google Mobile Ads -> Setting
より開いた画面で、先ほど入手したアプリIDを入力しましょう!
スクリーンショット 2020 06 25 20 27 00
マイケル
マイケル
そしてAndroidで広告を出したい場合、
iOSで広告を出したい場合でそれぞれ下記の設定を行います!

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

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

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

スクリーンショット 2020 06 25 20 28 05
マイケル
マイケル
ここまでくればあとは実装していくだけです!
エレキベア
エレキベア
長かったクマ〜〜〜〜〜
スポンサーリンク

バナー広告の実装

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


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だよ!
広告表示を確認するにはビルドして動かさないといけないから、
ビルドして実機で確認してみます!
IMG 6341
マイケル
マイケル
上の図のように表示されれば成功です!
エレキベア
エレキベア
できたクマ〜〜〜!!
スポンサーリンク

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

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


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)
    {
    }
}
マイケル
マイケル
これでインタースティシャル広告の実装は完了です!
あとはこの広告シーンを一定確率に一回だけ遷移する、
などという処理にすると広告の表示率も調整できそうですね!
IMG 6342
マイケル
マイケル
バナー広告と同様、ビルド・実行して、上の図のような広告が表示されたら成功です!
エレキベア
エレキベア
なんとかできたクマ〜〜〜〜
マイケル
マイケル
おめでとう!
こちらもテスト用の広告IDなので、
リリース時には自分のIDに書き換えてくださいね!
スポンサーリンク

おわりに

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

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

コメント