2020-06-25に更新

GodotでAdMobを使う - Androidの場合

追記)Godot3.2以降は簡単になったので下記参照。

Godot3.2以降でAdMobを使う

追記終わり。

GodotでもAdMobを使うことが出来る。コード自体はGodot上にてGDScriptで書けばいいだけなので簡単だけど、ちょっと仕組み的には複雑かもしれない。ただ、やってみると、あーなるほど、そういう仕組で動いてるのか、と分かる。ちなみにGodot3.1.1現在。

iOSの場合はこちら。Godotのビルドの解説をしていたり、Godot3.2を使っていたり、Android、iOS両方に対応したGodotのコードの例もある。(ビルドはもしかしたらAndroid側は関係なくなっているのかもしれないが)

GodotでAdMobを使う - iOSの場合

モジュールを追加

具体的には下記のリポジトリにあるモジュールを利用する。

kloder-games/godot-admob: Module Admob for Godot engine

詳しい説明もここに書かれている。2つやり方があって、「Using precompiled templates (Second Option)」と書かれている方が簡単。そこの説明のhereと書かれているリンクをクリックすると下記に遷移する。

Shin-NiL/godot-custom-mobile-template: Godot Game Engine Custom Mobile Template

ここのReleaseに色々あるので、自分が使っているGodotのバージョンと同じ番号のものをダウンロードする。それを解凍したら、GodotのエクスポートメニューのAndroidの設定のところに、「Custom Package」という設定があるのでそこにDebugとRelease用のパッケージを指定する。

あとは説明にあるように下記のパーミッションを有効にしておく。

  • Access Network State
  • Internet

一体何をやっているのか

これは一体何をやっているのかというと、簡単に言えばAndroid Studioで作られたプロジェクトの部分がこのCustom Packageとして提供されている感じなのではないかと思う。なのでAdMobのようにネイティブ側で対応が必要な機能を提供する際にはそういったモジュールを追加してビルドされたCustom Packageを利用することで、Godot側でも利用できるようになる、という感じだと思われる。

実際問題Second Optionではない正規の方法では、モジュールを追加して自分でビルドしてくれ、という形になっている。今回はAdMobを使いたいだけなのでビルド済みのもので問題ないが、色々とモジュールを必要に応じて追加したプロジェクトを使う場合には自分でビルドしないといけないと思う。

が、Godot3.2からはもっと簡単にできるようになるよ、ということも最初のリポジトリの説明に書かれている。なのでまあとりあえず今はビルド済みのを使っておいたほうが楽かもしれない。

Godot側にモジュール追加設定

Custom Packageの準備ができたら、今度はGodotのプロジェクト側にモジュールの追加設定を行う。Godotのプロジェクトファイルがテキストファイルになっており、それを直接いじるので恐らくGodotを起動していると勝手に書き換えられて無効になってしまう。そのため一旦Godotを終了してから、下記のテキストをproject.godotに追加する。

[android]
modules="org/godotengine/godot/GodotAdMob"

AdMobを表示するコードを追加

そしたらあとはAdMobを表示するコードをシーンに追加するだけ。僕の場合は下記のようにした。デバッグ時にはテスト広告を表示し、且つAdMobモジュールが正常にロードできているかをLabelに表示して確認している。ちなみに実機でしか動作しない。

var admob = null

func _ready():
    if Engine.has_singleton("AdMob"):
        admob = Engine.get_singleton("AdMob")
        # 一般向けの場合
        # init(isReal, instance_id)
        # 子ども向けの場合
        admob.initWithContentRating(!OS.is_debug_build(), get_instance_id(), true, 'G')
        if OS.is_debug_build():
            admob.loadBanner('ca-app-pub-3940256099942544/6300978111', false)
            $UILayer/DebugLabel.set_text('ad initialized')
        else:
            admob.loadBanner('本番の広告ユニットID', false)
    else:
        if OS.is_debug_build():
            $UILayer/DebugLabel.set_text('ad not initialized')

ということでちょっと面倒くさい…けどビルド済みCustom Packageだとだいぶ楽。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, Vue.js, React, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント