【Unity】アクションRPGクラス図
UnityでアクションRPGを作成した時のおおまかなクラス図になります
UMLクラス図
集約:has-aの関係(弱い結びつきで、なくても成り立ちます)
コンポジション:has-aの関係(強い結びつきでないと成り立ちません)
クラス説明
Mob (Moving Objectの略):移動するオブジェクトでプレイヤーや敵がそれにあたります
クラス名 | 説明 |
CollisionDetector | 汎用性のある当たり判定 |
PlayerController | プレイヤーの移動 前方後方、左右の動きとジャンプの動きを記述 |
EnemyMove | エネミーの移動 NavMeshでプレイヤーを追いかけてくる 自分のエリアに入ってきて、かつ見えている時だけ |
MobStatus | Mobの状態管理の基底クラス プレイヤーと敵で共用されます 状態としては、(通常、攻撃中、死亡)があり、列挙型で管理しています また、移動可能か、攻撃可能かの管理や残りのライブの管理が含まれています また、ダメージを受けた時の処理も記述されています |
EnemyStatus | 敵の状態管理 敵の動きによるアニメーションの繊維や、やられた時の処理を記述 |
PlayerStatus | プレイヤーの状態管理 |
MobAttack | プレイヤーと敵の攻撃管理 OnAttackStart()とOnAttackFinished()はアニメーションから呼ばれるイベント OnAttackRangeEnter()は敵が攻撃エリア内の入ってきたら呼ばれるイベントで、CollisionDetectorで登録する OnHitAttack()は、攻撃した時に当たった場合に呼ばれるイベントで、同じくCollisionDetctorで登録する |
Spawner | 敵をスポーン(発生)させる |
シーケンス図
PlantUMLコード
クラス図
@startuml
!define Arrow1 solid
!define Arrow2 open
!define AbstractClass abstract
class CollisionDetector {
+ OnTriggerEnter(Collider other)
+ OnTriggerStay(Collider other)
}
class TriggerEvent {
+ UnityEvent<Collider>
}
CollisionDetector *-- TriggerEvent : コンポジション
class EnemyMove {
- NavMeshAgent _agent
- RaycastHit[] _raycastHits
- EnemyStatus _status
+ Start()
+ OnDetectObject(Collider collider)
}
EnemyMove *-- NavMeshAgent : 集約
EnemyMove *-- RaycastHit : 集約
EnemyMove *-- EnemyStatus : 集約
class EnemyStatus {
- NavMeshAgent _agent
+ Start()
+ Update()
+ OnDie()
- IEnumerator DestroyCoroutine()
}
EnemyStatus --|> MobStatus : 継承
class MobStatus {
+ Start()
+ OnDie()
+ Damage(int damage)
+ GoToAttackStateIfPossible()
+ GoToNormalStateIfPossible()
}
class PlayerController {
- CharacterController _characterController
- Transform _transform
- Vector3 _moveVelocity
- PlayerStatus _status
- MobAttack _attack
+ Start()
+ Update()
}
PlayerController *-- CharacterController : 集約
PlayerController *-- Transform : 集約
PlayerController *-- Vector3 : 集約
PlayerController *-- PlayerStatus : 集約
PlayerController *-- MobAttack : 集約
class MobAttack {
- MobStatus _status
+ Start()
+ AttackIfPossible()
+ OnAttackRangeEnter(Collider collider)
+ OnAttackStart()
+ OnHitAttack(Collider collider)
+ OnAttackFinished()
- IEnumerator CooldownCoroutine()
}
MobAttack *-- MobStatus : 集約
class PlayerStatus {
}
PlayerStatus --|> MobStatus : 継承
class Spawner {
- PlayerStatus playerStatus
- GameObject enemyPrefab
+ Start()
- IEnumerator SpawnLoop()
}
Spawner *-- PlayerStatus : 集約
Spawner *-- GameObject : 集約
@enduml
シーケンス図
@startuml
actor Player
actor Collider
participant CollisionDetector
participant EnemyMove
participant EnemyStatus
participant MobStatus
participant PlayerController
participant MobAttack
participant Spawner
Player -> CollisionDetector: OnTriggerEnter(Collider)
Player -> CollisionDetector: OnTriggerStay(Collider)
CollisionDetector -> EnemyMove: OnDetectObject(Collider)
EnemyMove -> EnemyStatus: Update()
EnemyStatus --> MobStatus: OnDie()
MobStatus --> MobStatus: Damage(int damage)
MobStatus --> MobStatus: GoToAttackStateIfPossible()
MobStatus --> MobStatus: GoToNormalStateIfPossible()
Player -> PlayerController: Update()
PlayerController -> MobAttack: AttackIfPossible()
MobAttack -> MobStatus: AttackIfPossible()
MobAttack -> MobAttack: OnAttackRangeEnter(Collider collider)
MobAttack -> MobAttack: OnAttackStart()
MobAttack --> MobStatus: OnAttackFinished()
Player -> Spawner: Start()
Spawner --> PlayerStatus: SpawnLoop()
PlayerStatus --> MobStatus: Inherits
Spawner --> GameObject: SpawnLoop()
@enduml
ディスカッション
コメント一覧
まだ、コメントがありません