Godot4 Androidスマホで当たり判定が鈍いバグの対処法&アイコン設定

前回、無料で軽快な 2D/3D ゲームエンジン GodotEngine4作成したタップゲームを Android スマートフォンに USB ケーブル経由でインストールしてデバッグ実行しました。
実機でデバッグ実行すると、PC では発生しなかった問題がいくつか発生しました。

スマホ実機でapk動作確認 インストールをタップして apk からアプリをインストールします...

今回は、GodotEngine4 で作成したアプリを Android スマートフォンの実機でデバッグ実行した際に、宝箱をタップしても反応しづらいバグとその対処法と、アプリのアイコンの設定手順について紹介します。

※この記事の内容は、アプリ タップ The 宝箱 の開発でも使用しています。
※ GodotEngine のバージョンは 4.1.2 です。 .NET 版ではありません

※「いらすとや」様の画像を使用しています。
※「ふい字」フォントを使用しています。

※「魔王魂」様のサウンドを動画内で使用しています。
※「無料効果音で遊ぼう!」様のサウンドを動画内で使用しています。
※記事で紹介するスクリプト / プログラム / コードは自己責任で使用してください。

Android スマートフォンでの実機デバッグ結果(初回)

Android スマートフォンでもタップ自体はクリックと同様に認識していてタップ位置に波紋アニメーションは表示されました。

スマホ実機でapk動作確認 ゲーム画面の外側をタップしても波紋が表示されました..

しかし、宝箱をタップしても、波紋アニメ―ションは表示されるのに、コイン・宝石出ません
十数回に1回だけ反応してコイン・宝石がでましたが、かなり反応がよくないです。
しかし、タップ自体は認識していて波紋アニメーションは毎回出ています。

スマホ実機でapk動作確認 アプリ初回実機デバッグでは宝箱を数十回タップして数回コインなどが出る状況で当たり判定の反応がよくありません..

スライダー UI もきちんと操作できます。コインが出た際はスコアも更新されています。

スマホ実機でapk動作確認 コインが出るとスコアも更新されます.音量ボリュームも調節できました..

原因は 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 シグナルの受信メソッドで呼び出しているので、完全に現象が一致したわけではありませんが、変えてみることにしました。

公式サンプルで使われていたマウスのドラッグやクリック時(ボタンを離した瞬間)を検出する処理を宝箱画像の当たり判定イベントでも使うようにしました。

Godot4 TapTheTakarabako アクションを使った入力処理は反応するエリアが小さく数十回に一度しか反応しないのでアクションを使わないように変更しました
# ドラッグ中またはスワイプ中ならば 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 のアイコンが表示されます。

スマホ実機でapk動作確認 アイコンは Godot4 デフォルトの物が表示されました.

これは、プロジェクトに最初から用意されている icon.svg (128 x 128 ピクセル) がデフォルトで指定しているためです。

Godot4 既定の icon.svg のサイズは 128x128px でした.

これを独自のアイコン画像に変えるには、「エクスポート」ウィンドウの使用する Android 用プリセットの設定で Launcher IconsMain 192×192 などにそれぞれのサイズの画像を設定します。
※アイコン用画像は、ファイルシステムドックに画像ファイルをドラッグ&ドロップして、あらかじめプロジェクトに追加しておきます。
※「エクスポート」ウィンドウはメニュー「プロジェクト」→「エクスポート」で表示できます。

Godot4 TapTheTakarabako エクスポートウィンドウのオプションでメインのアイコンを設定します.

しかし、指定されたサイズで設定しても Android スマートフォンにインストールすると、サイズが合わず中央がズームされて表示されました。

Godot4 Android 用に設定したアイコン画像はAndroid実機では一部ズームされて表示されてしまいます.

しかし、Google Play ストアでは、正しく表示されました。
Android 実機でのアイコン画像のサイズの差異は気になりますが、これについては今回はこれ以上調査しません。

Godot4 Android 用に設定したアイコン画像はAndroid実機では一部ズームされて表示されますがGooglePlayストアでは正常に表示されます.

まとめ

今回は、無料で軽快なゲームエンジン GodotEngine4 で作成したアプリを Android スマートフォンの実機でデバッグ実行した際に、宝箱をタップしても反応しづらいバグとその対処法と、アプリのアイコンの設定手順について紹介しました。
タップを検知する方法には複数あり、マウスドラッグやクリック時のイベントを検知するための公式のサンプルコードが利用できることも紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました