인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

dhqks6님의 프로필 이미지

작성한 질문수

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

3강 커넥션과 오너십

클라이언트의 오너십 설정에 대해서 궁금합니다.

작성

·

88

·

수정됨

0

클라이언트에서는 빙의를 하면서 오너쉽을 설정하는 것이 아니라 Owner값이 서버와 동기화 되는 것이라고 이해했습니다.

그리고 서버에서 Owner값이 바뀌면 클라이언트의 OnRep_Owner가 실행되면서 클라이언트의 Owner값이 설정된다고 이해했습니다.

그래서 Super의 OnRep_Owner가 실행되기전에도 로그를 찍어봤는데, 그때도 이미 오너가 설정된것으로 로그가 출력되었고, 코드를 확인해보니 Actor의 OnRep_Owner는 내용이 없더라구요..? 그러면 정확히는 OnRep_Owner에서 Owner값이 동기화 되는것은 아니라는 건가요?

 

그리고 아래 로그와 같이 PostNetInit가 실행되고 BeginPlay 까지 실행된 이후에 PostNetInit가 한번 더 호출되는 이유는 무엇인지 궁금합니다.

LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner [ABCharacterPlayer_0 Begin]
LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner [Owner: BP_ABPlayerController_C_0]
LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner [Owner: BP_ABPlayerController_C_0]
LogABNetwork: [CLIENT1] AABCharacterPlayer::OnRep_Owner [End]
LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit [Begin]
LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit [End]
LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay [Begin]
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay [Begin]
LogABNetwork: [CLIENT1] AABPlayerController::BeginPlay [End]
LogABNetwork: [CLIENT1] AABGameState::OnRep_ReplicatedHasBegunPlay [End]
LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit [Begin]
LogABNetwork: [CLIENT1] AABCharacterPlayer::PostNetInit [End]

답변 3

0

이득우님의 프로필 이미지
이득우
지식공유자

해당 함수가 호출 됐다는 것은 동기화가 됐다는 것을 의미합니다. 그리고 액터의 구현이 안 되있는 것은 상속 받은 클래스에서 필요하면 직접 구현하라는 의미지요.

0

dhqks6님의 프로필 이미지
dhqks6
질문자

두번째 질문은 4강 강의를 보고 해결됐습니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. dhqks6님.

언리얼 엔진에서 클라이언트의 오너십 설정과 관련된 몇 가지 중요 포인트를 설명드리겠습니다.

  1. Owner값의 동기화:

    • 서버와 클라이언트 간의 Owner값 동기화는 리플리케이션 메커니즘을 통해 자동으로 이루어집니다. 즉, 서버에서 Owner값이 변경되면 이 정보가 클라이언트에 전달되고, 클라이언트의 Owner가 업데이트됩니다.
    • OnRep_Owner 함수는 Owner값 변경 시 호출될 콜백 함수이며, 클라이언트의 데이터 로직을 업데이트할 기회를 제공합니다. 이에 따라 OnRep_Owner가 실행되기 전에 이미 클라이언트의 Owner값은 업데이트된 상태일 수 있습니다.
  2. Actor의 OnRep_Owner 내용:

    • 기본적으로 Actor 클래스의 OnRep_Owner에는 추가적인 코드가 없지만, 상속받은 클래스에서 이를 오버라이드하고 필요한 동작을 정의할 수 있습니다. 따라서, 클라이언트에서 Owner 업데이트가 일어난 후 이 함수에서 추가적인 처리를 할 수 있습니다.
  3. PostNetInit 호출:

    • PostNetInit 함수는 네트워크에서 객체가 초기화된 후 호출됩니다. 클라이언트에서 PostNetInit 함수가 두 번 호출되는 이유는 네트워크 상태 및 데이터를 보장하기 위함일 수 있습니다. 로그를 통해 실제 특정 컨텍스트에서 어떻게 이러한 순서가 발생하는지를 보는 것이 중요합니다.

관련된 질문과 답변을 통해 더 깊이 이해하실 수 있도록 관련 링크를 추천드립니다:

이 링크들은 Owner 속성의 동기화와 PostNetInit 호출 과정의 로그 분석에 대한 이해를 돕는 데 유용한 정보를 제공할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dhqks6님의 프로필 이미지

작성한 질문수

질문하기