Unityでゲームを作ったら、収益化したいですよね。Unity Adsを使うという手もありますが、GoogleのAdMobもおすすめな広告です。しかしAdMob広告の実装って、結構大変だったりします。
そこでUnityでAdMobを使って広告の入れ方を解説します!
基本的にはGoogle AdMobの公式ページが元ネタになりますが、情報が古い部分があるので、そのままやってもうまくいきません。そんな時は、この記事の情報を参考にしてください。
※広告ポリシーや注意事項があるので、わからなくても、AdMobのヘルプは一通り目を通しておいた方がいいと思います。
関連記事:個人ゲーム制作の収入公開!副業で儲かるか知りたい人必見!
【Unity】広告の入れ方を解説!【 AdMobのバナー広告実装編】
まずはざっと手順を示すと次の手順で実施します。
- AdMobアカウントを取得する。
- AdMobに広告を実装するアプリを登録する。
- 広告ユニットを作る。
- Google Adsのプラグインをインストールする。
- 広告を実装するスクリプトを実装する。
- 広告IDの権限を宣言する。
それでは順番に説明していきます。
AdMobアカウントを取得する
まずはAdMobアカウントを取得しましょう。取得する方法は公式が公開しているので、そちらを参考にすればよろしいでしょう。
ややこしいのが、AdMobのアカウントを取得するためには、AdMob以外に「Goolge Ads」と「Google Adsense」の2つのアカウントも取得しなければならないということです。
Google Adsは広告を出稿するときに使用するアカウントで、Google AdsenseはブログなどのWebサイトに広告を実装するときに使用するアカウントになります。
アカウントを取得するだけなら無料なのですが、使用しないのにアカウントを取得しなければならないのは手間ですね。
AdMobに広告を実装するアプリを登録する
さて、めでたくAdMobアカウントを取得したら、次に広告を実装するためのアプリを登録しましょう。この手続きはアプリ単位、OS単位で登録する必要があります。
AdMobのページにログインして、アプリを追加を選択します。
プラットフォームを選択します。本ページではAndroidでストアに登録していないアプリを例に実施してみます。Androidのラジオボタンと「いいえ」のラジオボタンを選んで「次へ」をクリックします。
次にアプリの情報を入力します。と言ってもアプリ名を入力するだけですが。アプリ名を入力したら、「アプリを追加」をクリックします。この例ではアプリ名を「Cave Test」としました。
次の画面で「完了」ボタンを押して、本手順は完了です。
広告ユニットを作る
次は実装する広告ユニットを作ります。広告ユニットはユニットの種類を選んでいると思ってください。バナー広告、インタースティシャル広告、リワード広告のいずれかを選択して広告ユニットを作ります。
各種類ごとに広告ユニットを作る必要があるので、3つとも使用するアプリの場合は、広告ユニットを3つ作りましょう。
それではバナー広告を作る手順を例に解説します。残りの2つもほぼ同じ手順で作れるので、バナー広告の手順でも参考になりますよ。
AdMobのトップページで広告を実装するアプリを選択します。
AdMobのトップページで「広告ユニット」のアイコンをクリックして、「スタート」ボタンをクリックします。
次の広告の種類を選択します。今回はバナー広告を選ぶので、バナーのところにある、「選択」ボタンをクリックします。
広告ユニットの名称を入力して、「広告ユニットを作成」ボタンをクリックします。
以上で広告ユニットの作成が完了します。次の画面で完了ボタンを押して、本手順完了です。
なお、下図の黒塗りした部分にアプリIDと広告IDが表示されます。このIDは実装するときに使用するというのを覚えておきましょう。
ここまでで、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を使えるのは控えた方がよろしいかと思います。どうしてもという場合は、テストデバイスを登録する方法もあるので、そちらの方法を選ぶといいかと思います。
さて本題の実装です。
まずは空のゲームオブジェクトを追加して、新規作成したスクリプトをアタッチしましょう。
2023年6月時点ではAdMobのSDKバージョン8が公開されており、従来のAPIと互換性がなくなっています。以下はSDKバージョン8に対応したプログラムは下記です。
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-3940256099942544/2934735716"; // テスト用広告ユニット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(); // Load the banner with the request. bannerView.LoadAd(request); } }
これでバナー広告の実装が完了です。ビルドして動作確認をしてみましょう。
広告が表示されるか動作確認
まずはAndroidにデプロイして動作確認しました。すると下図のように、ちゃんとバナー広告が画面の下に表示されていますね。
【Unity】広告の入れ方を解説!【インタースティシャル広告&リワード広告実装編】
ここまででバナー広告については実装できたと思います。バナー広告だけでも収益化可能ですが、インタースティシャル広告やリワード広告を上手にゲームに組み込めば、より収益性が高まります。
そのため、続いては、インタースティシャル広告とリワード広告の実装についても解説します。といっても、ほとんどバナー広告と同じです
実装するとした画像のように全画面で広告が表示されます。
簡単に説明すると、敵に何度か当たったらプレイヤーが死んで、インタースティシャル広告を表示します。「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 InterstitialAd.Load(adUnitId, new AdRequest(), (InterstitialAd ad, LoadAdError loadAdError) => { if (loadAdError != null) { // Interstitial ad failed to load with error interstitial.Destroy(); return; } else if (ad == null) { // Interstitial ad failed to load. return; } ad.OnAdFullScreenContentClosed += () => { HandleOnAdClosed(); }; ad.OnAdFullScreenContentFailed += (AdError error) => { HandleOnAdClosed(); }; interstitial = ad; }); } private void HandleOnAdClosed() { this.interstitial.Destroy(); this.loadInterstitialAd(); } public void showInterstitialAd() { if (interstitial != null && interstitial.CanShowAd()) { interstitial.Show(); } else { Debug.Log("Interstitial Ad not load"); } } ・ ・ ・ }
loadInterstitialAdメソッドで広告を読み込みます。showInterstitialAdメソッドで広告を実装します。今回の例では、プレイヤーが死んだときに呼び出しました。
HandleOnAdClosedメソッドは、インタースティシャル広告を閉じた時に実行するようにイベントハンドラーOnAdFullScreenContentClosedで処理しています。インタースティシャル広告は広告を閉じた後にDestroyメソッドを読んでおかないと、メモリリークしてしまうので、必ずDestoryメソッドを呼び出すよう実装してください。
リワード広告の実装
リワード広告の広告ユニットを作りましょう。作り方は、先ほどバナー広告を作った方法の中で、リバナー広告を選択したところをリワード広告を選択すればOKです。
ただし、その後の設定が少し違います。それは下図のように広告ユニット名とは別に、報酬の設定があります。
ここで設定した報酬は、リワード広告を表示したとに動作するスクリプトで取得することが出来る情報となっており、広告ユニットごとに別の報酬を設定できます。
例えばゲーム内で、複数の報酬を与えるような仕掛けを作った場合、広告ユニットから取得した情報で処理を分けることができますね。
スクリプトの実装としては次のようになります。
public class AdmobScript : MonoBehaviour { ・ ・ ・ private RewardedAd rewardedAd; public void loadRewardAd() { string adUnitId; #if UNITY_ANDROID adUnitId = "ca-app-pub-3940256099942544/5224354917"; #elif UNITY_IPHONE adUnitId = "ca-app-pub-3940256099942544/1712485313"; #else adUnitId = "unexpected_platform"; #endif // Load a rewarded ad RewardedAd.Load(id, new AdRequest(), (RewardedAd ad, LoadAdError loadError) => { if (loadError != null) { // Rewarded ad failed to load with error return; } else if (ad == null) { // Rewarded ad failed to load. return; } ad.OnAdFullScreenContentClosed += () => { loadRewardAd(); }; ad.OnAdFullScreenContentFailed += (AdError error) => { InnerLoadRewardAd(adUnitId); }; if( rewardedAd != null ) { this.rewardedAd.Destory(); } this.rewardedAd = ad; }); } public void showRewardAd() { if (this.rewardedAd != null && this.rewardedAd.CanShowAd()) { this.rewardedAd.Show((Reward reward) => { HandleUserEarnedReward(reward); }); } else { Debug.Log("Rewoad Ad not load"); } } public Text rewardText; private int rewardCount = 0; public void HandleUserEarnedReward(Reward args) { this.rewardText.text = (++rewardCount).ToString(); string type = args.Type; double amount = args.Amount; Debug.Log(amount.ToString() + " " + type ); } ・ ・ ・ }
loadRewardAdメソッドでリワード広告を読み込み、showRewardAdメソッドで広告を表示します。
イベントOnAdFullScreenContentClosedは広告を閉じた時のメソッドで、次に表示するための広告を先に読み込む処理を実装しています。
そして、リワード広告の目的である、報酬を与えるメソッドをHandleUserEarnedRewardメソッドに実装しています。Showメソッドのコールバックに実装しており、処理はHandleUserEarnedRewardメソッドにまとめています。
メソッドの中では、報酬をもらうたびにインクリメントした値をテキストに表示する処理と、報酬情報を取得する処理を書いています。Rewardインスタンスの、 args.Typeとargs.Amountに情報が入っています。例としては、args.Amountには2、args.TypeにはRewardItemが入っていました。
以上で、リワード広告の実装も完了です。実行すると次のように広告を表示しています。「interstitial test ad」となっていますが、先ほどとは違い、左上に1 second(s) remainingが表示されており、一定期間表示する広告であることがわかりますね。
広告IDの権限を宣言する
Android13(API33)の場合、Androidのマニフェストファイルに広告IDの権限を宣言する必要があります。
マニフェストファイルはUnityでは「Player Settings > Publish Settings」にある「Custom Main Manifest」にチェックを入れることでアウトプットされるようになります。
AndroidManifest.xmlに下記のようにuser-permissionタグを入れましょう。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools"> <application> (自動で出力されるため省略) </application> <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> </manifest>
権限の確認
権限が宣言されているかを確認するためには、Google Play Console上でApp Bundleの詳細を見れば確認できます。
最後に:異常時の処理も考えて組むこと
Unityで広告(AdMob)を実装する方法を解説しました。この記事でバナー広告、インタースティシャル広告、リワード広告を実装できるでしょう。
本記事では最低限、広告を実装するところの処理まで解説しましたが、あなたがリリースするアプリに実装するときは、異常時についても検討して実装してください。
ユーザーは常にネットワーク環境の良いところでゲームをしてくれるとは限りません。そんなときに広告の読み込みを失敗することはあります。広告の読み込みに失敗したからといって、無限にリトライをし続けるとか、ゲームが停止したりしないようにしてくださいね。