mcpField
G
game-developer

game-developer

github.com/jeffallan開発12.1k6.5k 回インストール今日更新
リポジトリ

game-developer について

Unity と Unreal を使う開発者向けのゲーム開発スキルです。設計、実装、プロファイリング、テストを支援し、性能確認の手順とトピック別の資料を備えています。

主な機能

  1. 01Unity と Unreal の開発ガイド
  2. 02ECS とゲーム設計パターン
  3. 03プロファイリングと性能最適化
  4. 04マルチプレイヤーネットワークのガイド
  5. 05クロスプラットフォームと負荷テスト

活用シーン

  1. 01新規ゲームのアーキテクチャ設計
  2. 02CPU、GPU、メモリ、フレーム時間の最適化
  3. 03マルチプレイヤー機能の実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeffallan/claude-skills --skill game-developer

インストール後、Claude Code で/game-developerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ecs-patterns.md
multiplayer-networking.md
performance-optimization.md
unity-patterns.md
unreal-cpp.md

詳細

ゲーム開発者

コアワークフロー

  1. 要件を分析する — ジャンル、プラットフォーム、パフォーマンス目標、マルチプレイヤーの要件を特定します
  2. アーキテクチャを設計する — ECS/コンポーネントシステムを計画し、対象プラットフォーム向けに最適化します
  3. 実装する — コアメカニクス、グラフィックス、物理演算、AI、ネットワーク機能を構築します
  4. 最適化する — 60 FPS 以上を実現できるようプロファイリングと最適化を行い、メモリ/バッテリーの使用量を最小限に抑えます
    • ✅ 検証チェックポイント: Unity Profiler または Unreal Insights を実行し、次に進む前にフレーム時間が 16 ms 以下(60 FPS)であることを確認します。CPU/GPU のボトルネックを特定し、反復的に解消します。
  5. テストする — クロスプラットフォームテスト、パフォーマンス検証、マルチプレイヤーの負荷テストを実施します
    • ✅ 検証チェックポイント: 高負荷時にフレームレートが安定していることを確認します。リリース前にマルチプレイヤーのレイテンシ/同期ずれテストを実行します。

リファレンスガイド

状況に応じて詳細なガイダンスを読み込みます:

トピックリファレンス読み込むタイミング
Unity 開発references/unity-patterns.mdUnity C#、MonoBehaviour、Scriptable Objects
Unreal 開発references/unreal-cpp.mdUnreal C++、Blueprints、Actor コンポーネント
ECS とパターンreferences/ecs-patterns.mdEntity Component System、ゲームパターン
パフォーマンスreferences/performance-optimization.mdFPS 最適化、プロファイリング、メモリ
ネットワークreferences/multiplayer-networking.mdマルチプレイヤー、クライアントサーバー、ラグ補償

制約事項

必ず行うこと
  • すべてのプラットフォームで 60 FPS 以上を目標にする
  • 頻繁なインスタンス生成にはオブジェクトプーリングを使用する
  • 最適化のために LOD システムを実装する
  • パフォーマンス(CPU、GPU、メモリ)を定期的にプロファイリングする
  • リソースの非同期読み込みを使用する
  • ゲームロジックに適切なステートマシンを実装する
  • コンポーネントの参照をキャッシュする(Update で GetComponent を使用しない)
  • フレームレートに依存しない移動には delta time を使用する
絶対に行わないこと
  • 高頻度ループや Update() 内で Instantiate/Destroy を使用する
  • プロファイリングやパフォーマンステストを省略する
  • タグの文字列比較を使用する(CompareTag を使用する)
  • Update/FixedUpdate のループ内でメモリを割り当てる
  • プラットフォーム固有の制約(モバイル、コンソール)を無視する
  • Update ループ内で Find 系メソッドを使用する
  • ゲーム内の値をハードコードする(ScriptableObjects/データファイルを使用する)

出力テンプレート

ゲーム機能を実装する際は、以下を提示します:

  1. コアシステムの実装(ECS コンポーネント、MonoBehaviour、または Actor)
  2. 関連するデータ構造(ScriptableObjects、struct、設定)
  3. パフォーマンスに関する考慮事項と最適化
  4. アーキテクチャ上の判断についての簡潔な説明

主要なコードパターン

オブジェクトプーリング(Unity C#)
public class ObjectPool<T> where T : Component
{
    private readonly Queue<T> _pool = new();
    private readonly T _prefab;
    private readonly Transform _parent;

    public ObjectPool(T prefab, int initialSize, Transform parent = null)
    {
        _prefab = prefab;
        _parent = parent;
        for (int i = 0; i < initialSize; i++)
            Release(Create());
    }

    public T Get()
    {
        T obj = _pool.Count > 0 ? _pool.Dequeue() : Create();
        obj.gameObject.SetActive(true);
        return obj;
    }

    public void Release(T obj)
    {
        obj.gameObject.SetActive(false);
        _pool.Enqueue(obj);
    }

    private T Create() => Object.Instantiate(_prefab, _parent);
}
コンポーネントのキャッシュ(Unity C#)
public class PlayerController : MonoBehaviour
{
    // Cache all component references in Awake — never call GetComponent in Update
    private Rigidbody _rb;
    private Animator _animator;
    private PlayerInput _input;

    private void Awake()
    {
        _rb = GetComponent<Rigidbody>();
        _animator = GetComponent<Animator>();
        _input = GetComponent<PlayerInput>();
    }

    private void FixedUpdate()
    {
        // Use cached references; use deltaTime for frame-independence
        Vector3 move = _input.MoveDirection * (speed * Time.fixedDeltaTime);
        _rb.MovePosition(_rb.position + move);
    }
}
ステートマシン(Unity C#)
public abstract class State
{
    public abstract void Enter();
    public abstract void Tick(float deltaTime);
    public abstract void Exit();
}

public class StateMachine
{
    private State _current;

    public void TransitionTo(State next)
    {
        _current?.Exit();
        _current = next;
        _current.Enter();
    }

    public void Tick(float deltaTime) => _current?.Tick(deltaTime);
}

// Usage example
public class IdleState : State
{
    private readonly Animator _animator;
    public IdleState(Animator animator) => _animator = animator;
    public override void Enter() => _animator.SetTrigger("Idle");
    public override void Tick(float deltaTime) { /* poll transitions */ }
    public override void Exit() { }
}

@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)が管理しています

ドキュメント

コメント