항목 | 내용 |
---|---|
📅 작업 기간 | 2024.05.09 ~ 2024.06.03 (약 1개월) |
🎮 장르 | 3인칭 액션 RPG |
💻 개발 언어 | C# |
👥 팀 구성 | 개인 프로젝트 |
🧩 담당 파트 | 플레이어 시스템 / 적 AI 시스템 |
🛠️ 개발 엔진 | 유니티 엔진 |
GitHub | GitHub - YEAHWA1010/DarkCity: DarkCity |
https://www.youtube.com/watch?v=1by5lFuz6O8
Player , Enemy : Character
, AI_PATORL , AI_ RANGE : AIController
Animator
, Rigidbody
, StateComponent
, HealthPointComponent
, WeaponComponent
PlayerInput
, PlayerMovingComponent
Character
: 공통 바디(애니메이터/리짓바디 참조, 루트모션 적용, 일시정지 등록)Player
: 인풋 액션 → 무기 모드 전환/액션 트리거 바인딩PlayerMovingComponent
: 이동/카메라 회전, 달리기/회피, 상태 변화 대응StateComponent
: Idle/Equip/Action/Evade/Damaged/Dead 상태머신 + 이벤트WeaponComponent
: 무기 테이블 생성/장착/행동, 애니메이터 파라미터 동기화HealthPointComponent
: HP, 플레이어/적 UI 바인딩classDiagram
direction LR
%% ===== Core Classes =====
class Character {
<<abstract>>
+Animator animator
+Rigidbody rigidbody
+StateComponent state
+HealthPointComponent healthPoint
+WeaponComponent weapon
+Start_FrameDelay()
+OnAnimatorMove()
}
class Player {
+PlayerInput input
+PlayerMovingComponent moving
}
class Enemy {
+AIController aiController
+OnDamage(attacker, causer, hitPoint, data)
}
class StateComponent {
+SetIdleMode()
+SetEquipMode()
+SetActionMode()
+SetEvadeMode()
+SetDamagedMode()
+SetDeadMode()
+OnStateTypeChanged
}
class HealthPointComponent {
-maxHealthPoint : float
-currHealthPoint : float
+Damage(amount : float)
+Dead : bool
}
class PlayerMovingComponent {
+Move()
+Stop()
+Evade
+SpeedX
+SpeedY
}
class IDamagable {
<<interface>>
+OnDamage(attacker, causer, hitPoint, data)
}
%% forward declarations so relations don't error
class Animator
class Rigidbody
class PlayerInput
class AIController
class WeaponComponent
%% ===== Inheritance =====
Character <|-- Player
Character <|-- Enemy
IDamagable <|.. Enemy
%% ===== Composition / Associations =====
Character *-- Animator : require
Character *-- Rigidbody : require
Character *-- StateComponent : require
Character *-- HealthPointComponent : require
Character *-- WeaponComponent : require
Player o-- PlayerInput : association
Player *-- PlayerMovingComponent : composition
Enemy *-- AIController : composition
classDiagram
direction LR
%% ===== Base Weapon =====
class Weapon {
<<abstract>>
+WeaponType type
+DoActionData[] doActionDatas
+Equip()
+UnEquip()
+DoAction()
+Begin_DoAction()
+End_DoAction()
+Play_Particle()
}
class Melee {
+Begin_Combo()
+End_Combo()
+Begin_Collision(e)
+End_Collision()
+Play_Impulse()
}
class Fist
class Sword
class Hammer
class FireBall
class Warp
class DoActionData {
+bCanMove : bool
+Power : float
+Distance : float
+StopFrame : int
+Particle : GameObject
+ImpulseDirection : Vector3
+HitImpactIndex : int
+HitParticle : GameObject
}
class Projectile {
+OnProjectileHit
}
class IDamagable {
<<interface>>
+OnDamage(attacker, causer, hitPoint, data)
}
%% ===== Inheritance =====
Weapon <|-- Melee
Melee <|-- Fist
Melee <|-- Sword
Melee <|-- Hammer
Weapon <|-- FireBall
Weapon <|-- Warp
%% ===== Associations =====
Weapon *-- DoActionData
FireBall *-- Projectile
Melee --> IDamagable : attack target