Unity × UMLで理解する「AppleCatch」
サンプル実装に直結する設計ドキュメント
目次
TL;DR
- 何がどのクラスの責務か、どこで衝突・生成・効果音・スコア更新が起こるかを、クラス図/コンポーネント図/ユースケース/状態遷移/アクティビティ/シーケンスで一望。
- そのまま実装できる設定チェックリストと最低限のコード断片付き。
- クラス図の見直しポイントも併記(Updateの要否、参照取得の方針など)。
1. 目的
- クラスの責務分担と依存関係を明確化
- Unityの典型処理(OnTriggerEnter、生成・破棄、SE再生)をUMLで俯瞰し、漏れを早期発見する。
2. ゲーム概要(要約)
- プレイヤーはバスケットを左右に操作し、Appleを取ってスコア加算、Bombを避けてライフ減を防ぐ
- ItemGeneratorが一定間隔でりんご/爆弾を落下させる
- 当たり判定はトリガー(OnTriggerEnter)
- SEはAudioSource+AudioClip、スコア・ライフはGameDirectorで集中管理。
3. 主要コンポーネントと責務
- BasketController:入力・移動/OnTriggerEnterでタグ判定→GameDirectorへ通知/SE再生
- GameDirector:スコア・ライフ・UI更新
- ItemController:落下物の共通挙動(dropSpeed等)
- Apple / Bomb:ItemControllerのデータ差分(見た目・タグ・出現比率)
- ItemGenerator:一定間隔でApple/Bombを生成。
4. 図で把握する
4.1 クラス図(ライフサイクル入り)

要点:BasketControllerはOnTriggerEnterでタグを見てGetApple/GetBombを呼び、SEを再生。ItemGeneratorは生成とパラメータ設定。ItemControllerは落下の共通処理。
4.2 コンポーネント依存関係

BasketController→AudioSource/GameDirector、ItemGenerator→ItemController(Instantiate)など、シーン上の矢印関係を可視化。
4.3 ユースケース

プレイヤー操作 → Apple取得/Bomb回避 → スコア/ライフ更新。
4.4 状態遷移(ItemController)

生成→落下→捕捉→破棄(画面外・寿命破棄も許容)。
4.5 生成アクティビティ(ItemGenerator)

一定間隔で生成タイミング判定→Apple/Bomb選択→Instantiate→初速設定→ループ。
4.6 衝突時のシーケンス

OnTriggerEnter→タグ判定→SE→GetApple/GetBomb→(対象を)Destroy。
5. 実装ガイド(設定チェックリスト)
- タグ:Apple / Bomb を各Prefabに設定
- コライダー:Basket側はIsTrigger = true、Item側は通常Collider+Rigidbody(2Dなら対応API)
- オーディオ:BasketControllerにAudioSource、appleSE/bombSEを割当て
- 参照取得:GameDirectorはFindよりSerializeField直参照推奨(リネーム耐性)
- 破壊タイミング:SEはBasket側から鳴るため、Destroy(other.gameObject)は直後でOK
- 最適化:生成/破棄が多い場合はオブジェクトプーリング検討。
6. 最低限のコード断片(衝突処理)
void OnTriggerEnter(Collider other)
{
// 例: Apple / Bomb をタグで判定
if (other.gameObject.tag == "Apple")
{
audioSource.PlayOneShot(appleSE);
director.GetApple();
}
else
{
audioSource.PlayOneShot(bombSE);
director.GetBomb();
}
// 相手の追加処理(任意)
// var item = other.GetComponent<ItemController>();
// if (item != null) item.dropSpeed = 0;
Destroy(other.gameObject);
}
7. よくある質問(抜粋・要点)
- OnTriggerEnter後にGetComponentは使える? はい。相手コライダー側のコンポーネント取得が可能。
- 全クラスにStart/Updateは必要? 不要。必要なクラスのみに実装。
- Apple/Bombは別スクリプトに分ける? 振る舞いはItemControllerへ集約し、違いはデータで持つのがシンプル。
訪問数 19 回, 今日の訪問数 19回
ディスカッション
コメント一覧
まだ、コメントがありません