Skip to content

SoeunNam/NEOBLADE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

⚔️ NEOBLADE

Unreal Engine 5.6 기반 사이버펑크 소울라이크 액션 (Cyberpunk Soulslike Action)
"끊임없는 공방과 패링, 정교한 보스 패턴 파훼가 핵심인 3인칭 액션 게임"

image



📝 Project Overview (프로젝트 개요)

개발 기간: 2025.11 ~ 2025.12 (약 2개월)

개발 인원: 4인 팀 프로젝트 (Team Leader / Main Programmer)

담당 역할

PM: 전체 일정 관리, Merge 관리

Main Dev: 보스 FSM 설계, 전투 시스템(피격/타격/패링) 구현, 애니메이션 동기화 로직

개발 환경: Unreal Engine 5.6, Visual Studio 2022 (C++)

핵심 키워드: Soulslike, Boss Raid, FSM AI, Optimization

📺 Gameplay Video

https://www.youtube.com/watch?v=PI-EuBqusoE

⚙️ Key Features & Tech Stack (핵심 기술 구현)

  1. C++ 기반 보스 AI 아키텍처 (FSM without Behavior Tree)

    Pure C++ State Machine
    : Behavior Tree의 오버헤드를 줄이고,
    프레임 단위의 정교한 판정을 위해 C++ Enum과 Tick 기반의 FSM(Finite State Machine)을 직접 설계했습니다.

    State Pattern
    : Idle ↔ Jog ↔ Attacking ↔ PhaseChange 등 상태 전환 조건을 명확히 분기하여, 예측 불가능한 버그를 최소화했습니다.

    Phase Transition
    : HP 트리거에 따른 페이즈 전환(Phase 1 → 2) 및 드론 소환 패턴을 구현하여 전투의 흐름을 다변화했습니다.


  2. 정교한 전투 시스템 (Combat Logic & Game Feel)

    Motion Warping (보간 회전)
    : FMath::RInterpTo를 활용하여 타겟을 향해 부드럽게 회전하는 보정 로직을 적용, 공격의 적중률과 시각적 자연스러움을 동시에 확보했습니다.

    Action Interrupt System
    : 패링(Parry)이나 스턴(Stun) 발생 시, StopAllMontages와 StopMovementImmediately를 통해 현재 진행 중인 공격/이동을 즉시 캔슬하는 반응형 전투 시스템을 구축했습니다.

  3. 시스템 최적화 및 모듈화 (System Optimization)

    Hitbox Component Reuse
    : 스킬마다 별도의 콜라이더를 생성하는 대신, 단일 히트박스 컴포넌트를 재사용하며 CurrentActiveHitBoxSkill 상태값에 따라 데미지 공식만 변경하는 모듈형 구조를 채택했습니다.

    Memory Efficiency
    : 불필요한 컴포넌트 생성/파괴 비용을 절감하고, 유지보수 효율을 높였습니다.

🛠️ Trouble Shooting (문제 해결)

애니메이션 상태 동기화 (Animation State Synchronization)
문제 상황 (Issue) 공격 후 쿨타임 로직이 있음에도 불구하고,
AnimNotify와 실제 몽타주 종료 시점 사이의 미세한 갭(Gap) 사이로 Tick 함수가 침투하여 공격이 중복 실행되거나 모션이 튀는(Stuttering) 현상이 발생했습니다.

해결 방법 (Solution) '이중 상태 체크(Double State Check)' 패턴을 도입하여 해결했습니다.

논리적 변수(bIsAttacking) 확인에 앞서, 엔진 레벨의 상태(IsAnyMontagePlaying())를 먼저 검증하는 Guard Clause를 추가했습니다.

물리적인 애니메이션 재생 상태와 논리적인 상태 변수를 강제로 일치시켜 전투의 안정성을 확보했습니다.



C++

// Boss1.cpp - 공격 함수 내부
void ABoss1::UseNormalAttack()
{
    // [해결책] 실제 몽타주 재생 여부를 먼저 체크하여 중복 실행 원천 차단
    UAnimInstance* AnimInst = GetMesh()->GetAnimInstance();
    if (AnimInst && AnimInst->IsAnyMontagePlaying())
    {
        return; 
    }

    // 이후 논리적 플래그 체크
    if (bIsAttacking) return;
    
    // 공격 실행 로직...
}



📂 Source Code Structure

ABoss1: 보스 몬스터의 핵심 AI 로직, FSM, 패턴 실행 담당.

BossHitReactionComponent: 피격/스턴 처리 분리.

BossHealthComponent: 체력 관리 및 페이즈 전환 트리거 체크.

PlayerCharacter: 플레이어의 입력, 공격, 패링 로직 포함.

📬 Contact

Email: namsoeun012@gmail.com

Portfolio: https://www.notion.so/NEOBLADE-2d2ace35570380d3b698f066d35fe44a?source=copy_link

About

Unreal5.6 project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages