작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
636
1
게임서버 엔진 부분 챕터 부분이 서버의 밑단을 직접 구축해보는 파트인 것으로 알고 있는데
언리얼 엔진에서 클라이언트와 연동을 할 때도 이러한 밑 단을 구축할 방법이 있는 것인지 궁금합니다.
또한 용어에 대해 궁금한 것이 언리얼 엔진에서 리슨서버나 데디서버를 사용한다는 것이 포톤서버와 같은 상용 서버를 사용하는 것인지 궁금합니다. 아니면 본 강의에서 처럼 iocp를 사용하는 개념과 비슷한 개념인지 궁금합니다.
감사합니다.
답변 1
3
언리얼 엔진에서 클라이언트와 연동을 할 때도 이러한 밑 단을 구축할 방법이 있는 것인지 궁금합니다.
-> 네니오,말씀하시는 밑단이 곧 언리얼 엔진입니다.
기본적으로 언리얼 엔진은 오픈소스라서 엔진 소스코드를 다 다운로드 받아서
수정할 수 있습니다. 하지만 워낙 난이도가 높아서 대기업의 큰 프로젝트에서나 이렇게 하죠.
엔진 소스를 다루는 직군이 [엔진 프로그래머]입니다.
일반적인 게임 컨텐츠 개발할 때 엔진 소스는 건드리지 않습니다.
또한 용어에 대해 궁금한 것이 언리얼 엔진에서 리슨서버나 데디서버를 사용한다는 것이 포톤서버와 같은 상용 서버를 사용하는 것인지 궁금합니다.
-> 아닙니다. 언리얼 엔진 소스코드에 네트워크 관련 코드가 있어서
자체적으로 서버 코드가 있습니다. 다만 IOCP 방식은 아니고
Select 방식이라 동접의 한계가 있습니다. 애당초 MMO 장르가 아니라
FPS 장르를 타게팅해서 만든 것이기 때문이죠.
리슨 서버는 서버 역할도 하면서 1개의 클라를 보여주기까지 하는
(즉, 친구 5명이서 게임하는데 한명이 방장=서버의 역할도 겸하는) 것이고
데디서버는 서버가 오로지 서버 역할만 하는 상황을 말합니다
(배그는 서버가 게임회사쪽 컴퓨터에서 실행되겠죠? 이게 데디서버입니다)
포톤은 그냥 잘 알려진 서버 프레임워크이고 우리가 IOCP로 만드는 부분에 해당합니다.
다만 작은 규모나 인디에서 사용하지,
실무에서 포톤을 사용하는 경우를 본 적이 없습니다.
MMO라면 클라와 서버를 따로 만들어서
네트워크 통신을 통해 붙이지만,
언리얼 엔진은 클라 코드로 한 번에
클라+서버 코드를 1+1으로 작성할 수 있게 되어 있습니다.
즉 동일한 코드가 서버에서도, 클라에서도 실행되어
알아서 패킷을 통해 동기화 되는 것이죠.
정말 서버에서만 처리되어야 하는 게임 핵심 규칙
(ex. 배그의 자기장 생성 등)은 서버에서만 실행하라고
if (HasAuthority())
자기장생성();
과 같이 서버 로직만 추가로 넣어서 구현을 하면 됩니다.
자세한 내용은 너무 길어서 더 알아보시길 바랍니다.
IOCP 서버는 언리얼 엔진과 별개로 따로 만드는 것이고,
언리얼 엔진에서는 FSocket 등 기본적인 네트워크 통신 소켓 기능은 지원하니
(클라에서 서버로 붙기 위해)
이것을 이용해 기본적인 패킷 연동부터 다 만들어야 합니다.
엄청 힘든 길이기 때문에 MMO 포폴이 아니라면 사실 쉽지 않고
3인 협동 FPS라면 데디 서버를 공부하는게 무조건 이득입니다.
언리얼에서 데디 서버를 사용하면
클라에서 [요 부분은 서버 코드]와 같은 if else로 처리해서
클라와 서버를 한 번에 구현할 수 있습니다.