game-developer について
game-developerは、UnityやUnreal Engineを使う開発チーム向けのゲーム開発スキルです。ゲームプレイ、グラフィックス、マルチプレイヤー、エンジン設計を扱い、2D/3DやVR/ARの開発フローを示します。
主な機能
- 01UnityとUnreal Engineの開発指針
- 02ゲームプレイとキャラクター機能の試作
- 03グラフィックスとレンダリングの最適化
- 04マルチプレイヤーネットワークのパターン
- 05VR/ARとエディターツールのワークフロー
活用シーン
- 01戦闘やキャラクターコントローラーの試作
- 02ゲームのグラフィックス性能改善
- 03マルチプレイヤーのネットワーク方式の検討
- 04VR/ARのゲームプレイと操作の開発
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill game-developerインストール後、Claude Code で/game-developerを入力して読み込まれたか確認します。
詳細
ゲーム開発者
目的
Unity(C#)と Unreal Engine(C++)を専門とする、インタラクティブエンターテインメント開発の専門知識を提供します。ゲームプレイのプログラミング、グラフィックスの最適化、マルチプレイヤーのネットワーク通信、エンジンアーキテクチャを通じて、没入感のあるゲーム体験を実現する 2D/3D ゲームを開発します。
使用するタイミング
- ゲームメカニクスのプロトタイピング(キャラクターコントローラー、戦闘システム)
- グラフィックス性能の最適化(シェーダー、LOD、オクルージョンカリング)
- マルチプレイヤーのネットワーク通信の実装(Netcode for GameObjects、Mirror、Unreal Replication)
- レベルアーキテクチャとストリーミングシステムの設計
- VR/AR 体験の開発(OpenXR、ARKit)
- カスタムエディターツールとパイプラインの作成
2. 判断フレームワーク
エンジンの選定
Which engine fits the project?
│
├─ **Unity**
│ ├─ Mobile/2D/VR? → **Yes** (Best ecosystem, smaller build size)
│ ├─ Team knows C#? → **Yes**
│ └─ Stylized graphics? → **Yes** (URP is flexible)
│
├─ **Unreal Engine 5**
│ ├─ Photorealism? → **Yes** (Nanite + Lumen out of box)
│ ├─ Open World? → **Yes** (World Partition system)
│ └─ Team knows C++? → **Yes** (Or Blueprints visual scripting)
│
└─ **Godot**
├─ Open Source requirement? → **Yes** (MIT License)
├─ Lightweight 2D? → **Yes** (Dedicated 2D engine)
└─ Linux native dev? → **Yes** (Excellent Linux support)
マルチプレイヤーアーキテクチャ
| モデル | 説明 | 最適な用途 |
|---|---|---|
| クライアントホスト型(P2P) | 1 人のプレイヤーがホストになります。 | 協力プレイゲーム、格闘ゲーム(ロールバック対応)。低コストです。 |
| 専用サーバー | クラウド上の権威サーバーです。 | 競技性の高いシューティングゲーム、MMO。不正行為を防止します。 |
| リレーサーバー | リレーサービス(例:Unity Relay)です。 | NAT の問題を回避できる、セッションベースのゲーム。 |
グラフィックスパイプライン(Unity)
| パイプライン | 対象 | メリット |
|---|---|---|
| URP(Universal) | モバイル、VR、Switch、PC | 高性能でカスタマイズ可能。大規模なアセットストアにも対応します。 |
| HDRP(High Def) | PC、PS5、Xbox Series X | 写実的な表現、ボリューメトリックライティング、コンピュートシェーダー。 |
| Built-in | レガシー | 新規プロジェクトでは使用しないでください。 |
要注意事項 → graphics-engineer(スペシャリスト)にエスカレーション:
- カスタムレンダリングバックエンド(Vulkan/DirectX/Metal)を一から作成する
- ドライバーレベルの GPU クラッシュをデバッグする
- 新しい GI(グローバルイルミネーション)アルゴリズムを実装する
ワークフロー 2:Unreal Engine のマルチプレイヤー設定
目標: サーバーからクライアントに変数(Health)を複製します。
手順:
-
ヘッダー(
Character.h)UPROPERTY(ReplicatedUsing=OnRep_Health) float Health; UFUNCTION() void OnRep_Health(); void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override; -
実装(
Character.cpp)void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(AMyCharacter, Health); } void AMyCharacter::TakeDamage(float DamageAmount) { if (HasAuthority()) { Health -= DamageAmount; // OnRep_Health() called automatically on clients // Must call manually on Server if needed OnRep_Health(); } } -
Blueprint との統合
- UI のプログレスバーを
Health変数にバインドします。 - 「Play as Client」(NetMode)でテストします。
- UI のプログレスバーを
ワークフロー 4:VFX Graph と Shader Graph(視覚効果)
目標: 魔法の呪文用に GPU アクセラレーション対応のパーティクルシステムを作成します。
手順:
-
Shader Graph(見た目)
Unlit Shader Graphを作成します。TimeでスクロールするVoronoi Noiseノードを追加します。Colorプロパティ(HDR)と乗算します。Base ColorとAlphaに接続します。- Surface Type を
Transparent/Additiveに設定します。
-
VFX Graph(動き)
Visual Effect Graphアセットを作成します。- Spawn コンテキスト: Constant Rate(1000/sec)。
- Initialize: Lifetime(0.5s - 1s)と Velocity(Random Direction)を設定します。
- Update:
Turbulence(Noise Field)を追加し、風を再現します。 - Output:
Quad Outputに、上で作成した Shader Graph を使用するよう設定します。
-
最適化
- パーティクルでゲームプレイロジック(例:ダメージ)を発生させる必要がある場合は、
GPU Eventsを使用します。 - カリングの問題を避けるため、
Boundsを正しく設定します。
- パーティクルでゲームプレイロジック(例:ダメージ)を発生させる必要がある場合は、
5. アンチパターンと注意点
❌ アンチパターン 1:Update() 内の重い処理
例:
- 毎フレーム
FindObjectOfType、GetComponent、または負荷の高い計算を実行する。
問題点:
- CPU のパフォーマンスが大幅に低下します。
- モバイル端末のバッテリーを消耗します。
正しい方法:
Start()またはAwake()で参照をキャッシュします。- 毎フレーム実行する必要のない処理(例:AI の経路探索を 0.5 秒ごとに更新する)には、コルーチンまたは InvokeRepeating を使います。
❌ アンチパターン 2:クライアントを信頼する
例:
- クライアントがサーバーに「プレイヤー X を撃った」と送信する。
- サーバーがただちにダメージを適用する。
問題点:
- 不正行為をするプレイヤーが偽のパケットを送信できてしまいます。
正しい方法:
- 権威サーバー: クライアントは「発砲した」と送信します。サーバーが命中を計算し、クライアントに「命中した」と伝えます。
- ローカルプレイヤーの遅延を軽減するために、予測と再調整を使います。
❌ アンチパターン 3:巨大なクラス
例:
PlayerController.csが 2000 行にわたり、移動、戦闘、インベントリ、UI、オーディオを処理する。
問題点:
- スパゲッティコードになります。
- デバッグが困難になります。
正しい方法:
- コンポジション:
PlayerMovement、PlayerCombat、PlayerInventoryに分割します。 - コンポーネントを使って責務を分割します。
7. 品質チェックリスト
パフォーマンス:
- フレームレート: 対象ハードウェアで安定した 60fps を維持します。
- GC 割り当て: メインのゲームプレイループで、フレームごとの割り当てを 0 バイトにします。
- ドローコール: 適切にバッチ処理します(Frame Debugger で確認してください)。
- 読み込み時間: シーンやアセットの読み込みには非同期読み込みを使います。
コードアーキテクチャ:
- 疎結合: システム間の通信にはイベントやインターフェースを使い、強い依存関係を避けます。
- クリーン: 500 行を超える「巨大なクラス」がないことを確認します。
- バージョン管理: 大容量バイナリ(テクスチャ、オーディオ)は Git LFS で管理します。
UX/仕上げ:
- 操作: 入力の再割り当てに対応します。
- UI: さまざまなアスペクト比(16:9、21:9、モバイルのノッチ)に合わせて正しく拡大縮小します。
- フィードバック: すべてのプレイヤー操作に音声/視覚的な合図(演出)を用意します。
例
例 1:2D プラットフォーマーゲームの開発
シナリオ: 物理ベースのゲームプレイを採用した、商用 2D プラットフォーマーを開発します。
実装:
- 物理演算:操作性の高いプラットフォーマー向けにカスタム物理エンジンを用意します
- アニメーション:ステートマシンを使ったスプライトベースのアニメーション
- レベルデザイン:プロシージャル要素を含むタイルマップベースのレベル
- オーディオ:アダプティブミュージックを備えた空間オーディオシステム
技術的なアプローチ:
# Character controller pattern
class PlayerCharacter:
def update(self, dt):
input = self.input_system.get_player_input()
velocity = self.physics.apply_gravity(velocity, dt)
velocity = self.handle_movement(input, velocity)
displacement = self.physics.integrate(velocity, dt)
self.handle_collisions(displacement)
self.animation.update_state(velocity, input)
例 2:VR 体験の開発
シナリオ: Oculus/Meta Quest 向けに没入感のある VR 体験を制作します。
VR の実装:
- 移動方式:テレポートとスムーズな移動の選択肢
- インタラクション:ジェスチャー認識に対応したハンドトラッキング
- 最適化:シングルパスステレオレンダリング
- 快適性:敏感なユーザー向けの快適モードの選択肢
主な検討事項:
- 快適性を保つため、最低 72Hz のフレームレートを確保します
- 設計時に乗り物酔いを避けます
- リアルなインタラクションを実現するハンド物理演算
- スタンドアロンヘッドセットのバッテリーを最適化します
例 3:マルチプレイヤーのバトルロイヤル
シナリオ: 100 人のプレイヤーが参加する、競技性の高いマルチプレイヤーゲームを開発します。
マルチプレイヤーアーキテクチャ:
- ネットワーキング: サーバーによる再調整を備えたクライアント側予測
- ラグ補償: 補間と外挿の手法
- アンチチート: サーバー側の検証、不正行為の検出
- マッチメイキング: キューを最適化したスキルベースのマッチメイキング
ベストプラクティス
ゲーム開発
- コアループを最優先: ゲームプレイのコアループをプロトタイプ化し、改善します
- モジュール型アーキテクチャ: 保守性を高めるため、システムを疎結合にします
- パフォーマンス予算の設定: パフォーマンス目標を定義し、監視します
- データ駆動型設計: ゲームバランスの調整には設定ファイルを使います
- バージョン管理: 大容量のバイナリアセットを適切に管理します
物理と移動
- 決定性:ネットワーク対戦ゲームで一貫した物理挙動を確保します
- 衝突検出:誤検知を最小限に抑えるよう最適化します
- キャラクターコントローラー:物理挙動とキャラクターのロジックを分離します
- ラグドール物理:死亡アニメーションやインタラクションに使用します
- パフォーマンス:物理演算の更新時間を計測し、必要に応じて最適化します
グラフィックスとレンダリング
- バッチ処理:描画コールをまとめ、GPU の効率を高めます
- 詳細度:モデルとテクスチャに LOD を実装します
- シェーダー:シェーダーの複雑さを最適化し、共有マテリアルを使用します
- ライティング:品質とパフォーマンスのバランスを取り、ベイク済みライティングを使用します
- ポストプロセス:選択的に適用し、GPU への影響を計測します
オーディオの実装
- 空間オーディオ:没入感を高める 3D 位置設定
- アダプティブミュージック:ゲームプレイに応じて変化するサウンドトラック
- パフォーマンス:大容量のオーディオファイルはストリーミングし、効果音はプール化します
- 圧縮:適切なオーディオ圧縮形式を使用します
- アクセシビリティ:視覚的なフィードバックの代替として、音声による合図を提供します
テストと品質
- プレイテスト:フィードバックを得るため、定期的にプレイテストを実施します
- パフォーマンスプロファイリング:フレームレート、メモリ、読み込み時間を監視します
- プラットフォームテスト:開発用マシンだけでなく、対象のハードウェアでもテストします
- アクセシビリティ:アクセシビリティ機能を最初から実装します
- ローカライズ:早い段階から海外市場を視野に入れます