【マネタイズ入門】モバイルゲームにUnity Adsを実装する(3/3)

Visual Scriptingでリワード広告を表示させる

Posted by 51n1 on 24 Aug, 2021

もくじ

1. Unity Adsの基本設定を行う
2. Visual Scriptingでバナー広告を表示させる
3. Visual Scriptingでリワード広告を表示させる

まえおき

前回の記事ではVisual Scriptingでバナー広告を表示させました。今回はリワード広告を表示させようと思います。リワード広告の実装についてはバナー広告同様、下記のYouTubeビデオを参考にしました。

本ブログ記事作成時点で使用したソフトウェアの各種バージョンは以下の通りです。

  • Unity:2021.1.17f1
  • Unity Advertisements :3.7.5

メリットを考える

リワード広告の使い方としては、広告を見たらアイテムを取得できるとか、ゲームオーバ前の状態に復活するとか何かしらプレイヤーにメリットとなる特典を実装する必要があります。リワード広告の導入と一緒にプレイヤーがメリットを得られるプロセスをデザインしないとただ強制的にユーザに広告を見せるということになりますので注意が必要です。

Unity Adsのリワード広告の場合、現在の実際の仕様を確認したところ、スキップボタンや停止ボタンはなく広告のキャンセルは不可で1回の視聴時間が30秒となっています。結構長い時間となっています。この時間に見合うだけのメリットをプレイヤーに与える必要があると思います。

本ブログ記事では取り上げていませんが、もしメリットを与える必要がないのであれば、インタースティシャルというタイプの広告を使えば良いと思います。

今回はテストとしてリワード広告を視聴したら、スコアが加算されるような簡単な仕組みを作ってみたいと思います。今回実装する広告とゲームの動きを可視化するためにラフスケッチを描いてみました。以降でこのプロセスを実装していきたいと思います。( 3.1)

3.1 Rewarded Ad Process

新規プロジェクト作成

以降のリワード広告の導入手順については「 Unity Adsの基本設定を行う」(前々回)と「 Visual Scriptingでバナー広告を表示させる」(前回)の記事の内容が完了していることを前提としています。

前回のバナー広告の実装で作成したAdsControllerゲームオブジェクトを引き続き利用します。バナー広告の場合、単に広告を表示するだけでしたので広告以外の他の要素の説明は省きました。一方、リワード広告は少なからずゲーム要素と関連が必要となります。そのため、新規プロジェクト作成から開始したいと思います。

Unity Hubで新規にプロジェクトを作成し、Unity Adsの事前設定を行います。Unity Adsの設定については前々回の記事を参考にしてください。

新規でプロジェクトを作成後、AdsControllerゲームオブジェクトを追加し設定します。AdsControllerゲームオブジェクトは前回の記事と同様にScript Machineコンポーネントを追加し、AdsControl Script Graphをアサインします。AdsControl Script Graphのグラフの設定は前回の記事を参照してください。( 3.2)

3.2 AdsControl Script Graph - AdsController GameObject

イベントリスナーを定義する

バナー広告の実装はほぼVisual Scriptingのみで実装が可能でしたが、リワード広告では一部イベント処理を定義するため、C#スクリプトの実装が必要となります。ここではMyUnityAdsListenerという名前でC#スクリプトを新規に作成(Assetsフォルダ上で右クリックしCreate → C# Script)します。スクリプトはAdsControllerゲームオブジェクトにアタッチしておきます。( 3.4)

3.4 MyUnityAdsListener - C# Script

MyUnityAdsListenerスクリプトファイル内に以下のコードを入力します。このコードの特徴ですが、namespaceとしてUnityEngine.AdvertisementsとUnity.VisualScriptingを追加しています。また、IUnityAdsListenerを継承しUnity Adsのステータスが変化した際のイベント処理をここで定義します。

今回、Visual Scriptingで利用するのは、OnUnityAdsDidFinishイベントです。リワード広告終了時を検知して特典を与える処理を設定します。このイベントリスナーメソッド内にCustomEvent.TriggerというVisual Scriptingの呼び出しメソッドを定義しておきます。そして、Visual Scriptingのグラフ内にOnUnityAdsDidFinishという名前でカスタムイベントの処理を追加します。このイベント処理がVisual Scriptingで実装できれば完璧なのですが。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
using Unity.VisualScripting;

public class MyUnityAdsListener : MonoBehaviour, IUnityAdsListener
{
  public void OnUnityAdsDidError(string message)
  {
    CustomEvent.Trigger(gameObject, "OnUnityAdsDidError", message);
  }

  public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
  {
    CustomEvent.Trigger(gameObject, "OnUnityAdsDidFinish", placementId, showResult);
  }

  public void OnUnityAdsDidStart(string placementId)
  {
    CustomEvent.Trigger(gameObject, "OnUnityAdsDidStart", placementId);
  }

  public void OnUnityAdsReady(string placementId)
  {
    CustomEvent.Trigger(gameObject, "OnUnityAdsReady", placementId);
  }

  public void OnDestroy()
  {
    Advertisement.RemoveListener(this);
  }

  void Start()
  {
    Advertisement.AddListener(this);
  }
}

ボタンとテキストの作成

リワード広告を実行するボタンとスコア用のテキストを設定しておきます。テスト用のプロジェクトを開いてHierarchyウィンドウで右クリックしコンテキストメニューからUI → Buttonを選択しボタンを追加します。名前を適当にAd Button等にしておきます。位置も画面の中心になるように移動しておきます。

