'VALORITHM'은 5v5 택티컬 FPS 게임 '발로란트’를 모작하여 4vs4의 형태로 구현한 게임입니다. 본 프로젝트는 언리얼 엔진 5 환경에서 C++와 게임플레이 어빌리티 시스템(GAS) 을 중심으로 핵심 시스템을 구축했습니다. 특히 GAS를 기반으로 에이전트의 스킬 시스템을 모듈식으로 설계하여 확장성과 유지보수성을 확보했으며, 데이터 기반의 상점 및 경제 시스템을 구현하여 게임 밸런스 조절의 유연성을 높였습니다.
본 프로젝트에서 저는 게임플레이 시스템 프로그래머로서, 플레이어의 핵심 경험을 좌우하는 주요 기능들의 아키텍처 설계 및 구현을 담당했습니다. 특히 GAS
를 활용한 확장 가능한 스킬 시스템, 네트워크 동기화된 상점/경제 시스템, 그리고 FPS의 핵심인 1/3인칭 뷰 처리와 복합적인 스킬 매커니즘 개발에 중점을 두었습니다.
게임플레이 시스템 프로그래머 (Gameplay Systems Programmer)
총괄: GAS(Gameplay Ability System) 기반 핵심 게임플레이 아키텍처 설계
본 프로젝트의 가장 핵심적인 스킬 및 캐릭터 상호작용 시스템을 언리얼 엔진의 Gameplay Ability System(GAS)을 기반으로 설계하고 총괄 구현했습니다. 이는 단순한 스킬 구현을 넘어, GAS의 주요 컴포넌트들을 적극적으로 활용하여 확장 가능하고 데이터 기반의 유연한 아키텍처를 구축하는 것을 목표로 했습니다.
UBaseGameplayAbility
, ABaseProjectile
등)에 구현하고, VFX/SFX 에셋 할당이나 수치 조절 등 잦은 변경이 필요한 요소는 블루프린트에서 처리할 수 있는 하이브리드 프레임워크를 구축했습니다. 이를 통해 프로그래머는 핵심 로직에, 기획/아티스트는 시각적 표현에 집중할 수 있는 효율적인 협업 환경을 만들었습니다
[cite: Valorant/AgentAbility/BaseProjectile.h, Valorant/AgentAbility/BaseGround.h].UBaseGameplayAbility
): 모든 스킬의 공통 기반이 되는 UBaseGameplayAbility
를 설계하여, 상태 머신, 다양한 입력 방식, 네트워크 동기화 로직을 내재화했습니다. 특히 어빌리티의 상태(Preparing
, Waiting
등)와 연계하여 플레이어의 입력을 동적으로 제어하는 지능형 입력 시스템을 설계하여, '후속 입력'과 같은 복잡한 조작시스템을 구현했습니다.
[cite: Valorant/AbilitySystem/Abilities/BaseGameplayAbility.h, Valorant/Player/Component/AgentInputComponent.cpp].AbilitySystemComponent
): 캐릭터의 능력치를 관장하는 UAbilitySystemComponent
(ASC)를 커스터마이징(UAgentAbilitySystemComponent
)하여, PlayerState
로부터 데이터를 받아 캐릭터 생성 시점에 적절한 어빌리티들을 부여하고, 속성(Attribute) 변화에 즉각적으로 반응하며, 후속 입력과 같은 복합적인 입력 이벤트를 해당 어빌리티에 정확히 전달하는 등, 캐릭터의 모든 능력을 중앙에서 관리하고 제어하는 핵심 허브를 구현했습니다
[cite: Valorant/AbilitySystem/AgentAbilitySystemComponent.cpp].GameplayTag
& GameplayEffect
): '제압', '치유 중'과 같은 모든 캐릭터의 상태를 GameplayTag
로 관리하고, 피해/치유, 버프/디버프 등 모든 수치적 변화를 GameplayEffect
로 처리하여, 모든 상호작용을 데이터 기반으로 명확하고 일관되게 관리했습니다.
[cite: Valorant/AbilitySystem/ValorantGameplayTags.h].GameplayEffect
): '제압', '스킬 사용 중'과 같은 모든 캐릭터의 상태를 GameplayTag
로 관리하고, 피해/치유, 버프/디버프 등 모든 수치적 변화를 GameplayEffect
로 처리하여, 모든 상호작용을 데이터 기반으로 명확하고 일관되게 관리했습니다.
[cite: Valorant/AbilitySystem/ValorantGameplayTags.h].GameplayTask
): UPlayMontageWithEvent
와 같은 커스텀 GameplayTask
를 구현하여, "애니메이션 재생이 특정 지점에 도달하면 투사체를 발사"하는 것과 같이 애니메이션과 게임 로직을 정교하게 동기화하는 비동기 로직을 구현했습니다
[cite: Valorant/AbilitySystem/Tasks/PlayMontageWithEvent.cpp].데이터 기반 상점 및 경제 시스템 개발: UCreditComponent
와 UShopComponent
를 통해 라운드 결과, 킬/데스에 따른 크레딧 획득 및 아이템 구매 로직을 서버 권위적으로 구현했습니다. 특히, 데이터 테이블을 통해 상점 UI를 동적으로 생성하고, 서버-클라이언트 간 명확한 피드백 루프를 구축하여 안정적인 구매 경험을 제공했습니다
[cite: Valorant/Player/Component/ShopComponent.cpp, Valorant/Player/Component/CreditComponent.cpp, Valorant/UI/MatchMap/MatchMapShopUI.cpp].
전술적 핵심 오브젝트 '스파이크' 시스템 구현: 게임의 승패를 결정하는 스파이크의 상태(ESpikeState
) 머신을 설계하고, 공격/수비팀에 따른 각기 다른 상호작용과 '반 해체'와 같은 세부 규칙까지 서버-클라이언트 환경에서 안정적으로 동작하도록 개발했습니다
[cite: ValorantObject/Spike/Spike.cpp].
몰입형 플레이어 시스템 설계:
Multicast RPC
를 통해 모든 플레이어에게 중요한 사운드 효과를 제공하는 명확한 원칙을 수립하고 구현했습니다.