Open5
ビートセイバーのクローンを作る

全体のアーキテクチャ設計
- Prresentation
- UI / View(ゲーム画面・エフェクト)
- Infrastructure
- 外部リソース(データの保存・読み込み)
- UseCase
- ゲームロジック(処理の流れ)
- Domain
- データモデル・ルール(スコア、ノーツ管理など)

🎨 Presentation層
📌 役割
- UI・3Dオブジェクト・パーティクルエフェクトを描画
- ゲームプレイの入力を処理
- UseCaseから受け取ったデータを画面に反映
📦Infrastructure層
📌 役割
- データの読み書き
- オーディオ解析、シーンロード、ログ管理
- 外部APIとのやり取り
🎮UseCase層
📌 役割
- ゲームの進行に関するロジックを処理
- Domainのデータを取得し、Presentationに渡す
💾Domain層
📌 役割
- スコアやノーツのデータを定義
- 各エンティティの状態管理(スコア、コンボ、音量など)
- UseCaseに必要な計算やデータ処理を提供

💡 設計の特徴
Onion Architecture
- 各レイヤーを明確に分けた
- UseCaseはDomainのみ依存
DI(依存性注入)
- Zenject を使いコンストラクタに依存関係を注入
非同期処理 & リアクティブプログラミング
- UniTaskを活用し非同期処理を管理
- UniRxでスコアやコンボのリアルタイム更新を実装
VR
- MRTK3(XR Intaraction ToolkitXR Interaction Toolkit)によるVR表現

機能
🎮️コアゲームプレイ
- ノーツのスポーン
- 譜面に従ってノーツを生成
- ノーツの移動
- ノーツがプレイヤーに向かって移動
- スライス処理
- 剣の軌跡を検出し、ノーツをスライス
- スライスエフェクト
- ノーツを斬った際にパーティクルエフェクトを表示
- 剣の軌跡描画
- 動的にメッシュを生成して剣の軌跡を表示
- コンボ判定
- 連続でノーツをスライスするとコンボが加算
- スコア計算
- 正確にノーツをスライスするとスコア加算
🎶オーディオ関連
- 音楽の再生
- ゲームプレイ中に音楽を再生
- スペクトラム解析
- 音楽の周波数解析
- オーディオビジュアライザー
- オブジェクトの動的なサイズ変更や回転
- マテリアルやライトの動的な色変更
- スライス時のサウンドエフェクト
- ノーツをスライスすると効果音を再生
- 音量設定
- BGM / SE の音量を変更
💾データ管理
- ノーツデータの読み込み
- JSON ファイルからノーツデータをロード
- スコアの保存 & 読み込み
- JSON ファイルにプレイヤーのスコアデータを保存
- 音量設定の保存 & 読み込み
- JSON ファイルにBGM / SE の音量を保存
- ゲームのパラメータ
- ScriptableObjectから設定をロード
📺UI/UX
- スコア表示
- スコアをリアルタイムで表示
- コンボ表示
- コンボ数をリアルタイムで表示
- プログレスバー
- 曲の進行度を表示
🕶VR
- 視点移動
- 視点の移動に合わせてカメラを動かす
- コントローラーのトラッキング
- コントローラーの移動に合わせてセイバーを動かす
- ハプティックフィードバック
- ノーツを斬った際にコントローラーを振動させる