FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    カテゴリ:Unity > Unity Ads

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Adsを使う上で気をつけた方が良いことをまとめておきます。

    動画広告のためか通信速度が速くないと、広告の取得ができなくなります。 3G回線ではかなり厳しいかと思います。

    サンプルはあくまで最低限の実装であり、これで動くというものです。これだけのスクリプトで動画の広告が載せられるということは素晴らしいのですが、実用的にはもう少し厄介な問題を解決する必要があります。サンプルをそのまま使っても問題は起きません。ただ表示されないときの処理が単純すぎるだけです。

    実はAdvertisement.Initialize が重要です。初期化に失敗することがあり、このメソッドは一度しか呼ぶ意味がないようになっています。
    通信できない状況でAdvertisement.Initialize を呼ぶと100%失敗します。一度しか呼ぶ意味がないというのはメソッドの内部で呼び出したかどうかのフラグを見ており、一度目以外処理が行わないようになっているからです。
    つまり、Advertisement.Initialize を呼び出したときに通信がうまくいかないと、一度ゲームを終了させない限りUnity Adsは使えないということになります。
    このあたりのことはソースを見ていて発見したことでした。Unity AdsはUnityに完全に統合されているわけではないので、ソースコードが結構内部まで見れます。

    Advertisement.isInitialized をサンプルでは使っていません。使わなくても動くからですが、本来は使うべきものだと思います。
    このプロパティは初期化が成功していればtrueになるので、これを調べてfalseのときは広告を出す処理をしないとするべきです。falseのときは広告が出せることはないからです。

    Advertisement.isReady というものがあります。これは広告の準備ができたかを判定するためのものです。Unity Adsを使う場合は広告の表示がしたいわけであり、そのための準備を待ちたいと思うのは自然でしょう。そうするとAdvertisement.isReady がtrueになるまで待つような実装をしたいと思うかもしれません。しかし、それには十分な注意が必要なのです。
    Advertisement.isReady は内部でAdvertisement.isInitialized を見ています。初期化が失敗していた場合Advertisement.isReady は永遠にfalseになります。したがって以下のようなことが起きやすいと思います。
    Advertisement.isReady がtrueになるまで待つという実装をした場合、無限ループに突入する可能性があります。
     以上のことは非常に重要ですので、気をつけて実装しましょう。準備が終わる保証はないのです。
    サンプルが問題なく動くのは広告表示ができるかどうか関係なしに広告表示するようにしているためです。表示を試してみて失敗するか成功するかという実装です。

    Advertisement.isInitialized がtrueであったときだけAdvertisement.isReady の判定処理に行くというのが正しい実装だと思います。そうすればAdvertisement.isReady が絶対にfalseにしかならないということは防げます。
    またAdvertisement.isInitialized がtrueであったとしてもAdvertisement.isReady の判定を時間制限した方が無難だと思います。 時間判定に引っかかった場合は広告を表示させずに処理を終わらせます。



    Unity Adsはデフォルトで画面横向きの広告が流れるとき、ホームボタンを右側にして横向きに強制します。UntiyのPlayer Settingsで言うとLandscape Leftになっていないと、画面が回転してしまいました。Unity Adsの方の設定で変更できればいいのですが、今のところ見当たりません。 (縦方向というのはありました。自由な向きではないです)


     
    Advertisement.isReady とAdvertisement.Show はゾーンIDを指定しない場合は、管理サイト上で設定したデフォルトの広告を表示しているみたいです。(isReady については未検証です。)
    ゾーンIDを指定しなければ、管理サイトを使って自由に変えられるので、指定しない方が便利な気がします。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity AdsのSDKはアセットストアからダウンロードします。

    Unity AdsのSDKはC#で書かれているので、C#で実装するのが一番簡単です。基本的な実装の流れはドキュメントのサンプルに書いてある通りです。 このサンプルをシーンに存在するGameObjectにつけて、GameIDと呼ばれるゲームごとに固有なIDを設定するだけで動きます。GameIDはUnity Adsの管理サイトの登録済みゲームの一覧が見れる画面で見ることができます。(日本語の場合、ゲームIDと書いてあります)

    サンプルコードの重要な所だけ説明しておきます。

     Advertisement.isSupported がtrueでない場合は、iOS/Androidではないプラットフォームを選んでいるのでUnity Adsは動きません。これはtrueだったら処理を続けるというだけのことです。

    Advertisement.Initialize  が初期化を行います。呼び出し方はゲームIDを引数に渡して呼ぶだけです。ゲームIDを間違ってしまうと、得られた報酬が実は違うゲームのものだったということになりかねません。これは十分に注意して書く必要があります。

    サンプルのOnGUIでは、Advertisement.Show を呼び出しています。特に準備できたか関係なしに実行されていることがわかります。Advertisement.isReady() はボタンの表示を変えているだけです。
    Advertisement.Show を呼び出すと広告の表示をします。必ず成功するわけではありません。このメソッドの引数にラムダ式を渡していますが、それにAdvertisement.Show の実行結果を渡します。(渡されるタイミングはわかりませんがいずれ渡されるのは確実のようです。)失敗、広告がスキップされた、広告が最後まで見られたの3通りの結果があります。サンプルでは結果をログに出しているだけですが、この引数によって処理を変えれば広告を見たときだけリワードを渡すといったことができます。

    大雑把に言うと、Advertisement.Initialize を行った後にAdvertisement.Show を呼べば広告が表示されます。広告が表示できないこともありますが、Advertisement.Show を呼んだときに処理がうまくいっていれば広告が出ます。その2つだけで実装は可能です。

    サンプルの説明は以上です。
    一応使えるものですが、実用には向かないと思います。なぜなら通信が遅いときや通信が失敗したときのことを考えられていないように思うからです。
    サンプルのままだと広告再生をしても失敗するということが多く起こると思われます。これについては今度説明したいと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Adsをゲームに組み込むには2段階あると思います。
    一つは管理サイト上で行う情報の登録でもう一つは実際にプログラミングをしてSDKを組み込むことです。
    今回は管理サイト上でUnity Adsを利用したいゲームの登録の手順をまとめておこうと思います。プログラミングをすることについては次回説明する予定です。

    管理用のサイトでゲームごとに情報を登録する必要があります。 とりあえず登録だけ済ませれば実装して確認できますので、それだけ行います。

    1. Unity Adsにログイン後、画面左のメニューからゲームを選びます。 既に登録されているゲームの情報が見れるのと新しくゲームを登録することができます。
    2. 画面の上部に「+新しいゲームを追加」というボタンがあるので、それを押します。
    3. 「ステップ1 - OSを選択してください。」と表示されるので、iOSかAndroidを選びます。
    4. 「ステップ2 - ANDROIDゲームを追加。」と表示されるので、Google Playに公開しているならそのURLを入力します。公開していないアプリの場合は、下の方に表示されているこちらからゲームを登録となっているところを押して名前の入力だけします。
    5. 「ステップ3 - ゲーム情報の確認」と表示されるので、質問に答えます。
    最後の質問がわかりづらいので補足しておきます。
    下のような画面の質問なのですが、全世界、全年齢向けのゲームとかなら、「このゲームは13才未満の児童を対象にしています。」を選べば良いでしょう。アメリカの法律に関係するようでフォーラムにも載っています。

    uad-gamereg-q
     
    以上の手順で「登録済みゲーム」の 一覧に新しく設定したゲームが追加されています。設定をいじることもできますが、既に2種類の広告を表示できるように設定されています。デフォルトになっているスキップできるタイプの広告と 報酬をあげるスキップできないタイプの広告です。
    あとで設定できるので、実装してからでも十分間に合います。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity AdsとはUnityの提供する広告システムのことです。
    広告の掲載場所の提供で収益を得ることができます。また広告掲載を依頼することでユーザーを獲得し、費用を払うということもできます。Unity Ads はゲームに特化した動画広告を配信するものなので、他の広告と違いゲームに組み込むのに適しています。

    Unity Ads の使い方を一度に解説するには長すぎるので、手順を何回かに分けて説明することにしようと思います。まずはUnity Adsを使うために登録をしなければなりません。今回はその手順について説明します。

    Unity Adsのサイトに行き、画面右上のログインもしくはサインインで登録ができます。画面右上はこんな感じです。

    uad-topright
     
    サインアップでも登録できると思いますが、Unity Accountを使いたいので、ログインの方から登録をしました。
    Unity Adsではメールアドレスと登録情報が重要みたいなので、Unity Accountを使う必要はありません。Unityで作ったもの以外でも使えるため、そのようになっているのだと思われます。
    比べてないのでわかりませんが、Unity Accountを使っての登録のメリットはログインがUnity Accountだけで楽というだけな気がします。 どちらでも機能は同じでしょうから、お好みの方法でどうぞ。

    Unity Accountを使った登録について説明していきます。
    ログインを押すと、次の画面が出てきます。
    UDNというのがUnity Accountのことであり、ログイン画面で登録とログインを兼ねています。サインアップではないので注意してください。

    uad-login
     
    ボタンを押すと、Unity アカウントのログイン画面になりますのでログインをしてください。
    ログイン後にUnity Adsの登録画面が開きます。下のような画面ですので、全ての欄を埋めてください。
    個人開発者であれば、会社名は自分の名前か開発者名(本名でない)を登録すれば良いです。

    以上が終われば、管理画面に入れます。

    このページのトップヘ