SetActorLocation, Rotation이 제대로 적용되지 않는 이슈
안녕하세요 이득우 선생님.
강의를 듣고 혼자 실습해보다가 의문이 생겨서 결국 이곳에 질문을 드리게 되었습니다.
제가 데디케이티드 서버 환경에서 캐릭터의 위치와 회전을 원하는 값(정해진 위치와 회전)으로 지정하여 변경시키는 실습을 혼자 해보고 있었는데, 간헐적으로 캐릭터가 제대로 정해진 위치로 이동하지 않거나, 회전값도 제대로 돌아가지 않는 문제가 발생하는것 같습니다.
혼자 열심히 찾아보고 고민하면서 내린 생각은, 서버 RPC함수를 통해 SetActorLocation을 수행하였는데, 서버에서 위치 혹은 회전값을 변경시키기전에 캐릭터가 '직전에' 이동하려고 했던 값이 아직 서버 패킷? 같은곳에 남아있어서 이전 이동 정보로 인해 위치 혹은 회전 변경 함수가 서버에서 적용된 이후 곧이어서 뒤늦게 도착한 캐릭터 위치 혹은 회전 변경값에 의해 다시 값이 바뀌어서 원하는 위치와 회전이 나오지 않는거지 않을까 혼자 추측만 하고 있습니다.
제가 원하는 결과를 얻기 위해서 무엇을 고려하고, 혹은 이런 상황이 많이 벌어질것 같은데, 어떻게 해결하면 좋을지 궁금합니다.
추운 날씨에 좋은 강의 주셔서 공부하는데 몹시 도움되고 있습니다. 감사합니다.
답변 1
0
안녕하세요.
캐릭터의 트랜스폼 동기화는 간단하면서도 어려운 주제입니다.
게임의 성향과 스타일에 따라 추구하는 동기화 전략이 다르기 때문에 어떤 방법이 정답이다라고 단정할 수 없습니다.
몇 강까지 들으셨는지 잘 모르겠습니다만, 언리얼의 경우 기본적으로 100명이 들어가는 배틀로열 슈팅장르에 적합한 기능으로 구현되어 있습니다. 한턴 한턴의 움직임이 중요한 전략게임이나 대규모 유저를 수용해야하는 MMORPG는 또 다른 전략으로 접근해야 합니다.
언리얼 엔진으로 한정해 설명드리자면, 캐릭터의 움직임 동기화는 캐릭터 무브먼트 컴포넌트가 전담하고 있습니다.
캐릭터 무브먼트는 패킷 손실을 감수하고 최대한 움직임에 대한 많은 정보를 보내 동기화되는 방식을 택하고 있지만, 이 중에서 또 중요한 패킷은 별도로 처리하는 과정을 내부적으로 프로토콜을 만들어 진행합니다. 그리고 모든 움직임 정보를 보내기보다 보내기전에 최대한 움직임 정보를 병합하고 데이터를 최소화하는 작업등을 거칩니다.
클라이언트 패킷 및 서버의 패킷은 언제든지 소멸될 수 있고 지연될 가능성이 있습니다. 그래서 수업에서 의도적으로 랙을 발생시켰던 것이고, 이를 보완하기 위한 부가 장치를 고민해야 합니다. 언리얼 엔진이 진행하는 것처럼 인해전술(?)을 사용하는 방법도 있고, 돌다리 건너듯이 하나의 움직임을 확실히 체크하는 방법도 있겠습니다.
다만 게임에서의 움직임이 어떤 것을 지향하느냐에 따라 최적의 전략은 달라지기 때문에, 저도 어떻게 해야한다라고 설명드리기 어렵네요.
13강에서 설명드리긴 하지만 하단의 고급 토픽을 한번 참고해보시기 바랍니다.
https://docs.unrealengine.com/5.1/ko/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine/
좋은 하루 되세요.
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





