Three.js (CDN) + 素の HTML/CSS/JavaScript だけで実装した、GitHub Pages でそのまま動く 3D TPS シューティングです。
/
├─ index.html
├─ style.css
├─ README.md
├─ assets/
│ └─ .gitkeep
└─ src/
└─ main.js
クリック: ポインタロック / エイム開始W A S D: 移動Shift: スプリントCtrl: しゃがみSpace: ジャンプ左クリック: 射撃(ヒットスキャン)R: リロードEnter: 死亡後リスタート
- 肩越し 3D TPS カメラ(慣性スムージングあり)
- WASD/ジャンプ/しゃがみ/スプリント
- 左クリック射撃(ヒットスキャン)
- 反動(カメラキック)と拡散
- HP、被弾、死亡→リスタート
- 敵AI(巡回→追跡→攻撃→遮蔽物移動)
- 屋外ステージ(地面、遮蔽物、建物風ボックス)
- UI(クロスヘア、HP、弾数、キル数、状態)
- 演出
- 銃口フラッシュ
- 着弾パーティクル
- ヒットマーカー
- 被弾ビネット
- 画面揺れ
- フットステップ/射撃/ヒット/被弾SE(WebAudio合成、追加アセット不要)
- 簡易ポストプロセス風オーバーレイ(スキャンライン/色収差風)
- このリポジトリを GitHub に push
- GitHub の
Settings→Pages Build and deploymentをDeploy from a branchに設定- Branch を
main(または利用ブランチ) / Folder を/ (root)に設定 - 数分後、発行された URL にアクセス
静的ファイルのみで構成されているため、Pages でそのまま動作します。
src/main.js に以下責務を分離して実装しています。
GameState- プレイヤーHP、弾数、キル数などのゲーム状態を保持
NetAdapter- 将来のマルチ化を見据えた通信境界(現状は no-op 実装)
AudioSystem- WebAudio による効果音生成
TPSGame- レンダリング、入力、カメラ、プレイヤー制御、射撃、敵AI、UI同期
GitHub Pages 単体では常時接続サーバがないためリアルタイムマルチは不可です。 将来の拡張は次の順序を想定しています。
- 状態同期のDTO定義
GameStateからネットワーク送受信に必要な最小スナップショットを抽出
NetAdapterの具体実装を追加WebSocketNetAdapterを新規作成connect/send/onMessageを実装
- 権威サーバ方式に移行
- 命中判定・ダメージ計算をサーバ側で処理
- 補間/予測の導入
- リモートプレイヤーの補間表示
- ローカル操作のクライアント予測
- マッチ/ルーム管理追加
- ルームID・再接続処理・簡易チート対策
これによりフロントエンド静的配信(Pages)を維持しながら、別ホストの WebSocket サーバを追加して段階的にマルチ化できます。