sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

Unity Ads を利用して広告表示するためのサンプル

Unity の広告表示

Unity のなかで手早く広告表示をするなら、Unity 公式の広告プラットフォームの「Unity Ads」が一番ラクみたいです。

そんなわけで、調べたことをメモ。

Unity Ads を紹介する記事はもうたくさんあるんですが、(基本部分はそれにお任せしつつ)実装をテストして気づいたポイントなんかを(図をいれたりして)書きました。


Unity DashBoard

Unity Ads を利用するためには、Unity DashBoard が使える必要があるので、まず使える状態にします。

で、Unity で Ads を利用する(テストする)プロジェクトを開きます。Ads を利用する上で重要なのは「Monetization」の「Placements」です。次の2つをメモします。

  • GameID
  • Placement ID

f:id:shikaku_sh:20200831103108p:plain:w600
メモが必要なテキスト
f:id:shikaku_sh:20200831103332p:plain:w600
Placement ID を選択すると詳細設定

GameID はみたままです。Placement ID は「video」や「rewardedVideo」のことみたいです。Placement ID は最初から「video」と「rewardedVideo」の2つが登録されていました。それぞれ、どういった広告にするのかパラメーターを設定できるのがこの画面ということみたいです。

「Ad Filters」は、広告に表示しないカテゴリーや、年齢制限を設定できるみたいです。具体的にこの広告は非表示、みたいなことはできないみたいですね。


Unity で Ads を利用する手続き

ツールバーから「Build Settings」から広告表示するプラットフォームに切り替えます。Unity で(今のところ)広告表示できるのは以下のプラットフォームのどちらかです。

f:id:shikaku_sh:20200831104135p:plain:w600
この設定も必要です

ツールバーから次の「Services」を選択して、インスペクターに「Services」を表示します。

Windows > General > Services

f:id:shikaku_sh:20200831102317p:plain
サービスを起動します

Settings

Settings を開いて、次の2つが設定されているか確認しておきます。

f:id:shikaku_sh:20200831102642p:plain:w600
ブラウザ上でも確認できます

必要があれば AGE DESIGNATION のチェックを有効にします。


有効化

Services に戻って、ADS を ON(有効化)します。ADS の設定に入るので、次を有効にします。

  • Enable built-in Ads extension
  • Enabled test mode
  • Advanced

Advanced の「Enabled built-in Ads extension」はチェックを入れておきます。


Ads のスクリプト

Android のプラットフォーム下で Unity Ads を表示するサンプルです。

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

public class AdsController : MonoBehaviour
{
    [SerializeField]
    private bool IsTestMode = false;

    [SerializeField]
    private string PlacementID = "rewardedVideo";

    [Header("GameID")]
    [SerializeField]
    private int Android = 0;

    void Awake()
    {
        Advertisement.Initialize(Android.ToString(), IsTestMode);
    }

    public void ShowAds()
    {
        // 初期化に失敗していたら、再生しない
        if (!Advertisement.isInitialized) return;

        if (Advertisement.IsReady(PlacementID))
        {
            // 広告表示後のオプション設定
            var options = new ShowOptions
            {
                resultCallback = (result) =>
                {
                    switch (result)
                    {
                        case ShowResult.Finished: // 最後まで正常に再生
                            Debug.Log("The Ads was successfully shown.");
                            break;
                        case ShowResult.Skipped: // 途中でスキップされた
                            Debug.Log("The Ads was skipped.");
                            break;
                        case ShowResult.Failed: // 再生に失敗した
                            Debug.Log("The Ads failed to be shown.");
                            break;
                    }
                }
            };

            Advertisement.Show(PlacementID, options);
        }
    }
}

SerializeField の属性を設定しておいたので、Ads を利用するための各種パラメーターを設定できるようにしてあります。設定しておきましょう。

f:id:shikaku_sh:20200831103533p:plain:w600
こうしておくと便利かも?

補足として、AndroidiOS プラットフォームに両対応する場合は、次のような感じになると思います。

#if UNITY_ANDROID
            Advertisement.Initialize(AndroidID);
#elif UNITY_IOS
            Advertisement.Initialize(IosID);
#endif

広告をサポートするクラス Advertisement の初期化は Unity 5.2 以降は不要になったみたいですが、マニュアルで設定するとこんな感じかと。

ボタンを押下したら広告を流し、広告を見た報酬を与えるタイプだと ShowOptions にコールバックするメソッドを設定しておくとよい感じになります。


動かしてみる

こんな感じで表示されました。

f:id:shikaku_sh:20200831103608g:plain:w600
デバッグで動きを確認します

Android でも一応やってみました。APK ファイルを出力して、APK ファイルを直接(手動で)インストールしています。

f:id:shikaku_sh:20200831103719j:plain:h400f:id:shikaku_sh:20200831103723j:plain:h400
できた

おお。普通に広告が再生されてる。思ったよりも迷うことなくここまでこれた。


広告のよい使い方ノウハウ

どういうタイミングで表示するか、どういうようにすれば効果的かのようなものは、効率を最大化しようとすると、とても難しいのだと思いますが、基本的には次のようなことかと思います。

プライベートでゲーム開発するなら、収益化はあまり大切なことじゃないように思っていましたが、某所で今はわりと設定が簡単なんで導入しておいたほうがいい、というか、導入するコストがすごく小さいから、とりあえず設定しておくだけでも~なんだとか。

昔のゲーム開発と違ってブラウザ上の設定も結構大切みたいにも思いました。統合開発環境である Unity 内で全部のことを記述できないのですね。


参考

作って学べる Unity本格入門

作って学べる Unity本格入門