godot-platform-mobile について
Godot ゲームのモバイル対応を扱うスキルです。タッチ入力、安全領域、画面の向き、性能、OS 権限を取り上げます。操作方式と画面設定に応じた対応を選べる判断フローと専用スクリプトを備えています。
主な機能
- 01マルチタッチジェスチャー処理
- 02セーフエリアとノッチへの対応
- 03画面の向きに応じたレイアウト
- 04一時停止中の電力・熱管理
- 05Android 権限の処理
- 06VRAM とテクスチャ圧縮の指針
活用シーン
- 01ピンチや二本指回転の操作を追加
- 02HUD を画面のノッチから避ける
- 03画面の向きに合わせて UI を調整
- 04バックグラウンドでの電力消費を抑える
- 05必要なタイミングで Android 権限を要求
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-platform-mobileインストール後、Claude Code で/godot-platform-mobileを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migration-notes.mdmobile-touch-and-expert.mdscripts/adaptive_safe_area_inset.gdandroid_runtime_permissions.gdhaptic_pattern_generator.gdmobile_gesture_recognizer.gdmobile_haptics.gdmobile_iap_flow_boilerplate.gdmobile_navigation_manager.gdmobile_safe_area_handler.gdmobile_sensor_fusion.gdmobile_shader_precompiler.gdmobile_vram_optimizer.gdnative_share_invoker.gdorientation_layout_adaptor.gdplatform_mobile_patterns.gdthermal_throttle_monitor.gd詳細
プラットフォーム:モバイル
タッチ優先の入力、安全領域への対応、バッテリー最適化がモバイル開発の要です。
絶対に避けること(モバイル開発のエキスパート向けルール)
入力とディスプレイ
- タッチ操作にマウスイベントを絶対に使わないでください — モバイルで
InputEventMouseButtonに依存するのは信頼性に欠けます。高精度なマルチタッチに対応するため、必ずInputEventScreenTouchとInputEventScreenDragを使用してください。 - ディスプレイの安全領域(ノッチ/切り欠き)を絶対に無視しないでください — カメラのノッチの背後に配置された UI は使用できません。
DisplayServer.get_display_safe_area()で安全領域を取得し、重要な UI の位置を適切に調整してください。 - 画面の向きが固定だと絶対に想定しないでください —
size_changedシグナルに対応せずに横向きゲームを固定すると、折りたたみ式デバイスやタブレットで向きが変わった際にレイアウトが崩れます。
バッテリーとパフォーマンス
- バックグラウンドで高いフレームレートを絶対に維持しないでください — バックグラウンドでアプリを 60 FPS に保つと、バッテリーを消耗します。
NOTIFICATION_APPLICATION_PAUSEDを使用して、Engine.max_fpsを 1 に下げてください。 - モバイルで Forward+ レンダラーを絶対に使用しないでください — ほとんどのモバイル GPU は Forward+ に最適化されていません。塗りつぶし率を最適化するには、専用の Mobile または Compatibility レンダラーを使用してください。
- テクスチャ圧縮「ETC2/ASTC」を絶対に無効のままにしないでください — デスクトップ向けの非圧縮テクスチャは、VRAM の枯渇によりモバイルデバイスをクラッシュさせる可能性があります。
権限と OS 連携
- Android の権限が自動的に許可されると絶対に想定しないでください — 必ず
OS.request_permission()を明示的に呼び出し、OS.get_granted_permissions()で確認してください。 - 権限なしでハンドヘルドデバイスの振動を絶対に呼び出さないでください — Android では、エクスポートプリセットで
VIBRATE権限が有効になっていない限り、振動の呼び出しは無視されます。 - I/O のためにメインスレッドを絶対にブロックしないでください — モバイルで大きなファイルを保存すると、ANR(アプリケーション応答なし)エラーが発生する可能性があります。バックグラウンドスレッドを使用してください。
利用可能なスクリプト
必須:ゴールデンパスの分岐を選び、一致するスクリプトだけを読み込んでください。
ゴールデンパス
- 以下の判断ツリーを実行します(操作方式 × 画面の向き × レンダラー)。
- タッチ/スティック →
mobile_gesture_recognizer.gd(アクションマップには入力スキルも使用)。組み込みの仮想ジョイスティックで十分な場合はそちらを使用します。 - レイアウト/ノッチ →
adaptive_safe_area_inset.gdとorientation_layout_adaptor.gd。 - ライフサイクル/温度 →
thermal_throttle_monitor.gd(FPS と発熱を管理)。 - 権限/共有/IAP → 必要に応じて
android_runtime_permissions.gd、native_share_invoker.gd、mobile_iap_flow_boilerplate.gd。 - VRAM/圧縮 →
mobile_vram_optimizer.gd。
スクリプト一覧
mobile_gesture_recognizer.gd
ピンチズームと 2 本指回転に対応する、エキスパート向けのマルチタッチロジックです。
adaptive_safe_area_inset.gd
DisplayServer のインセットを使用した、安全領域(ノッチ)の動的な処理です。
thermal_throttle_monitor.gd
NOTIFICATION_APPLICATION_PAUSED によるバッテリーと発熱の管理です。
mobile_iap_flow_boilerplate.gd
Android/iOS のアプリ内課金(IAP)に対応する、統一されたボイラープレートです。
haptic_pattern_generator.gd
モバイルの触覚フィードバック向けの、高度な振動パターンです。
android_runtime_permissions.gd
Android の権限を要求して確認する、エキスパート向けのロジックです。
mobile_sensor_fusion.gd
加速度センサーと重力センサーの融合による、安定したモーション操作です。
orientation_layout_adaptor.gd
横向き/縦向きの切り替えに対応する、適応型 UI の切り替えです。
mobile_vram_optimizer.gd
VRAM の監視と、テクスチャ圧縮を徹底するルールです。
native_share_invoker.gd
ソーシャル機能向けの、OS レベルのネイティブ共有シート連携です。
platform_mobile_patterns.gd / mobile_safe_area_handler.gd
追加のパターン/従来のセーフエリア用ヘルパー — ゴールデンパスのスクリプトで不足する場合にのみ読み込みます。
実装前の判断ツリー
| 軸 | 選択肢 | 示唆される対応 |
|---|---|---|
| 操作方式 | タップ/ジェスチャー、仮想スティック、傾き | ジェスチャー → mobile_gesture_recognizer.gd、スティック → 組み込みジョイスティック/Control スティック、傾き → mobile_sensor_fusion.gd |
| 画面の向き | 横向き固定/縦向き/適応型 | 適応型 → 必須の orientation_layout_adaptor.gd + size_changed |
| レンダラー | Mobile または Compatibility | スマートフォンの GPU では Forward+ を使用しないでください。ETC2/ASTC を有効にし、ロード画面でシェーダーを事前コンパイルします |
タッチ入力には InputEventScreenTouch/InputEventScreenDrag を使用します。マウス入力のエミュレーションは使用しません。
プロジェクト設定(モバイル)
[rendering]
renderer/rendering_method="mobile"
textures/vram_compression/import_etc2_astc=true
[display]
window/handheld/orientation="landscape"
App Store のメタデータ
- アイコン:512×512(Android)、1024×1024(iOS)。複数解像度のスクリーンショット、プライバシーポリシー、年齢レーティングを用意します。
リリース判定チェック(理由)
- ANR と I/O — メインスレッドで大きなセーブ/ロードを行うと、Android の ANR が発生します。理由:応答しないアプリは OS によって終了されます。判定基準:ディスク I/O にはバックグラウンドスレッド/
WorkerThreadPoolを使用します。 - 一時停止中の FPS — バックグラウンドに移行したアプリが 60 FPS のままだと、バッテリーを消耗し、SoC が発熱します。理由:
NOTIFICATION_APPLICATION_PAUSED時にEngine.max_fpsを下げる必要があります(thermal_throttle_monitor.gdを参照)。 - 権限を求めるタイミング — Android の権限(マイク、写真)は、起動直後ではなく機能を使うタイミングで要求します。理由:Play のポリシーとユーザーからの信頼を守るためです。
android_runtime_permissions.gdを通じてOS.get_granted_permissions()で確認します。
エキスパート向けメモ(スクリプト優先)
- Android の戻る操作:
quit_on_go_backを無効にし、mobile_navigation_manager.gd でNOTIFICATION_WM_GO_BACK_REQUESTを処理します。 - 触覚フィードバック:haptic_pattern_generator.gd/mobile_haptics.gd と、エクスポート時の
VIBRATE権限を設定します。 - シェーダーのスタッター:mobile_shader_precompiler.gd を使用します。詳細な事前コンパイルのレシピには
godot-shaders-basicsを推奨します。
詳細(必要に応じて)
- タッチ/ジョイスティック、セーフエリア、Android の戻る操作、触覚フィードバック、シェーダーの事前コンパイル → mobile-touch-and-expert.md
参考資料
段階的な情報開示:特定の API を調べる場合にのみ公式ドキュメントへのリンクを開きます。 作業を関連分野に引き継ぐ場合にのみ関連スキルを読み込み、スキル全体を事前に読み込まないでください。
公式ドキュメント
- InputEvent の使用 — イベントの処理フローを解説します。マウスボタンのエミュレーションではなく、
InputEventScreenTouch/InputEventScreenDragがモバイルで適切な方法となる理由がわかります。 - 入力の例 — 仮想ジョイスティック、ピンチ/回転、スワイプ HUD の基盤となる、マルチタッチ、ドラッグ、ジェスチャーのパターンを解説します。
- 終了リクエストの処理 — デスクトップでの終了処理を前提とする設計に代わる、
NOTIFICATION_APPLICATION_PAUSED/ 再開、および Android の戻る操作(WM_GO_BACK_REQUEST)のライフサイクルを解説します。 - DisplayServer — ノッチ、折りたたみ式端末、OSK による表示領域の遮蔽に対応する
get_display_safe_area()、画面の向き、仮想キーボードの API を解説します。 - OS — Android の実行時チェックや VRAM ウォッチドッグで使用される
request_permission()/get_granted_permissions()、機能タグ、メモリ照会を解説します。 - Input —
vibrate_handheld()、加速度計/重力センサー/ジャイロスコープのフュージョン、タッチ↔マウスのエミュレーション切り替えを解説します。 - Android 向けのエクスポート — プラットフォームコードの準備後に必要となる権限(
VIBRATEを含む)、APK/AAB、ストアのパッケージング要件を解説します。 - iOS 向けのエクスポート — プライバシーやプラグインの設定漏れが後から発覚する原因となる、Xcode へのエクスポート、ケイパビリティ、App Store の要件を解説します。
- Android のアプリ内課金 — iOS のストアプラグインとともに IAP ボイラープレートスクリプトが抽象化する、公式 Play Billing のフローを解説します。
- 3 つのレンダリング方式の概要 — フィルレートと機能の観点から、モバイルビルドで Forward+ よりも Mobile または Compatibility を優先すべき理由を解説します。
- 複数の解像度 — スマートフォン/タブレットのアスペクト比の変化に対応する、ストレッチモード、コンテンツスケール、画面の向きに対応したレイアウトを解説します。
- 機能タグ — 権限、共有シート、プラットフォーム専用シングルトンの分岐に使う
mobile/android/iosを解説します。
関連スキル
前提条件
- godot-input-handling — ジェスチャー認識や仮想スティックをリリースする前に必要な、InputEvent の共有バッファリング、マルチタッチのインデックス、デッドゾーンを解説します。
- godot-ui-containers — セーフエリアのインセットや 44~48px のタッチターゲットが適切にレイアウトされるよう、アンカー、Margin/Box コンテナー、最小サイズを解説します。
- godot-project-foundations — Android/iOS のすべてのエクスポート分岐で必要となる、機能タグ、画面ストレッチ設定、レンダラーのデフォルト設定を解説します。
補完
- godot-adapt-desktop-to-mobile — デスクトップからタッチへの操作の再マッピング、ジョイスティックのスポナー、UI スケーリング。これらはこのスキルのより深い OS/権限 API と組み合わせて使用します。
- godot-performance-optimization — サーマルによる FPS 上限と ETC2/ASTC だけではミッドレンジの予算にまだ収まらない場合のプロファイリングと CPU/GPU の削減。
- godot-save-load-systems — デスクトップ専用の終了通知ではなく、一時停止/再開にフックした耐久性のあるセーブの所有権。
- godot-autoload-architecture — 権限、ハプティクス、サーマルモニター、常時有効な一時停止ハンドラーのためのシングルトンの置き場所。
- godot-audio-systems —
APPLICATION_PAUSEDでのバスのミュート/ダッキングにより、バックグラウンドオーディオでデバイスが暖まらないようにします。 - godot-shaders-basics — より低コストな CanvasItem/Spatial シェーダーパスと、モバイルのヒッチスパイクを避けるプリコンパイル戦略。
- godot-tweening — モバイルでのテキスト入力中に OS の仮想キーボードが LineEdit を覆うときの、滑らかな UI の持ち上げ。
- godot-platform-desktop — 同じプロジェクトがモバイルの機能タグと併存してデュアル入力のままであるときも、マウス/キーボードの経路を正しく保ちます。
下流/コンシューマー
- godot-export-builds — デバイス上でタッチ/セーフエリア/権限のゲートを通過した後の署名、CI プリセット、ストアパッケージング。
- godot-genre-puzzle — モバイルのジェスチャーとセーフエリア HUD のパターンを利用するタップ/スワイプ/ピンチの操作スキーム。
- godot-economy-system — Play Billing/App Store プラグインを接続した後の、ソフト/ハード通貨とレシートで検証された IAP 製品。
マスター
- godot-master — このプラットフォームスキルを兄弟ドメインと並べて発見するためのライブラリルーターおよびミラーリングされたモジュールエントリー。