상세 컨텐츠

본문 제목

패키징 할 때 큰일나는 액터 스폰 방법 (StaticLoadObject)

Unreal

by Real_Go 2025. 2. 22. 18:48

본문

언리얼에서 참 온갖 억까를 많이 당하면서 살고 있는데 

오늘 다룰 주제는 에디터에서는 되고 패키징을 할때는 안되는 코드를 리뷰해보고자 한다.

 

그놈의 정체는 바로  StaticLoadObject()!!!

 

주석 친 부분이 기존 생성 원리인데

블루프린트가 있는 경로를 받아서 (*RefPath) spawn Actor 를 하는 수순이다.

문제는 이렇게 하면 Path 를 우리가 예를 들어 dictionary로 구성해서 

key 값을 받아서 해당 경로를 읽어오도록 한다면 

"Game/actor.actor" 

이렇게 해야 된다.  

 

근데 그렇게 하면 블루프린트를 패키징 하고나서 경로를 읽어오지 못한다. 

경로는 

"/Script/Engine.Blueprint'Game/actor.actor_C'"

이런식으로 앞에 /Script/Engine.Blueprint 와 

사이에 해당 경로 'Game/actor.actor_C'" 등

작은따옴표도 있어야하고 확장자 뒤에는 _C 도 붙여야한다. 

근데 저 병신같은 staticloadObject는 이렇게 경로를 선언하면 읽어오질 못한다.

그냥 쌩 폴더 경로만 읽을 줄 아는 병신이다. 에디터에서는 작동하나 패키징에서는 병신이 되는 함수이다. 

그래서 쓰면 안된다. 

 

대신 써야 되는 함수는 

딕셔너리 함수그냥 수행해서

Path를 의미하는 변수 BlueprintPath (String 값)에 PlayerRefMap.FindRef(RefKey); 이런식으로 키값 던져서 FindRef 함수로 찾도록 하고 

auto ClassToSpawn = LoadClass<AActor>(nullptr, *BlueprintPath); 로 해서 이걸로 생성함수를 진행하도록 한다. 

스폰 트랜스폼값과 크기 등을 후에 지정한다음 생성하면 된다. 

 

다시한번 StaticLoadObject 는 쓰지 말도록 하자. 

 

 

관련글 더보기