• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

런타임 중 NewObject<>()의 Replicate에 대해 조금 더 궁금합니다.

24.01.29 03:39 작성 조회수 114

0

런타임중에 SpawnActor<>()와 NewObject<>()를 멀티플레이 환경에서 사용하고 싶은데,

강의를 듣고 엔진 코드도 살펴보고 문서도 읽어보고 5.3 환경에서 실험도 해보고 했지만

잘 모르겠어서 이렇게 질문드립니다.

" AActor 상속 클래스를 Replicate = true로 하고 서버에서 SpawnActor를 사용해 스폰하면 클라이언트에도 자동으로 생성이 된다. "

-> 이건 실험도 해보았고 에픽 포럼 글 확인해보니 맞는거 같습니다

위 실험 결과를 토대로 UActorComponent는 어떻게 동작할까? 궁금해서 실험을 해보았을 때 로그를 찍으며 실험해본 결과는 아래와 같습니다.

 

- UActorComponent는 UActorComponent의 Replicate 속성 true false 여부에 상관없이,

- 서버에서 NewObject<>()로 생성 후, (여기서 outer는 ACharacter 같은 걸로 설정해서 추후 RegisterComponent()시 문제가 없도록 하고)

- RegisterComponent를 통해 등록하면 https://docs.unrealengine.com/5.3/ko/replicated-subobjects-in-unreal-engine/의 과정을 거치지 않았는데도 클라이언트에서도 자동으로 생성이 된다.

라는 결과를 얻었습니다.

 

이게 맞나요? 제 생각엔 'NewObject<>()시 사용한 Outer가 Replicate가 true인 Actor이면,

UActorComponent는 UObject를 서브 오브젝트 레플리케이트 시키기 위한 추가 로직(위 문서 링크에 나와있는) 없이도 자동으로 잘 된다' 라는 생각이 드는데

이게 맞는건지 아니면 틀린건지 위에 실험도 잘못한건지 잘 모르겠습니다 ㅜㅜ

혹시나 맞다면 UActorComponent를 위처럼 동적으로 수정 / 삭제 시 RemoveReplicatedSubObject도 호출하지 않아도 되나요?

 

답변 1

답변을 작성해보세요.

1

관련 주제는 사실 4버전과 5버전의 구현 방법이 달라서, 포럼이나 인터넷 글도 버전을 체크하면서 확인해봐야 합니다. 사실 앞으로도 어떻게 바뀔지 모르니 결국에는 소스코드를 보면서 직접 메커니즘을 확인하는게 가장 확실합니다. 결국에는 설계의 문제인데요, 이번 강좌에서 기초를 점검하되, GAS의 네트웍 멀티플레이 프레임웍을 공부해 이 프레임웍이 지향하는 방법으로 공부하는 것이 가장 효과적으로 보여집니다.