モバイル広告
この記事は Godot 3から Godot 4 へ内容の書き換え中です。 Godot4では存在しない変数、関数が含まれている場合があります。もしその場合はリポジトリのIssuesまでご報告ください。
広告について
無料プレイ型モバイルゲームを開発する際、収益化手段としてアプリ内課金と広告の2つの選択肢があります。本記事では、モバイル広告プラットフォーム(AdMob)をゲームに統合する方法について解説します。
広告は必ずしも好まれるものではなく、その導入の有無は個々のゲーム開発者が判断すべき事項です。本チュートリアルではメリット・デメリットの検討には踏み込みません。ここでは「もし広告を実装したい」と考えている方向けに、その方法を丁寧に解説します。
AdMobの設定する
AdMobに移動してアカウントを作成してください。
アドモブマネージャーで新しいアプリを作成します - アプリは「サークルジャンプ」というタイトルです - そして「Android」プラットフォームを指定します(iOSについては後ほど説明します)。
「Circle Jump」アプリでは、「広告ユニット」を3種類作成が必要です。これらはゲーム内で表示可能な各種広告形式です。今回のチュートリアルでは、「バナー広告」と「インタースティシャル広告」が必要になります。各広告ユニットには「Ad Unit ID」という文字列が割り当てられます(これは後でゲーム内で使用します)。
Godotモジュールの使用について
Godot はデフォルトでは広告サービスをサポートしていないため、この機能を追加するにはエンジンモジュールまたはプラグインを使用が必要です。使用するモジュールはこちらから確認できます。 godot-admob。 このページには、プラグインが提供するメソッドの一覧が記載されています。
カスタムエンジンモジュールを使用するには、エンジンの再コンパイルが必要です。モバイルプラットフォームの場合、デフォルトでダウンロードしたエクスポートテンプレートは本モジュールに対応した形でコンパイルされていないため、それらも再コンパイルが必要です。
エクスポートテンプレートのコンパイルは難しくありませんが、コンピュータ上にビルド環境を設定する必要があります。これには、Godotをビルドするために必要なプログラムやライブラリをダウンロードすることが含まれます。この概念に慣れておらず詳しく知りたい場合は、公式ドキュメントの [コンパイル] セクションを参照してください Compiling。
幸いなことに、カスタムエクスポートテンプレートの作成は既に完了しています。godot-custom-mobile-templates GitHubリポジトリに移動してください。「リリース」タブを開き、自分の使用しているGodotバージョンに対応したエクスポートテンプレートをダウンロードします。
エクスポートテンプレートのバージョンは必ずGodotエディタのバージョンと一致している必要があります。カスタムビルド版のエディタを使用している場合は、同じコードブランチからテンプレートも構築が必要です。
テンプレートをコンピュータの任意の場所に解凍してください(Circle Jumpプロジェクトフォルダには入れないでください)。
エクスポートの設定
Godot エディターに戻って、エクスポート設定に変更を加える必要があります。まず、プロジェクト -> プロジェクト設定 を開き、「Android」セクションを見つけてください。モジュール プロパティには、コードで使用するモジュールをリストします。モジュール名は godot-admob ページに記載されています。“org/godotengine/godot/GodotAdMob”。使用するモジュールが複数ある場合は、カンマで区切ってください。
_プロジェクト設定 -> エクスポートメニューでは、ダウンロードしたカスタムテンプレートを使用するようにGodotに指示が必要です。これらは[カスタムパッケージ]セクションで設定します。フォルダアイコンをクリックして、テンプレートを解凍したディレクトリに移動してください。「デバッグ」と「リリース」両方のテンプレートを必ず追加してください。
コード例
現在ゲームを実行すると(Android端末上で)、指定したモジュールが読み込まれるようになります。これはエンジンのシングルトン経由でアクセスできます。settings.gdファイルを開いて、以下の内容を追加してください。
var admob = null
var real_ads = false
var banner_top = false
# Fill these from your AdMob account:
var ad_banner_id = ""
var ad_interstitial_id = ""
var enable_ads = true
これはモジュール用の設定変数です。real_ads を false に設定すると「テスト広告」モードになります。ゲームリリース準備が整うまでは、これを true に変更しないでください。banner_top は、バナー広告を画面上部に表示するか下部に表示するかを切り替えるトグルです。
ad_banner_id および ad_interstitial_id には、AdMobアカウントから取得した広告ユニット値を設定が必要です。
モジュールの初期化が必要です。
func _ready():
if Engine.has_singleton("AdMob"):
admob = Engine.get_singleton("AdMob")
admob.init(real_ads, get_instance_id())
admob.loadBanner(ad_banner_id, banner_top)
admob.loadInterstitial(ad_interstitial_id)
まずモジュールのシングルトンが存在するかを確認します。存在が確認できれば、モジュールを初期化し、広告ユニットを読み込むことができます。
func show_ad_banner():
if admob and enable_ads:
admob.showBanner()
func hide_ad_banner():
if admob:
admob.hideBanner()
次に、バナーの表示/非表示を制御する機能について説明します。これはメニュー画面でのみ表示し、実際のゲームプレイ中には表示されないようにします。
func show_ad_interstitial():
if admob and enable_ads:
admob.showInterstitial()
この関数を使用して、ゲーム終了時にインタースティシャル広告を表示します。
func _on_interstitial_close():
if admob and enable_ads:
show_ad_banner()
このモジュールは、インタースティシャル広告が閉じた時にコードを実行するためのコールバックを探しています。ゲームの終了時でメニューに戻るため、バナーを再表示します。
これから、これらの関数をゲームコードから呼び出す必要があります。Main.gdを開いて、以下を追加してください。
new_game()関数内でsettings.hide_ad_banner()を追加してください_on_Jumper_died()関数の最後にsettings.show_ad_interstitial()を追加してください
デバイスでゲームを起動すると、テスト広告が表示されるはずです。
広告を無効化する
多くのゲームでは、アプリ内課金や特定レベル到達などによって広告を非表示にできる機能が提供されています。今回の場合、「設定」画面に追加ボタンを設ける形で実装します。
まず、enable_adsの値を変更できるように、セッター関数を追加してください。
var enable_ads = true setget set_enable_ads
また、セッター関数を追加してください。
func set_enable_ads(value):
enable_ads = value
if enable_ads:
show_ad_banner()
if !enable_ads:
hide_ad_banner()
この設定により、ボタンを押した際にバナー追加機能が即座に表示/非表示されます。
ボタンを追加するには、3行目のボタン列が必要になります。BaseScreenシーンを開き、最初のHBoxContainerを複製してください。
[SettingsScreen]シーンに「Ads」という名前のButtonを中央の行に追加してください。テキストを「広告を無効にする」に設定し、カスタムフォント(サイズ48が適切です)を適用し、さらにカスタムスタイルをすべて「New StyleBoxEmpty」に設定してください。最後に、このボタンを「buttons」グループに追加することを忘れないでください。
Screens.gdファイル内で、ボタン処理用のmatchステートメントに以下を追加してください。
match button.name:
"Ads":
settings.enable_ads = !settings.enable_ads
if settings.enable_ads:
button.text = "Disable Ads"
else:
button.text = "Enable Ads"
デバイスでゲームを実行し、広告の有効化/無効化が行えることを確認してください。
GitHubでプロジェクトをフォローしてください!
https://github.com/kidscancode/circle_jump