image.png

🔖 목차

📌 프로젝트 개요

항목 내용
📅 작업 기간 2024.05.09 ~ 2024.06.03 (약 1개월)
🎮 장르 3인칭 액션 RPG
💻 개발 언어 C#
👥 팀 구성 개인 프로젝트
🧩 담당 파트 플레이어 시스템 / 적 AI 시스템
🛠️ 개발 엔진 유니티 엔진
GitHub GitHub - YEAHWA1010/DarkCity: DarkCity

📺 게임 영상

https://www.youtube.com/watch?v=1by5lFuz6O8


한눈에 구조 요약


🗂️ 시스템 구조도

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


무기 (Weapon) 구조도

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


적(AI) 시스템 구조도