(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発しているVRゲームです!


UnityAdsをUnityで実装してみたら簡単過ぎた件【Unity】【Unity Services】【Unity Ads】【広告】


このエントリーをはてなブックマークに追加


------------追記------------

情報が古くなってきたので新しく書き直しました!




------------追記おわり------------



この記事でのバージョン
Unity 5.1.0f3 Personal
UnityAds 1.3.0

はじまり

タイトルが全てを表しているんですが、せっかくスクショを撮りながら実装したので

記事を書いてみました。本当に簡単過ぎてびっくりします。


実装の流れとしては、

  1. UnityAdsのアカウント作成
  2. 広告ID作成
  3. SDKインストール
  4. 実装


という形になります。


UnityAdsのアカウント作成

まず、UnityAdsにアクセスして、アカウントを作成します。

アカウント作成は右上の登録から行えます。



アカウント作成と言ってもUnityのアカウントをそのまま使えたりします。

Sign Upを押した後に"UDNログイン、または登録"

を押すと、Unityのアカウントを使えます。



一応、名前などの登録は必要ですが一瞬で終わります。


ゲームID作成

次にゲームIDの作成を行います。

ログインした後、左側の"ゲーム"を押し、
登録済みゲームの横にある"新しいゲームを追加"からIDが作成できます。



リリース前やストアURLが決まっていない状態でもIDの取得は行えます。

また、IDはOS毎に作成します。


SDKインストール

IDを作成したらアセットストアからSDKをインストールします。


Unity Ads - Asset Store


インストールした後、UnityAdsディレクトリを移動した場合は

UnityAds/Scripts/Advertisements/VideoAds/UnityAdsEditorPlaceholder.cs

placeHolderLandscapeplaceHolderPortraitに設定されている画像へのパスも変更してください。

変更しないとパスが通らなくなり、エラーが出るようになります。


また、Unity5.2以降はSDKのインストールすらいらないとか。



どんどん楽になりますね……!


実装

ドキュメントはこちら

日本語な上に端的で分かり易い!


一応解説をすると、

Advertisement.isSupportedでプラットフォームをサポートしているか確認した後、

Advertisement.Initializeで初期化し、

Advertisement.Showで表示するといった具合です。


Advertisement.Initializeで先ほど作成したIDを指定します。

IDは先ほどのページのゲームIDで確認できます。



広告の結果はAdvertisement.ShowのresultCallback

コールバックメソッドを登録する事で取得できます。

広告の結果は失敗、スキップ、終了の三つです。


ドキュメントでは匿名メソッドを渡しているのでちょっと分かり辛いかもしれませんが、

ShowResultを引数に持ったメソッドを渡せば良いという事です。


匿名メソッドとか、コールバックとかよう分からんという人はこちらの記事をどうぞ!


MovieAdManager

UnityAdsの使い勝手がさらに良くなるよう、

MovieAdManagerというクラスを作ったのでこれもついでにご紹介。


MovieAdManagerはSingletonMonoBehaviourというクラスを継承しているので、

そんなの知らない!って方はこちらもご確認ください。



使い方はこのMovieAdManagerを適当なオブジェクトに設定し、ゲームIDをInspectorで設定



再生時は以下のようにMovieAdManagerのPlayを実行します。

//動画再生開始
public void PlayAdMovie () {
  //再生できるか確認
  if(MovieAdManager.Instance.CanPlay()){
    //コールバックメソッドを指定して動画再生
    MovieAdManager.Instance.Play (OnFinished, OnFailed, OnFailed);
  }
}

//動画視聴完了時
private void OnFinished(){
  Debug.Log ("完了");
}

//動画視聴失敗時
private void OnFailed(){
  Debug.Log ("失敗");
}

//動画視聴キャンセル時
private void OnSkipped(){
  Debug.Log ("キャンセル");
}


再生後、状況に応じて指定したメソッドが実行されます。

メソッドは指定しなくても、一部だけ指定しても大丈夫です。


初期化の注意点

UnityAdsを使う上で一つ注意が必要なのが、

一度初期化に失敗すると、アプリを再起動しない限り初期化が行えないという事です。

一度しか呼ぶ意味がないというのはメソッドの内部で呼び出したかどうかのフラグを見ており、一度目以外処理が行わないようになっているからです。

http://freelyapps.blog.jp/archives/1028299932.html


確認してみると、確かに上記の記事の通りです。

該当箇所はUnityAds/Scripts/Advertisements/VideoAds/UnityAdsInitです。

// Prevent double inits in all situations
if (initCalled) return;
initCalled = true;


この処理を無くせば何度でも初期化は行えますが、

その事による弊害までは調べていないので自己責任で。


ネットに繋がってなければ確実に失敗しますが、それ以外の場合でも失敗する事があるため、

この辺は改善の余地有りと言った感じです。


おわりに

UnityAdsはUnity上でもある程度確認できるのも嬉しいですね。

以下がUnity上で動画を再生しようとした場合に出る画面です。



動画こそ再生されませんが、Closeボタンを押した後にコールバックが実行されるので、

Unity上でもリワードの受け取りが確認出来ます。