2019-11-08に更新

GodotでAdMobを使う - Androidの場合

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

モジュールを追加

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

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の開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

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

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

ボードとは?

関連記事

コメント