godot-genre-horror について
Godotのホラーゲーム開発向けスキルです。緊張の緩急、捕食者AI、感覚判定、資源の制限、正気度演出を扱い、必要なシステムを選んで実装できるモジュールを備えています。
主な機能
- 01緊張感の波を作るペーシング
- 02ディレクターと捕食者AIのパターン
- 03レイキャストによる視線判定
- 04型付きインベントリデータの管理
- 05スレッドによる恐怖演出素材の読み込み
活用シーン
- 01緊張のピークと安堵の配置
- 02視覚と聴覚で追跡する敵の構築
- 03限られたアイテムと可変インベントリ状態の管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-horrorインストール後、Claude Code で/godot-genre-horrorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/expert-horror-patterns.mdmigration-notes.mdscripts/async_scare_loader.gddirector_pacing.gdflashlight_flicker.gdfog_claus_intensifier.gdhorror_patterns.gdinventory_data_storage.gditem_state_duplicator.gdmonster_los_check.gdoffscreen_logic_suspender.gdoptimized_horror_state_machine.gdpredator_stalking_ai.gdsanity_manager.gdsanity_shader_manager.gdspatial_noise_emitter.gd詳細
絶対に避けるべきこと(熟練者向けアンチパターン)
雰囲気と緊張感
- 緊張感を常に100%にしてはいけません。プレイヤーが慣れて疲弊するのを防ぐため、鋸歯状のペーシングモデル(高まり → ピーク/恐怖演出 → 専用の緩和期間)を厳守してください。
- ジャンプスケアを恐怖の主な源にしてはいけません。真の恐怖を生み出すには、雰囲気、空間オーディオの手がかり、脅威が迫る 予感 を重視してください。
- 操作に苛立つほど環境を真っ暗にしてはいけません。暗闇で隠すべきなのは 脅威(細部)であり、床 ではありません。リムライトやバッテリーに制限のある懐中電灯を使用してください。
- プレイヤーに無制限のリソースを与えてはいけません。サバイバルホラーでは希少性が重要です。バッテリーの制限、弾薬の希少さ、遅いアニメーションを必須とし、プレッシャーのかかる意思決定を促してください。
AIと感覚
- AIがプレイヤーを即座に検知できるようにしてはいけません。「不公平な不正行為」のように感じさせないため、AIが完全な攻撃状態に入る前に、警戒度メーターまたは1〜3秒の反応時間を実装してください。
- 予測可能なAIの経路を使ってはいけません。完璧なループを移動する敵は捕食者ではなく、パズルです。Directorを使って、プレイヤーの近くにある新しい目的地を定期的に「示唆」してください。
- 即時かつフレーム単位で正確な視線判定(LoS)にArea3Dのオーバーラップシグナルを使ってはいけません。固定物理演算との同期には、
PhysicsDirectSpaceState3D.intersect_ray()を使ったノードレスのレイキャストを使用してください。 - カメラの視錐台から大きく外れたモンスターに対して、複雑なAIの視覚判定や経路探索を計算してはいけません。
VisibleOnScreenNotifier3Dを使って処理ロジックを無効にしてください。 - 追跡するモンスターのナビゲーション回避レイヤーを未設定のままにしてはいけません。狭い廊下で視覚的に「積み重なる」のを防ぐため、回避マスクを明示的に割り当ててください。
技術と希少性
- インベントリの信頼できる情報源として、ビジュアルなSceneTree(GridContainerの子ノードなど)を使ってはいけません。
Dictionary[StringName, Resource]のような型付きのメモリ構造を必ず維持してください。 - 基本的なアイテムのステータスや定義を保存するために、標準Nodeのインスタンス化に頼ってはいけません。メモリオーバーヘッドを減らし、Inspectorから直接編集できるように、カスタム
Resourceスクリプトを使用してください。 - インベントリに追加する際、アイテムのResourceに
duplicate(true)を呼び出すのを忘れてはいけません。アイテムに変更可能な状態(弾薬/耐久度)がある場合、そうしないとグローバルリソースを上書きしてしまいます。 - 巨大なJSONセーブファイルを同期的に解析してはいけません。オートセーブ時のフリーズを防ぐため、負荷の高い解析処理は必ず
WorkerThreadPoolにオフロードしてください。 - 処理頻度の高いID(状態、アイテムの種類)に標準の文字列を使ってはいけません。ポインター速度で比較するため、
StringName(&"chasing")を必ず使ってください。 - 浮動小数点数の厳密な等価性(sanity == 0.0)を評価してはいけません。決定論的なトリガーには、必ず
is_equal_approx()またはしきい値チェックを使用してください。 - Godot 3の
SCREEN_TEXTUREを想定した画面読み取りシェーダーを書いてはいけません。必ずhint_screen_textureを指定したsampler2Dを使用してください。 - 詳細なモンスターメッシュやライトをカリングなしでインスタンス化してはいけません。自動HLODの効率化のため、必ず
visibility_rangeを設定してください。 - ランダムなちらつきにAnimationPlayerを使ってはいけません。プログラムでエネルギーをきれいに操作するには、
Tweenを使用してください。 - 重い恐怖演出用シーンや4Kテクスチャを
load()で同期的に読み込んではいけません。フレーム停止を防ぐため、必ずResourceLoader.load_threaded_request()を使用してください。 - CollisionShape3Dを不均等にスケーリングしてはいけません。物理演算の不安定な挙動を防ぐため、内部の形状リソースのパラメーター(radius、height)を必ず調整してください。
- Safe Roomで同期的な重いファイルI/Oを行ってはいけません。メインゲームスレッドを停止させずにバックグラウンド保存を処理するには、必ず**
ThreadとMutex**を使用してください。 - キャストによって隠れ場所の種類を判定してはいけません。パフォーマンスに優れた疎結合のAIクエリには、必ず**
Objectのメタデータ(set_meta)**を使用してください。
🛠 熟練者向けコンポーネント(scripts/)
オリジナルのエキスパートパターン(アーキテクチャの各ステップで必須)
- director_pacing.gd - 「のこぎり歯」型の緊張の波と緩和期間を管理する、姿の見えないオーケストレーターです。ペーシングやDirectorの接続を始める前に必ず確認してください。
- predator_stalking_ai.gd - Directorからのヒントと正直な感覚を組み合わせ、視野円錐を回避する二重頭脳のストーカーです。捕食者AIの実装前に必ず確認してください。
モジュール式コンポーネント
- monster_los_check.gd - 高パフォーマンスな視認性チェックを実現する、物理演算と同期したレイキャストです。
- flashlight_flicker.gd - 雰囲気のある緊張感を生み出す、プロシージャルなライト干渉です。
- inventory_data_storage.gd - スパースなリソース管理のための、型付きデータ構造です。
- async_scare_loader.gd - ジャンプスケアの停止を防ぐ、スレッドを使ったリソース読み込みです。
- spatial_noise_emitter.gd - 感覚AI向けの、形状ベースの音検知です。
- item_state_duplicator.gd - 個別の武器/アイテム状態を管理するための、ディープ複製です。
- fog_claus_intensifier.gd - 恐怖感を高めるための、ボリューメトリックフォグ操作です。
- offscreen_logic_suspender.gd - カメラの視界外にあるAI処理をカリングするロジックです。
- sanity_shader_manager.gd - インスタンスユニフォーム駆動の歪みエフェクトです。
- sanity_manager.gd - 揺れとオーディオバスに値を渡す、ストレス/正気度の値のパイプラインです。
- optimized_horror_state_machine.gd - 高速な捕食者の行動ロジックです。
コアループ
- 探索:プレイヤーが脅威に満ちた環境を移動します。
- 察知:プレイヤーが危険の兆候を聞いたり見たりします。
- 対応:プレイヤーが隠れる、走る、または戦う(不利な戦闘)という行動を取ります。
- 生存:プレイヤーが安全な場所にたどり着くか、パズルを解きます。
- 緩和:緊張が再び高まる前の、短い安らぎの時間です。
スキルチェーン
| フェーズ | スキル | 目的 |
|---|---|---|
| 1. 雰囲気 | godot-3d-lighting、godot-audio-systems | ボリューメトリックフォグ、動的な影、空間オーディオ |
| 2. AI | godot-state-machine-advanced、godot-navigation-pathfinding、godot-raycasting-queries | ハンターAI、正直な視線判定/音検知 |
| 3. プレイヤー | godot-camera-systems、godot-genre-stealth、godot-physics-3d | 身を乗り出す動作/揺れ、隠れる動作、CharacterBody3Dの移動 |
| 4. 物資不足 | godot-inventory-system | 限られたバッテリー、弾薬、体力 |
| 5. ロジック/セーブ | このスキルのDirectorスクリプト + godot-save-load-systems | のこぎり歯型のペーシング + スレッドを使ったセーフルームのセーブ |
読み込まないもの(ゲームの方向性別)
| ゲームの方向性 | 読み込む | 読み込まない |
|---|---|---|
| 雰囲気/フォグ/懐中電灯のみ | fog_claus_intensifier.gd、flashlight_flicker.gd | 捕食者AI、視線判定、ノイズ、ステートマシン |
| ストーカー/二重頭脳AI | director_pacing.gd、predator_stalking_ai.gd、monster_los_check.gd、spatial_noise_emitter.gd | 正気度シェーダー、インベントリ複製、スケアローダー |
| 正気度/ストレスFX | sanity_manager.gd、sanity_shader_manager.gd | 物資不足を扱うインベントリスクリプト、非同期スケアローダー |
| 物資不足/インベントリの正確性 | inventory_data_storage.gd、item_state_duplicator.gd | フォグ強化、正気度シェーダー |
| 停止のないスケアアセット | async_scare_loader.gd | Directorと正気度のフルスタック |
アーキテクチャ概要
1. Directorシステム(マクロAI)
プレイヤーの緊張度が100%のままにならないよう、ペーシングを制御します。
必ず確認してください:director_pacing.gd — その場限りの緊張度enumを貼り付けないでください。Directorイベントはプレイヤーの近くにある調査対象に接続し、静かなフェーズではプレイヤー上への即時テレポートを決して行わないでください。
2. 感覚知覚(Micro AI)
正直なモンスターの感覚(視覚+聴覚)を実装します。ディレクターはヒントを与えるだけにとどめ、決して不正に情報を与えてはいけません。
必読: 二つの頭脳の連携については predator_stalking_ai.gd、視線判定/音については monster_los_check.gd と spatial_noise_emitter.gd を参照してください。視覚には Area の重なり判定ではなく、
PhysicsDirectSpaceState3D.intersect_ray()を優先してください。
3. 正気度/ストレスシステム
恐怖に応じて世界を歪ませます。
値から揺れ/バス/シェーダーへつなぐパイプラインについては、sanity_manager.gd と sanity_shader_manager.gd を読み込んでください。しきい値には
is_equal_approxまたは範囲を使用し、sanity == 0.0は決して使わないでください。
主要なメカニクスの実装
ペーシング(のこぎり波)
ホラーには山と谷が必要です。
- 安全: セーブ部屋。
- 不安: 奇妙な音、照明のちらつき。
- 恐怖: モンスターが近くにいると分かっている状態。
- 恐慌: 追跡シーケンス/戦闘。
- 安堵: 安全な場所へ逃げ込む。
「二つの頭脳」AI
- ディレクター(全知): エイリアンを物語に関与させ続けるため、不正をします(遠くにいる場合は近くにテレポートさせ、プレイヤーのおおよその位置へ誘導します)。
- エイリアン(感覚のみ): 正直な AI です。攻撃するには、実際にプレイヤーを見たり聞いたりする必要があります。
3. 隠れ場所のメタデータシステム
set_meta/グループを使用してください — 必須: predator_stalking_ai.gd と関連する godot-genre-stealth を参照してください。隠れ場所のチュートリアルを本文に貼り付けないでください。
4. 適応型オーディオ(ストレスによる音のこもり)
恐怖に応じてバスの LPF/音量を調整します — 必須: sanity_manager.gd と関連する godot-audio-systems を参照してください。
5. セーフルームでのマルチスレッドセーブ
マルチスレッドのチェックポイント I/O — 必須: 関連する godot-save-load-systems(Thread/Mutex/WorkerThreadPool)を参照してください。セーフルームでは、メインスレッド上で FileAccess を同期実行しないでください。
専門知識(必要に応じて)
LLM の無知に関するルール: 一般的なエージェントが読む前には知らないような内容であれば、参照資料を読み込んでください — 専門的な差分を削除してはいけません。
- expert-horror-patterns.md — 復元された基本的な指導内容(アーキテクチャ、理由、実装の深さ)
参考資料
段階的な開示: 特定の API を調べる場合にのみ公式ドキュメントへのリンクを開き、関連ドメインへ引き継ぐ場合にのみ関連スキルを読み込んでください。スキル全体を事前に読み込まないでください。
公式ドキュメント
- ボリューメトリックフォグとフォグボリューム — 恐怖感のある雰囲気を作り出す、密度/アルベドとライトに応じた散乱について説明しています。
- 環境とポストプロセッシング — ホラー表現に活用できるWorldEnvironmentのトーンマップ、グロー、フォグモードについて説明しています。
- ライトとシャドウ — 暗い屋内空間で使うSpotLight3Dの懐中電灯の照射範囲、ソフトシャドウ、バイアスについて説明しています。
- オーディオバス — ストレスによる音のこもりや空間的な恐怖感に使えるLowPass/Reverbバスエフェクトについて説明しています。
- レイキャスト — モンスターの視線判定にはAreaの重なりではなく、PhysicsDirectSpaceStateのintersect_rayを使う方法について説明しています。
- ナビゲーション入門(3D) — 狭い廊下での捕食者の追跡経路と回避マスクについて説明しています。
- バックグラウンド読み込み — ResourceLoaderのスレッドリクエストを使い、ジャンプスケア用アセットの読み込みによるカクつきを防ぐ方法について説明しています。
- 画面読み取りシェーダー — hint_screen_textureによる正気度の歪み表現について説明しています(Godot 3のSCREEN_TEXTUREではありません)。
- 可視性範囲 — 負荷の高いモンスターメッシュやライトに対するGeometryInstance3DのHLOD/カリングについて説明しています。
- ゲームの保存 — 独自のフォーマットを考案せずにセーフルームのチェックポイントを実装できるFileAccessのパターンについて説明しています。
- スレッドの使用 — バックグラウンド保存や負荷の高い解析処理に使うThread/MutexとWorkerThreadPoolについて説明しています。
- リソース — リソースの定義と
duplicate(true)を使い、変更可能なアイテムの状態がグローバルにエイリアスされないようにする方法について説明しています。
関連スキル
前提条件
- godot-project-foundations — Director/WorldEnvironmentを接続する前に必要なシーンツリー、オートロード、インポートの基礎について説明しています。
- godot-3d-lighting — ホラーの雰囲気を形作るボリューメトリックフォグ、SpotLight3Dの懐中電灯、シャドウの予算について説明しています。
- godot-audio-systems — 正気度/ストレスシステムで変化させるバス、空間オーディオエミッター、エフェクトスタックについて説明しています。
補完
- godot-navigation-pathfinding — NavigationAgent の追跡/探索経路と回避機能を使い、捕食者が通路で重ならないようにします。
- godot-state-machine-advanced — StringName を使ったパトロール/追跡/探索マシンで、捕食者のマイクロ AI を実現します。
- godot-raycasting-queries — Area でのごまかしを使わず、物理演算と同期した LoS およびシェイプクエリで感覚知覚を実現します。
- godot-shaders-basics — インスタンスユニフォームと画面読み取り型の歪みで、正気度 FX を実現します。
- godot-inventory-system — 型付きの Resource インベントリで、視覚的な UI ツリーとは分離して資源(バッテリー/弾薬)の不足を管理します。
- godot-camera-systems — VisibleOnScreenNotifier3D による手ぶれ、傾き、視錐台に基づく画面外 AI の一時停止を実現します。
- godot-tweening — AnimationPlayer の多用を避けながら、懐中電灯のちらつきや霧の濃度変化をプロシージャルに実現します。
- godot-monte-carlo-balancer — リリース前に、Director の鋸歯状のピーク/緩和サイクルと資源不足の予算をシミュレーションします。
- godot-genre-stealth — 同じ感覚 AI を共有する警戒度メーター、隠れ場所、視野角を使ったストーカーの行動パターンを実装します。
下流/利用先
- godot-genre-survival — ホラーの資源圧力を再利用する資源不足ループとセーフルームのチェックポイントを実装します。
- godot-save-load-systems — メインスレッドを停止させずにセーフルームで保存できる、スレッド/非同期の保存パイプラインを実装します。
マスター
- godot-master — ライブラリのルーターであり、スキルを横断して見つけるためのミラーモジュールのエントリです。