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

흑연님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

언리얼 클라이언트 네트워크 구현시 액터의 라이프사이클

22.07.28 22:59 작성

·

542

0

안녕하세요 루키스님

언리얼쪽에 클라이언트 네트워크 시스템을 구죽해놓았는데 마지막 관문이 풀리지 않아 질문드립니다.

확장성을 고려해 TCP 연결을 subsystem에서 중앙관리해서 여러 서버의 TCP연결을 가능하게 하려고 합니다.

일단 구현은 Subsystem에서 FTickableGameObject를 상속받아서 subsystem에서 Tick을 할수 있게 했는데요,

이렇게 하니 Tick함수에서 Recv한 패킷을 뺴오는 갱신 주기를 각각의 TCP연결마다 따로 설정할 수 없는 부분이 있습니다.

그래서 subsystem에 Actor를 각각 달아서 갱신주기를 따로 설정할수 있지 않을까 구상했는데,

액터는 레벨이 바뀔때 Actor의 생명주기가 끝나버리는 문제점이 있는데, Subsystem이 관리하고 있는 Actor가 레벨이 바뀌어도 살아남게하는 방법이 있을까요?

답변 1

0

흑연님의 프로필 이미지
흑연
질문자

2022. 08. 01. 20:07

불금과 주말동안 열심히 달려보았지만

딱 제가 원하는 그림의 기능은 찾을 수 없었습니다.

FTickableGameObject를 상속하여 Tick기능을 구현한 UObject를 GameInstance나 Subsystem에 달아서 생명주기를 연장할수는 었었지만, 따로 Tick주기를 설정할 수가 없어서 프레임단위로 실행되기 때문에, 그냥 중앙에서 리스트로 관리하는거와 별반 차이가 없었습니다.

Tick주기를 설정할 수 있는 기능은 Actor에서 부터 가능하더군요.

Persistemt Level에 달아서 Actor의 생명주기를 연장 할 순 있겠지만, 월드 파티션이 나뉘어진 맵에선 뜨지 않는데다가, 플러그인 형태로 만들어 사용자가 따로 설정하지 않고 쓸수있게 하는게 목표라 유니티의 DontDestoryOnload처럼 제 입맛에 딱 맞는 기능을 찾아서 만드는데는 제약사항이 있네요.

일단 건진건 UTickableWorldSubsystem으로 World에서 관리하는 Tick기능을 쉽게 구현할수 있다는거 하나 정도, 결국 제자리걸음입니다

흑연님의 프로필 이미지

작성한 질문수

질문하기