PlantUML図

目的

  • クラスの責務・依存関係を明確化
  • 典型的な Unity アクション(OnTriggerEnter、入力、生成・破棄、効果音再生)をクラス図・シーケンス図・アクティビティ図で俯瞰
  • 仕様の“抜け漏れ”を早期に発見しやすくする

ゲーム概要(要約)

  • プレイヤーはバスケットを左右に動かし、Apple(加点)をキャッチ、Bomb(減点/ライフ減)を避ける
  • りんご/爆弾はItemSpawnerから一定間隔で落下
  • 当たり判定はトリガーで検知(OnTriggerEnter)
  • 効果音は AudioSource+AudioClip で再生
  • スコア・ライフ管理はGameDirectorが一元管理

主要コンポーネントと責務

  • BasketController:バスケットの移動・入力処理、OnTriggerEnter で衝突物のタグを判定して Director に通知、効果音再生
  • GameDirector:ゲーム状態(スコア、ライフ、ゲームオーバー)管理、UI 更新
  • ItemController:落下速度など“落下物の共通挙動”を提供(Apple・Bomb の基底)
  • Apple / Bomb:ItemController を継承したプレハブ。tag で識別
  • ItemGenerator:一定間隔で Apple/Bomb を生成
  • AudioSource / AudioClip:効果音再生(Apple 取得音、Bomb 被弾音)

クラス図

  • BasketController は OnTriggerEnter 内で other.gameObject.tag を判定し、Appleなら GetApple()、それ以外(= Bomb)なら GetBomb() を呼びます。
  • りんご/爆弾は ItemController を継承して同じ落下ロジックを共有。タグ見た目だけを変えると、コードが単純になります。
  • AudioSource / AudioClip は BasketController から参照(インスペクタでアサイン)。

ゲーム進行(アクティビティ図)

衝突時フロー(シーケンス図)

  • トリガーで“めり込み衝突”を扱いやすく、破壊(Destroy)まで一連で処理。
  • 効果音は Basket 側から鳴らすことで“操作に対する即時フィードバック”を担保。
  • 状態管理は Director に集約(スコア、ライフ、UI 更新)。

実装メモ(Unity 設定チェックリスト)

  1. タグ設定
    • Apple プレハブ:tag = “Apple"
    • Bomb プレハブ:tag = “Bomb" または既定の Untagged を “爆弾扱い”とする実装でも可(ただし明示タグ推奨)
  2. コライダーとトリガー
    • Basket 側:Trigger を受け取るためにIsTrigger=true の Collider を設定
    • Item 側:Rigidbody(重力)、Collider(通常)
    • 2D なら Collider2D/Rigidbody2D、メソッドも OnTriggerEnter2D に読み替え
  3. オーディオ
    • BasketController の AudioSource をアタッチ
    • appleSE / bombSE に AudioClip をアサイン
  4. 参照の取得
    • GameDirector は GameObject.Find(“GameDirector") → GetComponent()
      • 可能なら SerializeField で直接参照(Find 依存を減らし、リネーム耐性向上)
  5. 破壊タイミング
    • Destroy(other.gameObject) は効果音再生後でも OK(効果音は Basket の AudioSource から鳴っているため)
  6. パフォーマンス
    • 生成/破壊が多いなら Object Pooling で最適化を検討

よくある質問(抜粋)

  • Q: OnTriggerEnter の後で GetComponent は共通して使えますか?A: はい。other.GetComponent<XXX>() で衝突相手のコンポーネントにアクセスできます。用途:ItemController を止める、パーティクル再生など。
  • Q: Start と Update は全クラスに必須?A: いいえ。必要なクラスにのみ実装すれば十分です。ItemController は落下更新が要るので Update を持ちますが、純データ保持なら不要です。
  • Q: Apple と Bomb を別スクリプトにすべき?A: 共通挙動は ItemController に寄せ、違いは見た目/タグ/生成率などデータで表現するのがシンプルです。

拡張アイデア

  • 難易度スケーリング:経過時間に応じて dropSpeed を上げる、Bomb 比率を上げる
  • エフェクト演出:取得/被弾時にパーティクル(ParticleSystem)
  • UI 強化:コンボ、ハイスコア保存、ポーズ/再開
  • 入力切替:マウス/タッチ/新 Input System(Keyboard.current.spaceKey.wasPressedThisFrame 等)に段階対応

訪問数 4 回, 今日の訪問数 4回

C#

Posted by hidepon