inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해

15강 PvP 게임의 완성

서버에서의 공격 동기화 질문입니다.

468

Peter Han

작성한 질문수 4

0

언리얼에서 얼마나 정확히 이러한 문제에 대해서 네트워크동기화를 잘 해주는지 모르겠어서 여쭈어봅니다.

주황 녹색 모두 서버(제3의 호스트 또는 데디케이티드서버)에 접속한 클라이언트입니다.

서버로의 핑은 200ms라 모두 가정하고

주황캐릭터가 움직이는 녹색 캐릭터를 공격하는 경우

내 클라이언트에서는 내 주황이 잘 조준해서(Line trace나 Collision overlay) 녹색을 맞추었는데

서버에서는 녹색이 이미 주황이 조준한 위치를 벗어나 계속 움직이고 있는 상황이 생기지 않나요?

 

sync.png

캐릭터가 사람처럼 100m를 20초에 움직이면

200ms 면 1미터의 오차가 생길수 있어서 충분히 클라이언트와 서버의 공격 오차가 발생할수 있다고 보는데요.

 

언리얼엔진이 이러한 핑에 따른 오차들을 보정하여 공격에 대한 충돌체크를 해주는 기능이 있나요?

없다면 어떻게 처리를 하는게 좋을지 팁을 알려주시면 감사하겠습니다.

 

 

 

unreal-engine 네트워크 언리얼-c++

답변 1

0

이득우

음.. 이 문제는 정답이 없고 게임에 따라 구현하기 나름입니다.

크게 세 가지 방법이 있겠죠.
1. 클라이언트에서 처리를 하고 서버에 보낼 것인가?
2. 클라이언트가 신호를 보내서 서버가 처리할 것인가?
3. 클라이언트에서 처리를 우선 진행하고, 서버에 검증하라고 명령을 보내서 서버의 결과를 다시 확인할 것인가?
1번은 반응성이 빠르지만 안전하진 않고, 2번은 반응이 느려서 유저가 불편하겠죠.
3번의 경우가 일반적인데, 만일 클라의 결과가 OK인데, 서버가 NO를 했다면 해당 작업은 롤백해야 하는 메커니즘을 짜야 합니다.
그 밖에도 다양한 상황을 고려해야 합니다. 클라의 핑을 계속 점검하고 그에 따라 보정한다던지..
언리얼 엔진의 기본 네트웍 멀티플레이어 코드는 이를 자동으로 구현해주진 않습니다.
강의에서도 이야기했지만, 구현하기 나름입니다.
이러한 부분까지 언리얼 엔진으로부터 제공받으려면 Part4에서 다루는 GAS를 사용해야 합니다.
GAS는 게임 로직을 구성하는 다양한 작업을 여러 카테고리로 모듈화해두고 있는데, 모듈마다 Prediction Key(PK)라는 예측 정보를 심고 서버에 판정을 요청해 클라와 서버의 결과가 불일치하면 PK에 대응하는 클라의 모듈 실행을 자동으로 롤백해줍니다.

Part4 강의에서는 네트웍 멀티플레이어를 다루진 않는데, 우선 GAS를 익히시고 인터넷을 통해서 GAS의 Prediction Key를 추가로 공부하시는 것을 권장합니다.

영상 예시 : https://www.youtube.com/watch?v=WyyUPqdZQfU

 

 

0

Peter Han

답변 감사드립니다.

정확한지 모르겠지만 듣기로는 하프라이프 소스엔진같은경우 FPS에 특화되어서인지 몰라도

서버에 지난 프레임(또는 서버타임) 별로 캐릭터 Move들을 몇초 어치를 저장하고

클라이언트에서 공격성공판정을 서버에서 받으면

200ms 핑이면 200ms 만큼 뒤의 캐릭터 위치를 찾아서 그 기준으로 공격판정 충돌체크를 검증 해준다고 하더군요.

오버와치, 발로란트 도 30프레임 60프레임 단위로 이러한 기능들을 쓴다고들 하길래

언리얼엔진에서는 기본적으로 어느정도까지 지원되는지가 궁금했었습니다.

 

5.6버전 Networking Insights 실행안됨 문제에 관하여

0

30

1

8강 중간, 분수대의 SetOwner 에 대해 궁금합니다.

0

77

2

플레이어(Actor) 로 (리슨)서버에서 생성 되나요?

0

99

2

2강) HandleBeginPlay 의 역활이 궁금합니다.

-1

72

2

3강 중간, 모드 로그로 찍을 시 스탠드얼론이 안찍힙니다.

1

76

2

CompressedFlag 질문

0

58

2

10강까지 머리 위 체력바가 표시가 안됩니다.

0

110

3

10강까지 머리 위 체력바가 표시가 안됩니다.

0

95

2

16:44 부분에서 질문이 있습니다.

0

104

2

12:50 NetMulticast RPC 커넥션 관려하여 질문이 있습니다.

0

121

2

github 3-5 파트 프로젝트에서 컴파일 에러가 발생합니다.

0

116

3

언리얼 인사이트 5.6버전 networking insights 가 뜨지 않습니다.

0

164

3

Insight 사용이 안되어서 문의 드립니다!

0

131

2

하위 레벨...?? High Level 말씀하신거죠..??

0

147

1

CompressedFlags를 이용한 InputThrottle, InputSteering 전달 방법 질문

0

191

1

조건식 프로퍼티 리플리케이션 질문

0

144

2

ArenaBattle에 Log추가하는 곳에 에러가 나타나 질문 드립니다.

0

160

2

7강에서 DORM_Initial 안됨

0

128

3

안녕하세요 강의 내용 정리에 관련해서 질문있어요

0

131

2

캐릭터 클래스의 mesh 관련

0

133

2

3파트 6강 분수대 로테이트에 문제가 생겼습니다.

0

131

3

클라이언트의 오너십 설정에 대해서 궁금합니다.

0

201

3

프로퍼티 리플리케이트 동기화 보장 개념.

0

225

2

결국엔 액터 기본함수들은 어디든 똑같이 일단 실행되는건가요?

0

93

2