작성
·
358
0
언리얼에서 얼마나 정확히 이러한 문제에 대해서 네트워크동기화를 잘 해주는지 모르겠어서 여쭈어봅니다.
주황 녹색 모두 서버(제3의 호스트 또는 데디케이티드서버)에 접속한 클라이언트입니다.
서버로의 핑은 200ms라 모두 가정하고
주황캐릭터가 움직이는 녹색 캐릭터를 공격하는 경우
내 클라이언트에서는 내 주황이 잘 조준해서(Line trace나 Collision overlay) 녹색을 맞추었는데
서버에서는 녹색이 이미 주황이 조준한 위치를 벗어나 계속 움직이고 있는 상황이 생기지 않나요?
캐릭터가 사람처럼 100m를 20초에 움직이면
200ms 면 1미터의 오차가 생길수 있어서 충분히 클라이언트와 서버의 공격 오차가 발생할수 있다고 보는데요.
언리얼엔진이 이러한 핑에 따른 오차들을 보정하여 공격에 대한 충돌체크를 해주는 기능이 있나요?
없다면 어떻게 처리를 하는게 좋을지 팁을 알려주시면 감사하겠습니다.
답변 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
답변 감사드립니다.
정확한지 모르겠지만 듣기로는 하프라이프 소스엔진같은경우 FPS에 특화되어서인지 몰라도
서버에 지난 프레임(또는 서버타임) 별로 캐릭터 Move들을 몇초 어치를 저장하고
클라이언트에서 공격성공판정을 서버에서 받으면
200ms 핑이면 200ms 만큼 뒤의 캐릭터 위치를 찾아서 그 기준으로 공격판정 충돌체크를 검증 해준다고 하더군요.
오버와치, 발로란트 도 30프레임 60프레임 단위로 이러한 기능들을 쓴다고들 하길래
언리얼엔진에서는 기본적으로 어느정도까지 지원되는지가 궁금했었습니다.