inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

13강 캐릭터 무브먼트의 확장

OnMovementUpdated() 호출

해결된 질문

387

themoon007

작성한 질문수 98

0

제 컴퓨터에서는 OnMovementUpdated()가 서버랑 클라이언트에 둘 다 작동이 되어서, UpdateFromCompressedFlags() 함수에 따로 텔레포트 함수 안 해도 서버에서 정상 동작되는데요.

OnMovementUpdated()가 클라이언트에서만 호출되야 하는게 맞는거죠??

무엇이 잘못되었을까요....

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

답변 1

0

이득우

음.. bPressedTeleport 플래그는 입력에 의해서만 설정되도록 해놨는데, 서버에서 동작한다는 것은 뭔가 잘못된 것 같습니다.
LocalContoller에서 OnMovementUpdated 로직이 실행되도록 설계한 것은 맞습니다. 한번 로그를 찍어보시겠어요?
텔레포트 예제는 트랜스폼 변경하는 게 전부라, 기본 동기화로직이 발동되서 마치 작동되는 것처럼 보일수도 있을 수 있습니다.

0

themoon007

bPressedTeleport가 입력 혹은 클라이언트가 보낸 것에 의해서 바뀌는 것은 맞는 것 같습니다.

 

OnMovementUpdated() 가 서버에서도 계속 Tick 돌면서 호출하는데 LocalController()에서만 작동하는 거면 원격이 AutonomousProxy일때는 안되야 하지만 로그 상 찍히는것이 뭔가 문제가 있는것 같습니다.image[찾아보니 OnMovementUpdated() 는 PerformMovement() 와 SimulateMovment() 함수 둘 다에서 호출되는 것 같습니다.]

 

그리고 만약 이런 경우, 서버에 모든 CharacterMovementComponent에서 주기적으로 확인하면서 ABTeleport()를 하고 있는데

UpdateFromCompressedFlags() 함수 안에 또 ABTeleport()를 호출하는 것이 필요한 점에 대한 질문이었습니다.

1

이득우

저 함수는 엔진이 설정한 이벤트 함수라 서버/클라 공통으로 동작하는데, Flag가 false면 서버에서 함수는 호출되지만 해당 로직은 무시되니 결국 클라에서만 동작한다는 의미였습니다.
확실하게 하고싶다면 IsLocalController 함수를 써서 해당 로직을 감싸주면 될 것 같습니다.

서버와 클라 두 번 호출하는 것에 대한 답변을 드리면, 네트웍으로 움직임을 동기화하려면 크게 아래 둘 중 하나를 선택해야 할텐데요.

1. 클라에서 텔레포트를 우선 실행 시킨 후 서버에 명령을 전달하고, 서버에서 텔레포트한 후 둘의 결과를 비교한 후 클라의 결과를 보정하기

  1. 클라는 텔레포트시키지 말고 서버에서 텔레포트시킨 후 동기화하기.

    이번 예제에서 구현한 방법은 1번이고, 레이턴시로 인해 발생할 수 있는 문제를 예측해 보정하는 로직은 다루진 않았습니다.
    2번 방식은 강의에서 설명드린대로 네트웍 랙이 걸리면 늦게 발동된다는 단점이 있겠죠.

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