해결된 질문
작성
·
291
·
수정됨
0
안녕하세요, 교수님.
교수님 강의를 듣고 포트폴리오를 한번 만들어보려고 하고 있습니다.
구현 중 애니메이션 관련 문제에 도달했는데요,
Listen Server 실행 시, Server 측에서 'Client가 조종하는 Character의 애니메이션'을 관찰하면 해당 캐릭터 애니메이션이 미약한 떨림? 렉? 프레임저하? 가 발생하는 문제였습니다.
제 프로젝트의 문제인 줄 알았으나, 교수님의 part3 프로젝트에서도, Unreal 기본 템플릿(3인칭) 에서도 같은 문제가 발생하였고,
구글링을 해보았더니 엔진 상으로 알려진 문제인 것 같습니다.
https://forums.unrealengine.com/t/clients-jitter-on-listen-server/343826?page=2
https://forums.unrealengine.com/t/listen-server-clients-animations-are-jittery-laggy/689493/15
구글링을 하여 찾아본 해결 방법으로는 애니메이션이 2배로 빨라지는 문제가 새로 발생하는 등, 확실하고 깔끔한 해결 방법이 없는 것 같습니다.
직접 해결해보려 엔진 코드를 열어보고 있지만 역시 너무나 어렵습니다..
이런 경우에는 어떻게 해결해야 하나요 ... ?
답변 2
1
답변을 보니, 별도의 특별한 설정 없이도 네트웍에서 애니메이션 떨림이 일어나는거네요.
멀티플레이어 네트웍 게임의 경우 지금은 환경이 많이 개선되었지만, 어쩔 수 없는 서버와 클라이언트간의 시간 차가 존재합니다. 이 시간차를 극복하고 클라이언트와 서버가 같은 경험을 가지도록 만들어주는 것이 멀티플레이어 네트웍 게임의 핵심 가치라고 생각합니다.
이를 효과적으로 수행하는 방법은 게임 장르, 메카닉에 따라 모두 다를텐데요, 아무래도 한정된 네트웍 밴드위스에 모든 정보를 다 빠르게 배포할 순 없기 때문입니다. 사용자마다 처한 컴퓨터, 네트웍 환경이 모두 다를테니깐요.
이 중에서 게임이 추구해야 할 가장 핵심적인 가치를 꼽는다면 단연코 판정입니다. 판정이 정확하지 않다면 아무래도 사용자들이 실망하고 이탈할 가능성이 높을테니깐요.
하지만 클라이언트에서 서버를 거쳐 다시 클라이언트로 건너오는 시간동안 이 판정 경험을 서버와 클라이언트가 동일하게 유지하는 것은 쉬운 방법이 아닙니다. 수 많은 게임들이 각자의 방법론을 가지고 이걸 구현하고 있습니다.
언리얼 엔진도 나름의 방법으로 구현되어 있는데요, 제가 설명드린 것은 큰 구조와 흐름일 뿐 세부적인 내용은 결국 전문가의 영역이라고 볼 수 있습니다.
지금 확인하고자 하는 것은 서버와 클라간의 부드러운 애니메이션일 수 있지만, 멀티플레이어 네트웍 게임에서는 그게 중요하지 않을 수 있습니다. 정확한 판정을 위해 애니메이션이 깨질 수 있다는 점을 감안하셔야 합니다. 왜냐하면 애니메이션 포즈가 판정에 영향을 미칠 수 있기 때문이지요.
언리얼 엔진의 멀티플레이 네트웍 기능에 관련해서는, 이를 기반으로 서비스 중인 포트나이트 게임을 통해 한번 플레이하면서 참고해보시는 것도 좋을 것 같습니다.
1
실행환경
CPU : Ryzen 5900x
GPU : RTX 3090ti
RAM : 32gb
OS : windows 11 edu
모니터 : 3440 x 1440, 165hz <- 165hz라 더 잘 보이는것 같기도 합니다.
1. UE 5.3.2 실행
2. 게임 -> 삼인칭 템플릿 생성
3. Play As Listen Server, 2인으로 실행
4.
Client를 조종하는 상태에서, Server 에서 관찰 시 Client에서 조종중인 캐릭터(local : Authority, Remote : Autonomous Proxy) 의 애니메이션의 약간의 프레임 저하 확인
(반대의 경우(Server에서 조종하는 상태에서, Client에서 관찰 시 Server에서 조종중인 캐릭터(Local : Simulated proxy))는 프레임 저하가 일어나지 않음)
Stat FPS 콘솔 커맨드를 통해 창 포커싱 때문에 일어나는 프레임 저하인지 확인해보았지만, 해당 부분은 문제가 없었습니다.
이게 관련있는 설정인지는 모르겠으나,
BP_ThirdPersonCharacter의 Movement Component에서 'Listen Server Network Simulated Smooth Location Time' 값을 0으로 설정 후 관찰하면 더 확연한 차이가 느껴집니다.
'제가 그냥 예민한건가?' 싶긴 한데 제가 보기엔 진짜 차이가 보여서 질문드립니다...
감사합니다. 멀티플레이 프로그래밍 경험이 별로 없어 사소한 부분이지만 무조건 고쳐야만 하는 줄 알았습니다.
일단 보류 후 진행하고, 추후 신경이 쓰인다면 다시 고치는 것에 도전해보아야겠습니다.
감사합니다!