나만의 작은 도서관
[TIL][C++] 250909 MMO 서버 개발 97일차: [언리얼] 레벨을 전환하면 BP의 인스턴스 데이터는 사라진다. 본문
Today I Learn
[TIL][C++] 250909 MMO 서버 개발 97일차: [언리얼] 레벨을 전환하면 BP의 인스턴스 데이터는 사라진다.
pledge24 2025. 9. 9. 20:55주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
[언리얼] 레벨을 전환하면 BP의 인스턴스 데이터는 사라진다.
- 현재 레벨에서 스폰된 모든 액터는 기본적으로 현재 레벨에 종속되기 때문에 레벨이 언로드 될 때 모든 액터는 파괴된다.
액터의 생명주기 정리
- 액터는 UWorld 내부에서 특정 ULevel에 소속된다.
- 레벨 언로드 시 해당 레벨에 속한 모든 액터는 Destroy() 되어 메모리가 해제된다.
- 따라서 레벨 전환(현재 레벨 언로드 → 다음 레벨 로드)이 일어나면 현재 레벨의 액터들은 “예외 없이” 파괴된다. 즉, “레벨 언로드 = 레벨 소속 액터 전부 소멸”이 기본 원칙이다.
액터 인스턴스를 레벨 이동 시에 보존할 수는 없을까?
- 예외적으로 보존할 수 있는 경우가 있긴하다. KeepActors와 같은 특수한 전환 방식(Seamless Travel 등)을 사용하면 지정한 액터를 다음 맵으로 넘겨 사용할 수 있다.
- 하지만 기본적으로 이전 레벨에 있는 액터 인스턴스는 저장할 수 없다. 액터는 반드시 월드에 소속되어야 하며, 월드가 파괴되면(이전 레벨이 언로드 되면) 그 액터를 살릴 수 있는 방법은 없다.
이 사실이 지금 문제가 되는 이유
- 지금까지 C++에서 할 수 있는건 블루프린트에서 할 수 있고, 블루프린트에서 할 수 있는 건 C++에서도 할 수 있다는 생각을 중심으로 C++에서 건드리기 귀찮은 애들은 전부 블루프린트로 넘겨서 작업했다. 그래서 로직에 관련된 부분도 블루프린트에 많이 구현되어 있었는데, “레벨 전환 시 블루프린트에 저장된 정보가 사라진다”는 사실 때문에 블루프린트에 정의한 변수의 정보가 날아가는 문제가 생겼다.
- 로직을 돌리기위해 잠깐 쓰는 변수는 블루프린트에서 정의해도 문제가 발생하지 않지만 레벨 전환 시에도 유지되어야 하는 변수의 경우 블루프린트에서 정의하면 안 되었던 것이다.
슬롯의 쿨타임을 어떻게 관리할 것인가?
- 결국 슬롯의 쿨타임 데이터를 관리하는 것이 블루프린트에서 했기 때문에 위 문제에 대해 고민하게 된 것이다. 레벨을 이동해도 스킬이나 아이템의 쿨타임을 그대로 남아있어야 했다. 그래서 결론적으로는 “최소한 쿨타임 변수는 C++ 멤버 변수”로 존재해야 했지.
'Today I Learn' 카테고리의 다른 글
| [TIL][C++] 250911 MMO 서버 개발 99일차: [언리얼] 간단히 알아보는 서브시스템을 사용하는 이유 (0) | 2025.09.11 |
|---|---|
| [TIL][C++] 250910 MMO 서버 개발 98일차: [언리얼] Persistent Level (0) | 2025.09.11 |
| [TIL][C++] 250908 MMO 서버 개발 96일차: 프로토버프 객체 세팅된 모든 값 확인하는 방법 3가지 (0) | 2025.09.09 |
| [TIL][C++] 250905 MMO 서버 개발 95일차: 인벤토리 정보를 서버 메모리 → DB 저장 할 때에 대한 고민 (0) | 2025.09.05 |
| [TIL][C++] 250904 MMO 서버 개발 94일차: [언리얼] 이벤트 바인드는 BP 함수에서 할 수 없다. (0) | 2025.09.05 |
