Forever Planet
서비스 종료된 넥슨 <에버플래닛>을 참고한 Globe View 2.5D RPG
01 · 프로젝트 개요
구면(Globe) 형태의 월드 위에서 이동하고 전투하는 2.5D RPG입니다. Dedicated Server 기반 멀티플레이를 목표로 설계했습니다.
02 · GAS 기반 전투 시스템
AbilitySystemComponent와 AttributeSet으로 전투 수치를 관리하고, GameplayAbility 단위로 스킬을, GameplayEffect로 데미지·쿨다운을 적용했습니다. 새 능력을 추가해도 기존 코드 수정이 최소화되도록 모듈 단위로 분리했습니다.
03 · 서버 권한 기반 판정으로 전환 핵심
초기에는 공격 판정과 피격 연출을 함께 Multicast로 전파했습니다. 각 클라이언트가 판정을 독립 처리하면 상태 일관성을 보장할 수 없다고 판단해 구조를 바꿨습니다.
- 피격 처리 Ability에
NetExecutionPolicy = ServerOnly지정, 진입부에HasAuthority가드 적용 - 확정된 Health는
ReplicatedUsing = OnRep_Health로 각 클라이언트에 전달 Multicast는Multicast_SetHitColor(피격 색)·Multicast_SetKnockback(넉백) 등 연출 전용으로 역할 축소
04 · OnRep 서버 미호출 문제
bIsAttacking에 ReplicatedUsing을 걸어 애니메이션을 재생했으나 서버 화면에서만 동작하지 않았습니다. OnRep은 값을 수신하는 쪽에서 호출되므로, 값을 직접 변경하는 서버에서는 실행되지 않음을 확인했습니다. SetIsAttacking에서 콜백을 직접 호출해 서버·클라이언트 동작을 일치시켰습니다.
05 · 멀티플레이 검증
Dedicated Server에 다중 클라이언트를 접속시켜 전투 상태와 액터 소멸이 모든 클라이언트에서 일치하는지 확인했습니다.
06 · 중복 발동 차단
공격이 반복 입력되는 문제를 Cooldown.Attack 태그와 ActivationBlockedTags로 차단해, 쿨다운 중 재발동을 막았습니다.



