効果音・BGMの調整・・・完了。
音量調整オプション・・・実装完了。BGMとSEそれぞれを調整可能とした。
広告の実装・・・実装完了。今回はバナー広告のみの対応。
バナー広告と音量調整のオプション付けたイメージがこちら↓
音量調整オプションの実装
実装方法としてはAudioMixerは使用せず。自作のSound Managerなるクラスにゲーム中に使用するAudioSourceの参照を持たせて、音を鳴らす前にAudioClipごとに設定したボリューム値(0~1) にオプション画面で設定したSEorBGMのボリューム値(0~1)をかけてAudio Sourceのvolumeに設定するというやり方で音量調整を行うようにした。
今回はほぼuGUIしか使わない2Dゲームなのでこの粗雑なやり方で問題ないが、3Dゲームとか操作キャラクターの位置によって音を出したり聞こえてくる方向を変えたりとかがあるならおとなしくAudio Mixerを使った方がよさそうだと思った。
バナー広告の実装
広告の実装については計画していた通りEasy Mobileを使用して表示する方針とした。
インスペクタからADVERTISINGをONにして、表示する広告と対応する広告ネットワークを選択。
今回はGoogle AdMob一本でやる事にしたのでADMOBのトグルをONにする。
「Download Google Mobile Ads Plugin」をクリックするとGoogle Mobile Ads Unity Pluginのリリースページに飛ばされるので、最新版のプラグインをダウンロードして、UnityのAssets > Import Packageからインポート。
Google AdMobからアプリと広告ユニットを追加し、アプリIDと広告IDをそれぞれインスペクタから入力する。「Setup Google Mobile Ads」をクリックすると↓の表示に切り替わるので、こっちにアプリIDを入れる。広告ユニットIDは↑のDefault Placementの入力欄に入れる。Default PlacementとCustom PlacementがあるのはEasy Mobileでは複数の広告ネットワークを使えるので、最優先で使いたい広告ネットワークをDefaultにして使えるようにするため。一つしか使わないならDefaultのみでOK。
あとはスクリプト内の任意のタイミング(起動直後とか)に位置とサイズを指定して広告表示を呼び出す。
private void Start()
{
if (!Advertising.IsInitialized())
{
StartCoroutine(InitializeAds());
}
}
private IEnumerator InitializeAds()
{
Advertising.Initialize();
yield return new WaitForSeconds(1);
// 広告表示
Advertising.ShowBannerAd(BannerAdPosition.Bottom, BannerAdSize.Banner);
}
テスト時の注意
今回は以前開発した使用したテストデバイスで動作確認したため、特に設定をしなおす必要はなかったが、実機テストをする際、↑の広告設定で「Enable Test Mode」にチェックを入れるか、AdMob側にテストデバイスの登録を行ってからアプリを起動すること。開発用のデバイスで本物の広告を流すことは規約違反なので最悪広告が停止されるとのこと。
AndroidのテストデバイスでClassNotFound Exceptionが発生して広告が表示されない問題。
Androidのテストデバイスで動作確認したところエラーが発生し広告が表示されない問題委が発生した。結論から言うとGoogle Mobile Ads Pluginのインストールミスが原因だった。Google Mobile Ads PluginをインストールするときJavaプログラムを実行してインストールが行われるが、このときJDKのパスを示す環境変数JAVA_HOMEが設定されておらずエラーになっていた。一応Unity上で確認するとJDKのパスが設定されているようにみえるが、起動したときに内部的に消えてしまう不具合?があるらしい。
対処法として、Unityの起動後に実行するプログラムでJAVA_HOMEにパスを直に設定するという方法でインストールの失敗を防ぎ、その上で改めてプラグインをインストールして解決した。
JAVA_HOMEを設定するスクリプトはAssets/Editor/SetJavaHomeEditor.csに作成。なければ作る。
using UnityEngine;
using UnityEditor;
using System;
[InitializeOnLoad]
public class SetJavaHomeEditor
{
//初回起動チェック用ダミーファイルパス
static readonly string tempFilePath = "Temp/SetJavaHomeEditor_InitFlag";
static SetJavaHomeEditor()
{
//初回起動(Fileがあるか)チェック
if (System.IO.File.Exists(tempFilePath) == true)
{
//ダミーファイルが既にあるので以降の処理スキップ
return;
}
Debug.Log("SetJavaHomeEditor 初回起動チェック用ダミーファイル作成");
System.IO.File.Create(tempFilePath);
//初回起動時のJAVA_HOMEパス
Debug.Log($"SetJavaHomeEditor JAVA_HOME in editor was: {Environment.GetEnvironmentVariable("JAVA_HOME")}");
string newJDKPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(EditorApplication.applicationPath),"Data", "PlaybackEngines", "AndroidPlayer", "OpenJDK");
if (Environment.GetEnvironmentVariable("JAVA_HOME") != newJDKPath)
{
//JAVA_HOME パス書き換え
Environment.SetEnvironmentVariable("JAVA_HOME", newJDKPath);
}
//書き換え後のJAVA_HOMEパス
Debug.Log($"SetJavaHomeEditor JAVA_HOME in editor set to: { Environment.GetEnvironmentVariable("JAVA_HOME")}");
}
}
準備ができたらプラグインを再インストール。
ResolveでCompleteと出ても失敗している可能性があるので、最初からForce Resolveにした方がいいかも。ここまでやったら、テストデバイスで動作確認。無事広告が出ればOK。
参考サイト様
目次
残作業
- プライバシーポリシー作成
- プロモーションの作成
- リリース
広告を出すにあたってプライバシーポリシーの記載が不可避なのでプライバシーポリシーを作成する。他のアプリでも作ったのでおおむね流用するつもり。その後は画面の見栄えを化粧しつつストアに乗せる動画やSS等の宣材、アプリの説明文等を考える。