godot-adapt-mobile-to-desktop について
Godot のモバイルゲームをデスクトップ向けに移植する開発者向けのスキルガイドです。入力、UI、ウィンドウ管理、グラフィック設定のスクリプトと手順を整理し、移植前のテスト資料も示します。
主な機能
- 01タッチ操作をキーボードとマウスに対応
- 02デスクトップのホバーとフォーカスに対応
- 03ウィンドウモードと複数画面の管理
- 04解像度とフレームレートの設定
- 05モバイル向けUIの縮小
- 06終了確認とキー再割り当て
活用シーン
- 01モバイルゲームにキーボードとマウス操作を追加
- 02デスクトップ画面に合わせてUIを調整
- 03フルスクリーン、複数画面、終了処理を実装
- 04移植前にデスクトップのグラフィック設定を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-adapt-mobile-to-desktopインストール後、Claude Code で/godot-adapt-mobile-to-desktopを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/desktop-port-deep.mddesktop-port-testing-checklist.mdmigration-notes.mdscripts/cursor_state_manager.gddesktop_input_adapter.gddesktop_ui_scaler.gddynamic_window_manager.gdhover_bridge.gdkeybinding_remapper.gdmouse_capture_look.gdmulti_monitor_handling.gdquit_confirmation.gdresolution_dropdown.gdscroll_wheel_zoom.gduncapped_framerate.gd詳細
絶対にしてはいけないこと
- タッチ専用の操作を絶対に残さないでください — マウス/キーボードでの代替操作を追加してください。デスクトップではタッチ操作はぎこちなく、精度も制限されます。
- モバイルの解像度に絶対に固定しないでください — デスクトップでは 1920x1080 以上の解像度や、より高いフレームレートに対応できます。UI を拡大し、描画距離を長くしてください。
- グラフィック設定を絶対に隠さないでください — デスクトップのプレイヤーは品質オプション(解像度、VSync、影、アンチエイリアス)を期待しています。
- モバイルサイズの UI を絶対に使用しないでください — タッチ操作のターゲット(44pt)はマウスには大きすぎます。ボタンやテキストのサイズを 30-50% 小さくしてください。
- ウィンドウ管理を絶対に忘れないでください — プレイヤーはフルスクリーン、ボーダーレス、最大化、マルチモニターに対応していることを期待しています。
利用可能なスクリプト
必須:対応するパターンを実装する前に、適切なスクリプトを読んでください。
desktop_input_adapter.gd
入力のリマップ時に最初に必ず読んでください — ゲームプレイを書き直さずに、モバイルのアクションをキーボード/マウスに接続します。FPS でのキャプチャが必要な場合は mouse_look_bridge_requested を発行します。mouse_capture_look と組み合わせてください。
hover_bridge.gd
UI にホバーが必要な場合は必ず使用してください — モバイルにはなかったデスクトップのホバー/フォーカスの使いやすさを復元します。場当たり的な mouse_entered の羅列よりこちらを優先してください。
mouse_capture_look.gd
InputEventMouseMotion.relative を使ったキャプチャ状態での視点操作です。アダプターだけでは不十分な FPS/オービットで使用してください。
dynamic_window_manager.gd
必須 — DisplayServer を使って、ウィンドウ、排他フルスクリーン、ボーダーレスを切り替えます。
keybinding_remapper.gd
実行時の InputMap リマップと ConfigFile への保存に対応します。
cursor_state_manager.gd
ハードウェアカーソルの表示/非表示と、戦闘時/メニュー時の状態を管理します。
uncapped_framerate.gd
144Hz 以上に対応するため、VSync/Engine.max_fps の上限を解除します。
resolution_dropdown.gd
DisplayServer.screen_get_size からネイティブ解像度の OptionButton を作成します。
desktop_ui_scaler.gd
必須 — 親指サイズのモバイル用コントロールを、マウス操作に適した密度に縮小します。
scroll_wheel_zoom.gd
ピンチ操作の代わりにマウスホイールでズームします。
quit_confirmation.gd
必須 — set_auto_accept_quit(false) と、WM の終了時の保存確認プロンプトに対応します。
multi_monitor_handling.gd
カーソルのある画面でウィンドウを起動/配置します。
判断ツリー — 入力スクリプトの選び方
| 必要な機能 | 使用するもの |
|---|---|
| 移動処理を書き直さずにタッチ操作を WASD/マウスに割り当てる | desktop_input_adapter |
| ボタン/Control のホバースタイルとツールチップ | hover_bridge |
| キャプチャ状態でのマウス視点操作(FPS/三人称オービット) | mouse_capture_look — 照準/視点操作でキャプチャ状態の相対移動が必要な場合は必須です。アダプターの get_aim_vector() だけではトップダウンにしか対応できません |
| キーの再割り当て | keybinding_remapper |
| ピンチ操作からホイールズームへの切り替え | scroll_wheel_zoom |
desktop_input_adapter が mouse_look_bridge_requested を発行したら、プレイヤー/カメラリグに mouse_capture_look.gd を追加するか、有効にしてください。InputMap の注入だけで終わらせないでください。
移植手順(順番どおり)
- 必須:desktop_input_adapter(UI には hover_bridge も)を導入し、すべてのタッチ操作に精度の高い代替操作を用意します。
- desktop_ui_scaler と拡張レイアウト(ホットバー/チャット/ミニマップ)を導入します。構造には godot-ui-containers を使用してください。
- dynamic_window_manager、multi_monitor_handling、quit_confirmation を導入します。
- resolution_dropdown、uncapped_framerate、グラフィック品質の段階設定を導入します(ConfigFile に保存)。
- OS とのより深い統合には godot-platform-desktop を使用します。
プラットフォームサービスの判断ツリー(Steam / Discord)
| 目標 | 判断 |
|---|---|
| クラウド/実績に対応して Steam でリリースする | GDExtension ブリッジを追加します(例:GodotSteam)。初期化処理は OS.has_feature("steam") の背後に置くか、エディターで安全に使えるスタブを用意します。ゲームプレイスクリプトに、偽の Steam.* チュートリアルを貼り付けないでください。 |
| Discord のリッチプレゼンスのみ | 薄い GDExtension/プラグインを優先します。シーン変更時にオートロードからプレゼンスを更新し、ネットワーク処理で _ready をブロックしないでください。 |
| 今回のマイルストーンではストア連携を行わない | 削除します。Steam/Discord のコードパスを完全に省き、今後の GDExtension 調査項目として記載します。 |
詳細レシピ
指定された手順を超えて移植する場合は、必ず desktop-port-deep.md を読んでください。キーボード/マウスのリマップを初回に行う場合は、読み込まないでください。
テスト(リリース前)
移植が完了したと判断する前に、必ず desktop-port-testing-checklist.md を実行してください。チェックリストの一部を本文に記載せず、参照ファイルを使用してください。
エキスパート向けテクニック(概要)
- メインパックの前に
OS.create_processとuser://settings.cfgを使って、軽量なランチャーを任意で追加します。 - 短時間の FPS ベンチマークを実施し、画質の提案を
user://override.cfgに書き込みます。 - グラフィックス品質の段階設定(MSAA、シャドウアトラス、ポストエフェクト)と UI 密度の表は desktop-port-deep.md にあります。移植手順の項目だけでは不十分な場合に開いてください。
参考資料
段階的な開示:特定の API を調べる場合に限り、公式ドキュメントのリンクを開いてください。 作業を関連する専門分野に振り分ける場合に限り、関連スキルを読み込んでください。スキル全体を事前に読み込まないでください。
公式ドキュメント
- InputEvent の使用 — イベントの流れを確認し、デスクトップで
InputEventScreenTouch/ScreenDragをマウスの移動、ボタン、キーボード操作に置き換えます。 - マウスと入力座標 — ビューポートとキャンバスの変換を確認し、マウスの照準やホバーが、以前のタッチ対象と同じ UI/ゲーム空間を指すようにします。
- カスタムマウスカーソル — 戦闘中とメニュー表示中のハードウェアカーソルの形状、および表示/非表示のルールを確認します(
Input.set_custom_mouse_cursor)。 - 入力の例 — モバイルの仮想ジョイスティック/ボタン操作に対応する、実践的な WASD、マウス視点操作、アクションのパターンを紹介します。
- 終了リクエストの処理 —
NOTIFICATION_WM_CLOSE_REQUEST/set_auto_accept_quit(false)を使うと、OS の閉じるボタンを押したときに、そのまま終了するのではなく保存を促せます。 - 複数の解像度 — モバイル向けの固定基本解像度から 1080p~4K やウルトラワイドに移行する際の、ストレッチモード、アスペクト比、コンテンツスケールについて説明します。
- DisplayServer — フルスクリーンやマルチモニターへの移植で使う、ウィンドウモード、VSync、画面数/サイズ/位置、リフレッシュレートの取得機能について説明します。
- Window — 枠なし/排他的フルスクリーンの切り替えで使う、ウィンドウごとのサイズ、位置、モードの API について説明します。
- InputMap — アクションをキーコードに実行時に再割り当てし、モバイル向けにタッチゾーンとして固定されていた操作を PC プレイヤーが変更できるようにします。
- サイズとアンカー — マウス操作向けに親指サイズのコントロールを縮小してもレイアウトが崩れないよう、アンカー/オフセットの規則を説明します。
- コンテナの使用 — デスクトップ向けに拡張した HUD(ホットバー、チャット、ミニマップ)と、モバイル向けのコンパクトなレイアウトを実現する、ボックス/グリッド/マージンのレイアウト規則を説明します。
- 機能タグ — プロジェクトを分けずに入力、UI スケール、グラフィック品質を切り替えるための
pc/mobile/OS タグについて説明します。
関連スキル
前提条件
- godot-input-handling — モバイル操作に対応する WASD/マウス入力を注入する前に、共通の InputEvent バッファリング、アクションマップ、デバイス検出を行います。
- godot-ui-containers — アンカー、コンテナ、最小サイズを設定し、デスクトップ UI の縮小/拡大時にも、解像度を問わず正しいレイアウトを保ちます。
- godot-platform-mobile — デスクトップのウィンドウ/入力処理に切り替える前に、置き換えるモバイルのライフサイクル、タッチ、安全領域に関する前提を確認します。
補完
- godot-platform-desktop — モバイルからデスクトップへの操作と設定のマッピングが完了した後に必要となる、Windows/macOS/Linux の DisplayServer と OS との連携について詳しく説明します。
- godot-camera-systems — スワイプ/ピンチによるカメラ操作に代わる、マウスルック、オービット、スクロールホイールによるズームの仕組みを説明します。
- godot-performance-optimization — デスクトップ GPU 向けに FPS、MSAA、シャドウ、描画距離を有効化する際のプロファイリングと品質設定の段階について説明します。
- godot-save-load-systems — ウィンドウを閉じる際の確認と設定の
ConfigFile永続化に連動する、確実なセーブデータ管理について説明します。 - godot-ui-theming — モバイルでは表示されないものの、デスクトップのプレイヤーがボタンやメニューに期待するテーマのタイプバリエーションとホバースタイルについて説明します。
- godot-project-foundations — すべてのデスクトップ移植ブランチで必要となる、ディスプレイストレッチ、レンダラー、機能タグのプロジェクト既定値について説明します。
- godot-autoload-architecture — シーン変更後も存続させる必要がある、ウィンドウマネージャー、入力アダプター、グラフィックス設定のためのシングルトンの配置先について説明します。
下流/利用側
- godot-export-builds — デスクトップで入力/UI/ウィンドウの各ゲートを通過した後の、Windows/macOS/Linux 向けパッケージングと CI エクスポートプリセットについて説明します。
- godot-adapt-desktop-to-mobile — デスクトップ優先の対応後も、同じコードベースでタッチ操作を優先する経路を維持または復元する必要がある場合の、逆方向の対応について説明します。
- godot-monte-carlo-balancer — マウスの精密な操作と高い FPS によってモバイルのタッチ操作のタイミングや照準カーブが適用できなくなった場合の、難易度の再調整について説明します。
マスター
- godot-master — この適応スキルを関連する各ドメインと並べて見つけるための、ライブラリのルーター兼ミラー化されたモジュールのエントリーポイントです。