また、スコアを表示するためのUI Textを追加します。Hierarchyウィンドウで右クリックしコンテキストメニューからUI → Textを選択し追加します。テキストの位置やサイズはお好みで調整しておいてください。下記はボタンとテキスト追加後のGameウィンドウです。( 3.3)

3.3 Game Window - Unity Editor

広告を表示させる

先ほど追加したAd ButtonゲームオブジェクトにScript Machineコンポーネントを追加し、新規にScript Graphを作成し設定します。名前はRewardAdButtonとします。( 3.5)

「Edit Graph」ボタンをクリックし、表示されるScript Graphウィンドウで各種ユニットを追加しグラフを作成します。デフォルトで追加されているStart EventとUpdate Eventのユニットは不要なので削除しておきます。そして、On Button Click Eventユニットを追加し、これを起点とします。( 3.6)

3.5 Script Machine Component - UI Button

3.6 On Button Click Event Unit

リワード広告を表示する際、前回設定したバナー広告が上に重なり邪魔になるのでバナー広告を隠すBanner of AdvertisementのHideユニットをここで追加しておきます。もしバナー広告の設定がなければ不要です。( 3.7)

AdvertisementのIs Readyユニットを追加し、リワード広告用のPlacement IDを設定します。Placement IDはUnity DashboardでAdユニットを作成した際に設定されるIDです。Adユニットについては前々回の記事を参照してください。( 3.8)

3.7 Banner of Advertisement / Hide Unit

3.8 Advertisement / Is Ready Unit

Ifユニットを追加しリワード広告の読み込みチェックをしてOKならAdvertisementのShowユニットでリワード広告を表示させます。( 3.9)

ボタンのクリックイベントからリワード広告を表示させるScript Graphは以上となります。広告を表示させるだけならとても簡単です。Ad Buttonゲームオブジェクトに追加したVisual Scriptingグラフ全体のイメージを載せておきます。( 3.10)

3.9 Advertisement / Show Unit

3.10 RewardAdButton Script Graph Overview

ここまでの実行テストのビデオを掲載しておきます。Playボタンクリックでゲーム開始後、前回実装済みのバナー広告が表示されます。そして「Show Reward Ad」ボタンをクリックするとテスト広告が表示されます。テストの場合は、右上にCloseボタンが表示されるのでそのボタンをクリックしてリワード広告を終了させます。リワード広告終了後の処理はまだ実装していないのでリワード広告を表示するまでとなります。( 3.11)

3.11 ここまでの進捗ビデオ

メリットを実装する

ここまででリワード広告再生の処理を実装できました。次にリワード広告終了時の処理をVisual Scriptingで実装したいと思います。

まずAdsControllerゲームオブジェクトに設定しているAdsControl Script GraphにCustom Eventユニットを追加します。MyUnityAdsListenerスクリプトのOnUnityAdsDidFinishのイベントリスナーに定義したCustomEvent.Triggerに2つの引数、placementIdとshowResultを設定しています。ですのでCustom EventユニットのArgumentsは「2」とします。Nameポートには「OnUnityAdsDidFinish」を設定します。( 3.12)

参考:MyUnityAdsListenerスクリプトからコード抜粋

public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
{
  CustomEvent.Trigger(gameObject, "OnUnityAdsDidFinish", placementId, showResult);
}

リワード広告終了時はここで追加したCustom Eventユニットを起点として処理を行います。意図するリワード広告かどうかをチェックするためにArg. 0のPlacement IDを使って比較します。追加するユニットIf、Equal、String Literalです。接続の仕方は画像を参照してください。Stringユニットにはリワード広告のAdユニットIDを入力します。( 3.13)

3.12 Custom Event Unit

3.13 If / Equal / String Literal

Custom EventユニットのArg. 1のポートからはリワード広告の表示結果が出力されます。結果に応じて処理を変えます。まずはSwitch On Enumユニットを追加し、TypeをShow Resultとします。IfユニットのTrueポートと繋ぎ、Custom EventユニットのArg. 1とSwitch On Enumユニットを繋ぎます。Switch On Enumユニットを使えば、リワード広告の3つの終了状態、Failed、Skipped、Finishedに応じて処理を変えることができます。( 3.14)

今回はResultがFinishedの場合のみ、スコアにランダムな値が加算されるよう処理を追加したいと思います。ここで変数を設定します。Scene VariablesでもObject Variablesでもどちらでも良いですが、Text型としてscoreTextとスコアを入れておくためのInt型のscoreという2つの変数をVisual ScriptingのBlackboardウィンドウで設定します。( 3.15)

3.14 Switch On Enum Unit

3.15 Scene Variables

score変数のSet Scene Varibalesユニットを追加し、Switch On EnumユニットのFinishedポートとつなぎます。また、score変数とランダム値を加算してSet Scene Varibalesユニットにつなぎます。( 3.16)

Set Textユニットを追加し、score変数のSet Scene Varibalesユニットをつなぎます。Set TextユニットのターゲットとなるとscoreText変数とscore変数、To Stringユニットをそれぞれつないで完了です。最後に Banner of AdvertisementのShowユニットを追加しておきます。( 3.17)

3.16 Add Random Value

3.17 Set Text

これでリワード広告に関するすべての実装が完了です。リワード広告終了後のイベント処理のグラフの全体図と最終的な実行テストのビデオをここに載せておきます。リワード広告を見るとスコアがカウントアップされているのが分かると思います。( 3.18, 3.19)

3.18 Reward Ads - AdsControl Script Graph

3.19 Rewarded Ad Final Video