godot-game-loop-harvest について
資源採集ループを実装するGodot開発者向けのスキルで、採集操作や成長システムの構築に役立ちます。データリソースとシグナルを使い、命中判定、インベントリ更新、再出現、自動保存、オフライン進行を連携します。
主な機能
- 01採集可能ノードのヒット処理
- 02ツール段階と収量のデータリソース
- 03採集・ダメージイベント用シグナル
- 04再出現と枯渇ノードの永続化
- 05自動保存とオフライン進行のパターン
活用シーン
- 01ツール条件付きの資源採集の作成
- 02採集結果とインベントリやHUDの連携
- 03枯渇状態と再出現時刻の保存
- 04プレイヤー不在中の進行付与
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-game-loop-harvestインストール後、Claude Code で/godot-game-loop-harvestを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/harvest-elite-patterns.mdmigration-notes.mdscripts/harvest_autosave_manager.gdharvest_inventory_manager.gdharvest_loop_patterns.gdharvest_respawn_manager.gdharvest_tool_data.gdharvestable_node.gdresource_data.gd詳細
スクリプトカタログ(パスごとに必須)
| パス | 必ず読むファイル |
|---|---|
| ヒット/収集 | harvestable_node.gd、resource_data.gd、harvest_tool_data.gd |
| オフライン/自動保存 | harvest_loop_patterns.gd、harvest_autosave_manager.gd、harvest_inventory_manager.gd |
| 鉱脈/リスポーン/ワールド | harvest_respawn_manager.gd + 以下の FastNoiseLite に関するメモ |
セットアップ(簡易)
HarvestResourceData/HarvestToolDataの.tresを作成します(ツールの enum とティア、収集量の範囲、任意のドロップシーンを設定)。harvestable_node.gdをStaticBody3Dにアタッチし、データとmesh_to_shakeを割り当てます。インタラクションは Layer 1 に設定します。- ワールドの永続化が必要な場合は、
harvest_respawn_manager.gdをHarvestRespawnManagerとしてオートロードします。
ヒット処理
レイキャスト/インタラクト → apply_hit(tool_data: HarvestToolData):
if collider is HarvestableNode:
collider.apply_hit(player_tool)
| シグナル | ペイロード | 接続先 |
|---|---|---|
harvested | (data, amount) | インベントリ/harvest_inventory_manager |
took_damage | (curr, max) | HUD バー/ポップアッププール |
interaction_failed | (reason: StringName) | "wrong_tool"/"low_tier" のフィードバック |
絶対にしないこと
- 蓄積した収集数に float を絶対に使わないでください —
intを使用します。 deltaなしで_process内の収集速度を絶対に計算しないでください — フレームレートによって経済バランスが変わります。- オフライン進行に
OS.get_ticks_msec()を絶対に使わないでください —Time.get_unix_time_from_system()を使用します。 - 自由形式の文字列でツールの種類を絶対に確認しないでください —
HarvestToolData.ToolType/StringNameの enum を使用します(スクリプトを参照)。 - 共有 Resource テンプレートを絶対に変更しないでください — 実行時に耐久度や体力を変更する前に
duplicate(true)を使用します。 - VFX/SFX が終わる前に絶対に
queue_free()しないでください — メッシュを非表示にし、コリジョンレイヤーを切り替えてから、演出後に解放します。 - 終了時に UNIX タイムスタンプを絶対に保存し忘れないでください — オフラインでの獲得量はこれに依存します。
- 収集ロジックを UI カウンターに絶対に結び付けないでください — シグナルのみを使用します。
- コリジョンシェイプを不均一にスケーリングしないでください — シェイプリソースのサイズを編集します。
鉱脈のプロシージャル生成(ノイズ)
FastNoiseLite のしきい値を使って自然なクラスターを生成します。noise.get_noise_2dv(pos) > threshold となる場所に HarvestableNode のインスタンスを生成します。枯渇した ID はリスポーンマネージャーで永続化します。シードなしでロードのたびに鉱脈を再生成しないでください。
ツールの耐久度
耐久度はプレイヤーノードではなく、Resource である HarvestToolData に保持します。ヒット成功後に、ツール Resource から耐久度/破損シグナルを発行します。
オフラインの UNIX 時刻計算、ワーカースレッドでのバッチ処理、ポップアッププール、鉱脈のプロシージャル生成を詳しく確認する場合は、harvest-elite-patterns.md を必ず参照してください。ヒット処理とリスポーンマネージャーで十分な場合は、読み込まないでください。
参考資料
段階的な情報開示: 実装する API(Resources、StaticBody3D のヒット処理、シグナル、タイマー、セーブ/オフライン時間)についてのみ、公式ドキュメントに目を通してください。インベントリ、オートロード、レイキャスト、経済バランスを組み込むときは関連スキルを開きます。スキル一式をあらかじめ読み込まないでください。
公式ドキュメント
- リソース —
HarvestResourceData/HarvestToolDataを共有可能な.tresアセットとして作成すると、デザイナーは採取スクリプトを編集せずに、体力、収穫量の範囲、ツールの使用条件を調整できます。 - Resource — 実行時の採取/ツール状態を変更する前に
duplicate(true)を呼び出すと、あるノードの枯渇や耐久度の変化が、共有テンプレートの Resource に反映されるのを防げます。 - GDScript のエクスポート —
@export/@export_groupを使うと、採取データ Resource 上のツールのティア、収穫量の範囲、リスポーン時間、ドロップシーンを Inspector で設定できます。 - シグナルの使用 —
harvested、took_damage、interaction_failedを発行すると、HarvestableNodeの内部実装に依存せず、インベントリ、HUD バー、フィードバック UI を接続できます。 - StaticBody3D — ワールド内の採取可能オブジェクトは、プレイヤーがクエリや攻撃の対象にする静的コライダーです。インタラクション用レイヤーに配置し、枯渇中は非アクティブなレイヤーに移してください。
- コリジョンシェイプ(3D) — シェイプリソースのサイズを直接調整してください。コリジョンシェイプを不均等にスケールすると、木や鉱石ノードに対するツルハシ/斧のヒット判定が壊れます。
- アイドル処理と物理処理 — 継続的な採取速度に
deltaを乗算してください(固定ステップの経済処理には_physics_processを推奨)。これにより、採取速度がフレームレートに依存しなくなります。 - Time — オフライン中の収益には
Time.get_unix_time_from_system()を保存してください。現実世界での不在時間の計算にOS.get_ticks_msec()や稼働時間を使わないでください。 - ゲームの保存 — インベントリ数、枯渇したノード ID、絶対時刻でのリスポーン/オフライン時刻を、ほかの進行状況データと一緒に保存してください。
- FileAccess —
FileAccess.openを使ってuser://以下に JSON(またはバイナリ)を書き込む定期自動保存を行うと、手動保存の間にクラッシュしても採取状況が保持されます。 - Tween — ヒット時の「演出」にはメッシュ子ノードの短いプロパティ Tween を使うと、攻撃のたびに破棄するアニメーションプレイヤーを作成せずに済みます。
- シングルトン(Autoload) —
HarvestRespawnManagerを Autoload として登録すると、各地に散らばった採取可能オブジェクトから/root/HarvestRespawnManagerを参照し、ワールド全体の枯渇状況を永続化できます。
関連スキル
前提条件
- godot-resource-data-patterns — 収穫量、ツールのステータス、ドロップシーンは Resource を中心に構成します。経済バランスの数値をノードに組み込む前に、合成と複製のルールを定めてください。
- godot-signal-architecture —
harvested/inventory_updatedの所有権と安全な接続により、採取ノードを HUD やインベントリのハブから切り離せます。 - godot-physics-3d — 操作可能なワールドオブジェクトの
StaticBody3Dレイヤー/マスクとシェイプ設定は、信頼性の高いヒット検証の前提条件です。 - godot-gdscript-mastery — 型付き Resource、
create_timerへのawait、Mutex/WorkerThreadPoolのパターンには、GDScript の確かな基礎が必要です。
補完
- godot-inventory-system —
harvestedを実際のインベントリ/スタック処理パイプラインに接続し、収穫専用の辞書にカウントを残さないようにします。 - godot-save-load-systems — 定期的な JSON ダンプにとどめず、倉庫の合計数、ツールの耐久度、枯渇したノードのタイマーをプロジェクトのセーブスキーマで往復できるようにします。
- godot-autoload-architecture — リスポーンマネージャーとインベントリマネージャーは、明確な初期化順序とシグナルバスの境界を備えた、規律ある Autoload グラフに配置します。
- godot-raycasting-queries — プレイヤーの採集入力では通常、
apply_hit(tool_data)を呼び出す前にレイキャストまたはシェイプキャストで採集可能なコライダーを検出します。 - godot-tweening — ヒット時の揺れを、
queue_free()の早期呼び出しで VFX を途中終了させることなく、仕上げのトゥイーン(スクワッシュ、フラッシュ、カメラのパンチ)へと拡張します。 - godot-economy-system — 収穫物を消費先、クラフトコスト、ベンダーのループに接続し、採集が一貫性のある経済システムにつながるようにします。
下流/利用側
- godot-monte-carlo-balancer — 収穫量、リスポーン時間、ツールのティアを調整可能な Resource にした後、モンテカルロシミュレーションでリリース前に採集のペースと消費先への負荷を検証します。
- godot-genre-survival — サバイバルのループでは、この採集コアの上に、収穫を空腹、クラフト、ワールドの脅威システムと組み合わせます。
- godot-game-loop-collection — 収集/スカベンジャー系の目標では、「XをN個集める」クエストで同じ収穫/インベントリのシグナルを利用することがよくあります。
- godot-procedural-generation — ノイズ駆動の資源鉱脈とワールド配置は、インタラクションループが確立した後に、収穫ノードのデータを基盤として構築できます。
マスター
- godot-master — ライブラリのルーターとミラー化されたモジュールのエントリです。関連スキルの検索や、Domain Skill の編集後に共有スクリプトのミラーを同期するときに使用します。