언리얼 엔진5 Advanced - 캐릭터 공격 구현 개선

타입·2025년 4월 4일
0

언리얼 강의

목록 보기
32/47

캐릭터 공격 구현의 개선

캐릭터 공격 구현의 문제점

클라이언트의 모든 행동은 서버를 거친 후에 수행되도록 설계되어 있음

통신 부하가 발생하는 경우 사용자 경험이 나빠짐
만약 통신렉이 심한 경우 사용자의 공격 입력 후 애니메이션 재생이 늦어지거나, 시각적으로 보여지는 판정 타이밍이 클라이언트와 서버가 일치하지 않을 수 있음

의도적으로 패킷 랙을 발생시킨 후 이의 결과를 확인

  • DefaultEngine.ini
    0.5초 딜레이 발생
[PacketSimulationSettings]
PktLag=500

기존에 구현한 공격 기능의 리뷰

랙이 발생하는 경우 클라이언트의 반응이 많이 느려지는 문제가 발생

클라이언트->서버 전송시간 + 서버->클라이언트 전송시간 발생
입력 후 서버의 응답이 오기까지 대기하는 상황 발생

캐릭터 공격 구현의 개선

  • 기본 원칙
    1. 클라이언트의 명령은 Server RPC를 사용한다.
    2. 중요한 게임 플레이 판정은 서버에서 처리한다.
    3. 게임 플레이에 영향을 주는 중요한 정보는 프로퍼티 리플리케이션을 사용한다.
    4. 클라이언트의 시각적인 효과(Cosmetic)는 Client RPC와 Multicast RPC를 사용한다.
  • 개선점
    클라이언트에서 처리할 수 있는 기능은 최대한 클라이언트에서 직접 처리하여 반응성을 높인다.
    최종 판정은 서버에서 진행하되 다양한 로직을 활용해 자세하게 검증한다.
    네트워크 전송을 최소화한다.

개선된 공격 기능의 설계

클라이언트의 반응성을 개선하고 서버에서는 클라이언트의 요청을 검증을 통해 구현

클라이언트에서 공격 입력 시 애니메이션 재생 및 Server RPC 호출
서버에서 Server RPC 실행 시 애니메이션 재생하여 서버와 클라이언트의 재생 타이밍은 다름
시간 정보를 활용하여 동기화 처리

클라이언트에서 서버로 공격 판정 요청 후 서버에서 검증하여 대미지 처리

실습코드

https://github.com/dnjfs/ArenaBattle_Network/commit/a51aafccd9014e281f69964fff36e83b735e2033

  • 클라이언트의 공격 애니메이션 즉시 재생
    클라이언트에서 공격 시 PlayAttackAnimation() 즉시 실행
    서버와 다른 클라이언트는 RPC를 통해 재생됨
    bCanAttack을 클라이언트에서도 변경할 수 있게 됨 (추후 시간 정보로 Validate 검증)

  • AttackHitCheck() 개선
    클라이언트에서 실행 시 서버에서 검증하도록 Server RPC 호출, HitResult와 시간 정보를 넘겨주어 서버에서 검증
    서버에서 실행 시 바로 처리
    AttackHitConfirm()에서 최종 데미지 처리

  • 패킷 최적화
    벡터의 정밀도에 따라 FVector_NetQuantize 구분하여 사용
    실행될 필요 없는 클라이언트에 대해선 RPC 호출 패스

  • FVector_NetQuantize
    벡터 정보를 압축하여 전송, 어느정도 오차는 발생할 수 있음
profile
주니어 언리얼 프로그래머

0개의 댓글