前回、無料で軽快な 2D/3D ゲームエンジン GodotEngine4 で作成したタップゲームを Android スマートフォンに USB ケーブル経由でインストールしてデバッグ実行しました。
実機でデバッグ実行すると、PC では発生しなかった問題がいくつか発生しました。
今回は、GodotEngine4 で作成したアプリを Android スマートフォンの実機でデバッグ実行した際に、宝箱をタップしても反応しづらいバグとその対処法と、アプリのアイコンの設定手順について紹介します。
※この記事の内容は、アプリ タップ The 宝箱 の開発でも使用しています。
※ GodotEngine のバージョンは 4.1.2 です。 .NET 版ではありません。
※「いらすとや」様の画像を使用しています。
※「ふい字」フォントを使用しています。
※「魔王魂」様のサウンドを動画内で使用しています。
※「無料効果音で遊ぼう!」様のサウンドを動画内で使用しています。
※記事で紹介するスクリプト / プログラム / コードは自己責任で使用してください。
Android スマートフォンでの実機デバッグ結果(初回)
Android スマートフォンでもタップ自体はクリックと同様に認識していてタップ位置に波紋アニメーションは表示されました。
しかし、宝箱をタップしても、波紋アニメ―ションは表示されるのに、コイン・宝石が出ません。
十数回に1回だけ反応してコイン・宝石がでましたが、かなり反応がよくないです。
しかし、タップ自体は認識していて波紋アニメーションは毎回出ています。
スライダー UI もきちんと操作できます。コインが出た際はスコアも更新されています。
原因は Godot 4.0 で確認されたバグの可能性
Input.action_just_release 関数は、キーやボタンが離された瞬間だけを検知する便利な関数ですが、Godot 4 の Android 環境では動作しないことが godotengine の github に記載されていました。
on Android with TouchScreenButton node, input_action_just_pressed and Input.action_just_released doesnt work in _physics_process function but it does work with _process function however.
This works on godot 3.5 so im guessing its a bug on godot 4 beta 1
TouchScreenButton ノードを備えた Android では、input_action_just_pressed および Input.action_just_release は _physics_process 関数では動作しませんが、_process 関数では動作します。 これはGodot 3.5で動作するため、Godot 4ベータ1のバグだと推測しています
Input.action_just_pressed and Input.action_just_released doesnt work in _physics_process on Android · Issue #66318 · godotengine/godot · GitHub
_physics_process 関数では動作して _process 関数では動作しないという報告です。
筆者は Input.action_just_release 関数を Area2D(CollisionObject2D)の input_event シグナルの受信メソッドで呼び出しているので、完全に現象が一致したわけではありませんが、変えてみることにしました。
公式サンプルで使われていたマウスのドラッグやクリック時(ボタンを離した瞬間)を検出する処理を宝箱画像の当たり判定イベントでも使うようにしました。
# ドラッグ中またはスワイプ中ならば true です。 _input イベントで扱います。
var dragging = false
func _on_area_2d_input_event(viewport, event, shape_idx):
# 入力の例 — Godot Engine (4.x)の日本語のドキュメント - https://docs.godotengine.org/ja/4.x/tutorials/inputs/input_examples.html#mouse-motion
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
# Start dragging if the click is on the sprite.
if not dragging and event.pressed:
dragging = true
# 左ボタンを押した瞬間の処理
# Stop dragging if the button is released.
if dragging and not event.pressed:
dragging = false
# ボタンを離した瞬間の処理
# お宝の放出
spawn_otakara(event.position)
# While dragging, move the sprite with the mouse.
if event is InputEventMouseMotion and dragging:
# ドラッグ中の処理
pass
return
この後、 apk を作成して Android スマートフォンで実機デバッグすると、宝箱の当たり判定が正常に行われるようになりました。
アイコンの設定
アプリのアイコンが未設定の場合、以下のように GodotEngine のアイコンが表示されます。
これは、プロジェクトに最初から用意されている icon.svg (128 x 128 ピクセル) がデフォルトで指定しているためです。
これを独自のアイコン画像に変えるには、「エクスポート」ウィンドウの使用する Android 用プリセットの設定で Launcher Icons の Main 192×192 などにそれぞれのサイズの画像を設定します。
※アイコン用画像は、ファイルシステムドックに画像ファイルをドラッグ&ドロップして、あらかじめプロジェクトに追加しておきます。
※「エクスポート」ウィンドウはメニュー「プロジェクト」→「エクスポート」で表示できます。
しかし、指定されたサイズで設定しても Android スマートフォンにインストールすると、サイズが合わず中央がズームされて表示されました。
しかし、Google Play ストアでは、正しく表示されました。
Android 実機でのアイコン画像のサイズの差異は気になりますが、これについては今回はこれ以上調査しません。
まとめ
今回は、無料で軽快なゲームエンジン GodotEngine4 で作成したアプリを Android スマートフォンの実機でデバッグ実行した際に、宝箱をタップしても反応しづらいバグとその対処法と、アプリのアイコンの設定手順について紹介しました。
タップを検知する方法には複数あり、マウスドラッグやクリック時のイベントを検知するための公式のサンプルコードが利用できることも紹介しました。
参照サイト Thank You!
- Godot Android library — Godot Engine (4.x)の日本語のドキュメント
- Android端末の実機上にAPKファイルを直接配置してアプリをデバッグできるようにしてみた | DevelopersIO
- apkファイルのインストール手順 | FAQ | デンソーウェーブ
- APKファイルを直接Android端末にインストールするには
- Input.action_just_pressed and Input.action_just_released doesnt work in _physics_process on Android · Issue #66318 · godotengine/godot · GitHub
記事一覧 → Compota-Soft-Press
コメント