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