godot-genre-survival について
サバイバルゲームを開発する Godot 開発者向けのジャンルスキルです。ニーズ、採集、インベントリ、クラフト、建築、ワールド生成を扱い、Resource によるデータ設計やスレッド処理、MultiMesh の活用を重視します。
主な機能
- 01活動量に応じた空腹・渇きの減少
- 02Resource ベースのアイテム、レシピ、インベントリ
- 03採集、クラフト、ツール段階別の収量
- 04GridMap 建築と安全なスポーンゾーン
- 05スレッドによるチャンク読み込みと生成
活用シーン
- 01空腹・渇きと段階的な体力減少の実装
- 02スタック上限と耐久度のあるインベントリ構築
- 03ツール進行とレシピ発見の作成
- 04サバイバルワールドのバイオームとチャンク生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-survivalインストール後、Claude Code で/godot-genre-survivalを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/architecture-overview.mdcommon-pitfalls-extended.mdelite-technical-patterns.mdgodot-tips.mdkey-mechanics.mdmigration-notes.mdscripts/aipathing_system.gdbase_builder.gdbiome_generator.gdcrafting_recipe_processor.gdinteractable.gdinventory_data.gdinventory_slot_data.gdinventory_slot_resource.gdmodular_inventory_controller.gdstatus_depletion_manager.gdsurvival_patterns.gd詳細
絶対に避けること(エキスパート向けアンチパターン)
生理機能とニーズ
- ニーズの減少に一定の速度を使わないでください。必ず活動量に応じて調整してください(例:全力疾走中は、何もせずにいるときの3倍の速さで空腹度が減少します)。
- 飢餓や脱水による即死を使わないでください。必ずHPを徐々に減少させ、視覚と音声で明確に警告してください。
- 生死に関わる厳密な判定に浮動小数点タイマーを使わないでください。0.0の精度による判定漏れを防ぐため、必ず
is_equal_approx()または<=を使ってください。 - UIスクリプト内でワールドの時刻や昼夜サイクルを管理しないでください。状態と表示を切り離すため、必ず**AutoLoad(シングルトン)**を使ってください。
採集とインベントリ
- 進行要素なしに採集を面倒にしないでください。技術の進歩に報いるため、必ずツールのティア別スケーリングを実装してください(例:石の斧=1回の攻撃で木材1個、鋼の斧=1回の攻撃で木材5個)。
- インベントリへの無制限のアイテムスタックを許可しないでください。戦略的な資源管理を促すため、必ず重量容量または厳格なスタック上限(例:64個)を設けてください。
- プレイヤーにクラフトレシピを「推測」させないでください。素材を入手するとレシピが解放される発見システムを必ず使ってください。
- 共有Resource(アイテムの耐久度など)の**duplicate(true)**を忘れないでください。そうしないと、すべてのインスタンスが同時に壊れてしまいます。
- 重いアイテムやクラフトの定義をNodeのプロパティに保存しないでください。軽量なデータを扱うため、必ずカスタムのResourceコンテナを使ってください。
ワールドとパフォーマンス
- 脅威をリスポーン地点に出現させないでください。敵の出現を禁止する安全地帯の半径(ベッド/スポーン地点)を必ず設定してください。
- 植生用に
MeshInstance3Dノードを10,000個個別にインスタンス化しないでください。ドローコールをまとめるため、必ずMultiMeshInstance3Dを使ってください。 - 大規模なワールドチャンクを同期的に読み込まないでください。処理の引っかかりを防ぐため、必ず
ResourceLoader.load_threaded_request()を使ってください。 - 複雑な辞書を標準のテキストファイルに保存しないでください。速度とサイズ効率のため、必ずバイナリシリアル化を使ってください。
- プロシージャルな地形/ノイズのアルゴリズムをメインスレッドで実行しないでください。必ずWorkerThreadPoolに処理を移してください。
- GDScriptに大規模なクラフトテーブルをハードコードしないでください。バランス調整やMOD対応を容易にするため、必ず
ConfigFileまたはJSONを使ってください。
エキスパート向けコンポーネント(scripts/)
必須:インラインのスタブより、これらのスクリプトを優先してください。
passだけの構成をシーンに貼り付けないでください。
survival_patterns.gd
最初に必ず読むこと — 活動量に応じたバイタル値の減少、MultiMeshへのデータ設定、スレッドを使ったチャンク読み込み、WorkerThreadPoolによるノイズチャンク(generate_noise_chunk_async)、GridMapでのスナップ/配置、収集データの永続化、ディープコピーのduplicate(true)。
status_depletion_manager.gd
ニーズの実装には必須 — _physics_process内で、活動量に応じて空腹度と水分を減少させます(一定速度で減少させないという「絶対に避けること」の要件に準拠)。
inventory_data.gd
Resourceベースの基本的なグリッドインベントリ:スタック上限、メタデータ、追加/削除。
inventory_slot_data.gd
UIとロジックをつなぐ軽量なスロットDTO。
inventory_slot_resource.gd
耐久度追跡機能を備えた、シリアル化可能なスロットResource。
modular_inventory_controller.gd
インベントリデータとUIシグナルを接続するコントローラー。
interactable.gd
採集/拾得/ワールドトリガーのための汎用インターフェース。
crafting_recipe_processor.gd
素材を確認 → 消費 → 結果を付与(発見システムに対応)。
決定木 — サバイバルシステム
| 必要なもの | 経路 |
|---|---|
| アイテム/レシピ/耐久度データ | カスタム Resource + inventory_slot_resource.gd |
| バッグ/スタック/重量 | inventory_data.gd + modular_inventory_controller.gd — 重量上限/ドラッグ&ドロップ UI → godot-inventory-system(ここでグリッド UI を再説明しないでください) |
| 空腹/渇き | status_depletion_manager.gd — 移動に応じて sprinting を設定します |
| 採取/開封/拾得 | interactable.gd |
| クラフト | crafting_recipe_processor.gd |
| 拠点建築のスナップ | survival_patterns.gd の place_if_empty / GridMap |
| 森林の草木 | populate_nature を使った MultiMesh — MeshInstance3D を 1 万個使う方法は避けてください |
| チャンクストリーミング | survival_patterns の load_world_chunk スレッド処理パス |
| 大規模なプロシージャルノイズ/バイオーム | survival_patterns の generate_noise_chunk_async — または、地形がチャンクヘルパーの範囲を超える場合は 必須 の godot-procedural-generation |
| フェーズ | 関連スキル | 目的 |
|---|---|---|
| 1. データ | godot-resource-data-patterns | アイテム/レシピの Resources |
| 2. UI | godot-ui-containers, godot-inventory-system | グリッド+ドラッグ&ドロップ |
| 3. ワールド | godot-procedural-generation, godot-3d-world-building | ノイズ、GridMap |
| 4. ロジック | godot-signal-architecture, godot-state-machine-advanced | ニーズ+インタラクション |
| 5. セーブ | godot-save-load-systems | ワールド+インベントリ+レシピ |
主なメカニクス(チュートリアルではなく、参照先)
ニーズ(活動量に応じた変化)
移動を StatusDepletionManager.sprinting に接続します。バイタルが空になると、警告とともに HP が徐々に減少します(即死はさせません)。スクリプトを参照してください — _process に一定の decay_rate を再導入しないでください。
ティア別のツール性能
石の斧は収穫量 1/鋼鉄の斧は収穫量 5/近くにいると自動ノコギリ — ハードコードした採取スクリプトではなく、アイテム Resource のメタデータとして設定します。
スポーン安全地帯
脅威スポーナーを有効にする前に、ベッド/player_beds の範囲外になるようスポーン地点を再抽選します。
Godot 固有のヒント
- TileMapLayer(Godot 4)を 2D ワールドに使用します — Godot 3 の
TileMapAPI は使用しないでください。 - バイオーム/リソース密度には FastNoiseLite を使用します(大規模マップでは WorkerThreadPool を使ってメインスレッド以外で処理します)。
- 大規模なインベントリやチャンク辞書には ResourceSaver /バイナリシリアライズを使用します。
- 木や小道具を含むトップダウン 2D のオクルージョンには Y-Sort を使用します。
よくある落とし穴
- 作業の単調さ — ツールのティアに応じて採取量を増やします。
- インベントリの煩雑化 — スタック上限を大きくし、保管先を十分に用意します。
- 目標がない — ただ生き延びるだけでなく、技術ツリーやボスによるプレッシャーを設けます。
高度な技術実装
拠点建築のスナップ、またはバイオーム/ノイズの作業を始める場合は 必須 です。elite-technical-patterns.md を読んでください。ニーズ/インベントリ/クラフトの初回実装では 読み込まないでください — 上記のスクリプトカタログを使用してください。
詳細なレシピ(必要に応じて)
| トピック | リファレンス/スクリプト |
|---|---|
| ニーズ/クラフト/ツール | key-mechanics.md +同梱のサバイバルスクリプト |
| 拠点建築のグリッドスナップ | elite-technical-patterns.md + base_builder.gd |
| バイオーム/スポーン安全性 | elite-technical-patterns.md + biome_generator.gd |
参考資料
段階的な情報提示:特定の API を調べる場合に限り、公式ドキュメントへのリンクを開いてください。関連分野のスキルへ誘導する場合は、関連スキルを読み込んでください — スキル一式を事前に読み込まないでください。
公式ドキュメント
- リソース — アイテム定義、レシピテーブル、インベントリスロットはリソースとして管理します。これにより、デザイナーはコードを変更せずに、重量、スタック上限、耐久度を調整できます。
- アイドル処理と物理処理 — 空腹度や水分量の減少量には、
_physics_process(または_process)でdeltaを掛け、重要なステータスの減少がフレームレートに依存しないようにします。 - シングルトン(Autoload) — ワールド時間、昼夜、グローバルなニーズの状態はAutoloadで管理し、UIスクリプトが時間を管理しないようにします。
- シグナルの使用 — インベントリとクラフトから変更シグナルを発行し、毎フレームポーリングすることなくHUDのグリッドを更新します。
- ゲームの保存 — インベントリ、アンロック済みのレシピ、ベースのGridMapセル、プレイヤーの重要なステータスをセッション間で保持します。
- バイナリシリアライズAPI — 大規模なワールドやチャンクの辞書には、容量の大きなテキストダンプではなくバイナリパックを使用します。
- バックグラウンド読み込み —
ResourceLoader.load_threaded_request()でワールドチャンクをストリーミングし、探索中のカクつきを防ぎます。 - GridMapの使用 — ベース建築のスナップ配置と八分木単位でバッチ化される構造物パーツには、
GridMap.local_to_map/set_cell_itemを使用します。 - MultiMeshの使用 — 森、岩、採取可能な草木は、何千ものMeshInstance3Dノードを使うのではなく、MultiMeshでバッチ化します。
- 複数スレッドの使用 — プロシージャルなノイズや地形の生成はWorkerThreadPoolで行い、メインスレッドでは実行しないでください。
- FastNoiseLite — バイオームやリソース密度のマップでは、FastNoiseLiteの勾配をサンプリングして自然なワールド配置を実現します。
- AStarGrid2D — プレイヤーが構造物を配置したときにセルを通行不可に設定し、AIが新しいベースをすぐに迂回できるようにします。
関連スキル
前提条件
- godot-gdscript-mastery —
is_equal_approx、Resourceのduplicate(true)、およびdeltaに応じたタイマーは、重要なステータスやインベントリのロジックに取り組む前に身につけておくべき基礎です。 - godot-resource-data-patterns — 耐久度やスタックのメタデータを適切にシリアライズするため、アイテム、レシピ、スロットのペイロードはResourceを中心に設計する必要があります。
- godot-signal-architecture — インベントリやクラフトのバスからシグナルを発行し、Node間を密結合させずにUIやインタラクションシステムへ変更を通知します。
- godot-autoload-architecture — シーン切り替え後も維持される昼夜サイクルやグローバルなニーズの管理には、Autoloadの所有権ルールに従います。
補完
- godot-inventory-system — グリッド上のスタック、重量容量、ドラッグ&ドロップ UI により、ジャンルの概要を超えたサバイバル用バッグを実現します。
- godot-save-load-systems — バージョン管理されたワールドセーブでは、インベントリのリソース、拠点のセル、アンロック済みレシピのリストを扱います。
- godot-procedural-generation — ノイズによるバイオーム生成とリソースの散布は、このスキルの FastNoiseLite パターンと組み合わせられます。
- godot-3d-world-building — GridMap のツール、コリジョン、LOD の手法は、プレイヤーが建築する大規模な拠点を支えます。
- godot-ai-navigation — 建築した壁を考慮する脅威 AI には、構造物の変更時に NavigationAgent / AStar の更新が必要です。
- godot-ui-containers — クラフトメニューとインベントリグリッドは、ゲームプレイスクリプトではなく Control のレイアウトの問題です。
- godot-game-loop-harvest — 段階的なツールの採集量と採集ループは、サバイバルでの採集と採集ループのパターンを共有します。
下流/利用側
- godot-monte-carlo-balancer — レシピのコスト、ツールのティア、ニーズの減衰率をデータ駆動にした後、モンテカルロシミュレーションでキャリアを検証し、バランスシートを公開する前に技術習得までの時間と飢餓リスクの範囲を確認できます。
- godot-genre-open-world — オープンワールドサバイバルでは、ここで定義されるチャンクストリーミング、安全地帯でのスポーン、資源不足のループを利用します。
- godot-economy-system — 交易所とクラフト品の消費先により、サバイバルクラフトをソフト通貨経済へと拡張します。
マスター
- godot-master — ライブラリのルーター兼ミラー化されたモジュールのエントリです。関連スキルの確認や、Domain Skill の編集後に共有スクリプトのミラーを同期する際に使用します。