Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

Google Admob 広告プレースメントを使ってみた!! Reward編

Google Admob 広告プレースメントを使ってみた!! Reward編

 

今回は広告プレースメントのベータ版を使ったリワード広告の実装方法を解説する

 

リワード広告とは、ゲームのライフの回復など、動画広告を見る見返りとして何かを付与するタイプの広告となっている

 

なので、ゲームが終了したタイミングとかに挟み込むのはインタースティシャル広告と似ているが、ゲームをリトライしたいが再プレイするコインがないので獲得したいとか、プレイヤーの欲求によるボタン操作時に表示するなどとなるので、表示タイミングの仕様、動画を見た後に渡す報酬の仕様検討、スクリプト制御が必要になってくる

 

developers.google.com

 

◆実装方法

以下では、下記のような仕様でリワード広告を表示する場合の例について解説する

 

〇仕様例

・ゲームをプレイするにあたりポイントが必要だがポイントがない

・ポイントがない状態でゲームをプレイしようとすると下記のようなメッセージが表示

f:id:Harukichi:20210214135825p:plain

 

・「はい」を押すとリワード広告が表示される

【テスト広告 イメージ】実際は動画が一定時間再生される

f:id:Harukichi:20210214140222p:plain

 

・広告を見た見返りとしてポイントを付与

f:id:Harukichi:20210214140457p:plain

 

〇実装方法の例

◆概要

①広告オブジェクトをHierarchyに追加

スクリプトで広告オブジェクトの初期化とプレイヤーの操作によるメッセージ表示、広告表示および動画広告の再生が終了した場合の報酬の付与の処理を追加

③リワード広告オブジェクトのコールバック関数をInspectorにて設定

 

 

①まずは下記のように広告オブジェクトをHierarchyに追加

f:id:Harukichi:20210214140612p:plain

 

スクリプト

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

 

//広告オブジェクトの定義
RewardedAdGameObject RewardAd;

 

ア 初期化

シーンのStart関数内で下記を実行する
void InitAds()
{
  RewardAd = MobileAds.Instance.GetAd<RewardedAdGameObject>("Rewarded Ad");

  MobileAds.Initialize((initStatus) => { });

}

 

イ プレイヤーによるゲームスタート操作 

この場合はスタートボタンを押したとき

public void OnStartButtonClick()
{

   //現在所持しているポイントは0以下?

   if (StartSceneManager.CurrentPoints <= 0)
   {

    //リワード広告をロード

    RewardAd.LoadAd();

   }
   else

    Invoke("LoadSpecSelectScene", 0.2f);

   } 
}

 

実際の動作としては、上記の操作により、下記のウインドウを表示したい

上記のリワード広告のロード後に、広告がロードされたことを確認して下記を表示するスクリプトを追加してもよいが、このあたりの処理はリワード広告の読み込み時のコールバック関数に下記を表示する関数を追加して表示している(SetActive(true)関数にて表示)

詳細は下の方のInspectorでの設定を参照

f:id:Harukichi:20210214135825p:plain

 

ウ プレイヤーによる動画広告表示操作

上記のメッセージ表示後、「はい」が押された場合に下記を呼び出して、広告を表示している

public void ShowRewardAds()
{

 RewardAd.ShowIfLoaded();
}

「はい」ボタン押したときの関数呼び出しはInspectorにて割り付け

f:id:Harukichi:20210214144111p:plain

 

 

エ 動画広告が最後まで再生され、報酬を付与する条件が成立した場合

条件がそろった場合に下記を実行

public void EarnReward()
{

 //所持ポイントを回復

 StartSceneManager.CurrentPoints = 15000;

 //所持ポイントの表示を更新

 Sm.GetComponent<StartSceneManager>().UpdateMessage();

}

 

 

③リワード広告オブジェクトのコールバック関数をInspectorにて設定

スクリプトで追加した処理については、プレイヤーの動画広告を見るための操作時と、動画広告を見終わったタイミングにて呼び出される必要があるため、Inspectorにてコールバック関数の設定を行う必要がある

 

今回は二つのコールバック関数を使用している

・On Ad Loaded()  

 広告が読み込まれたタイミングで何か処理したい場合に処理を追加

・On User Earned Reward(REWARD) 

 動画広告の再生が終わり報酬を付与するタイミングで何か処理したい場合に処理を追加 

 こちらは今回の広告の性質上処理の追加は必須(何もないと詐欺呼ばわりされるかも)

f:id:Harukichi:20210214141540p:plain

今回の例で追加している処理

・On Ad Loaded()  

 下記のウインドウをアクティブ(表示)にする処理を割り付け

 このようにすることで、広告が読み込まれたかどうかを確認する処理の追加が不要になる(Google Admobから推奨)

 だが、広告が正常に読み込まれなければ、下記のウインドウが表示されないので、その場合の対処も必要になってくるよね・・・

 f:id:Harukichi:20210214135825p:plain

 

・On User Earned Reward(REWARD)

 動画広告の表示が終了して報酬を付与する条件がそろったタイミングで、下記を呼び出し、ポイントを付与している

 EarnReward()

 

 

◆感想

 広告プレースメントを使用しない以前のスタイルだと、広告オブジェクトのコールバック関数もスクリプトで用意したり、呼び出したりする必要があり、それをInspectorで割り付ける形になったのは整理されていてわかりやすくなったように感じる

 

以上、今回はここまで