에셋 레퍼런싱의 기초
하드 참조와 소프트 참조의 로딩 시점·메모리 영향을 비교하고 상황에 맞는 에셋 참조 방식을 선택합니다.
지금까지는 게임 데이터를 저장/관리하는 방법을 살펴봤습니다.
하지만 실제 프로젝트에서는 3D 모델, 텍스처, 사운드, 애니메이션, 블루프린트처럼 파일 형태의 리소스도 다뤄야 합니다.
이 리소스를 에셋(Asset)이라 부르며, 블루프린트나 C++ 코드에서 어떻게 참조하고 사용하는지 이해하는 것이 중요합니다.
이번 절에서는 에셋 레퍼런싱(Asset Referencing)의 기본 개념과 활용법을 정리합니다.
에셋 레퍼런싱이란 무엇인가?
에셋 레퍼런싱은 블루프린트나 코드에서 게임 프로젝트 내의 특정 에셋(예: Static Mesh, Texture, Sound Wave, Blueprint Class 등)을 가리키는 방식을 의미합니다.
마치 파일 시스템에서 파일의 경로를 지정하여 파일을 찾아가는 것과 유사합니다.
언리얼 엔진에서 에셋 레퍼런스는 크게 두 가지 주요 형태로 나뉩니다.
- 개념: 특정 에셋에 대한 직접적인 참조를 의미합니다. 저장된 하드 참조가 로딩 의존성을 만들면 소유 에셋을 로드할 때 참조 대상도 함께 로드됩니다. 변수 타입만 만들고 값을 지정하지 않은 경우와는 구분합니다.
- 형식:
Object Reference(예:Static Mesh Object Reference,Texture2D Object Reference,Blueprint Class Reference등) - 예시:
Set Static Mesh노드의New Mesh핀에 직접Static Mesh에셋을 연결하는 경우. - 장점: 참조 대상이 로드된 뒤 바로 사용할 수 있어 연결이 단순합니다. 이후의 텍스처·메시 스트리밍이나 리소스 준비 비용까지 없다는 뜻은 아닙니다.
- 단점: 불필요한 에셋까지 미리 메모리에 로드될 수 있어 메모리 사용량이 증가하고, 초기 로딩 시간이 길어질 수 있습니다. 특히 대규모 프로젝트에서는 심각한 메모리 문제가 발생할 수 있습니다.
- 개념: 특정 에셋의 경로(Path)에 대한 참조를 의미합니다. 이 레퍼런스를 가진 블루프린트나 클래스가 메모리에 로드될 때, 참조하는 에셋은 자동으로 로드되지 않습니다. 필요할 때 로드 요청을 하거나 이미 다른 경로로 로드되어 있는 객체를 사용합니다. 소프트 참조 자체만으로 대상의 로딩을 강제하지는 않습니다.
- 형식:
Soft Object Reference(예:Static Mesh Soft Object Reference,Texture2D Soft Object Reference,Soft Class Reference등) - 예시: 아이템의 아이콘 이미지를
Soft Texture2D Reference변수에 저장하고, 아이템이 인벤토리 창에 표시될 때만 해당 이미지를 로드하여 사용하는 경우. - 장점: 메모리 사용량을 최적화하고 초기 로딩 시간을 줄일 수 있습니다. 필요한 에셋만 필요할 때 로드하므로 유연성이 높습니다.
- 단점: 에셋을 사용하기 전에 명시적으로 로딩하는 과정이 필요하며, 이 로딩 과정에서 약간의 지연이 발생할 수 있습니다.
블루프린트에서 에셋 레퍼런싱 활용
하드 레퍼런스 사용법
하드 레퍼런스는 변수 타입 설정 시 Object Reference를 선택하여 사용합니다.
- 블루프린트 에디터를 엽니다.
- 변수 패널에서 새 변수를 추가합니다.
- 변수 유형을
Static Mesh Object Reference로 설정하고 이름을MyMesh라고 지정합니다. - 디테일 패널에서
MyMesh변수 옆의 드롭다운을 클릭하여 사용하고 싶은Static Mesh에셋(예:Shape_Cube)을 직접 지정합니다.
Event BeginPlay나 다른 이벤트에서Static Mesh Component의Set Static Mesh노드를 사용하고,New Mesh핀에MyMesh변수(Get 노드)를 연결합니다.- 컴파일하고 플레이하면, 액터에 지정된 큐브 메시가 적용된 것을 볼 수 있습니다.
소프트 레퍼런스 사용법 (비동기 로딩)
소프트 레퍼런스는 변수 타입 설정 시 Soft Object Reference를 선택하여 사용하며, 이 예제에서는 사용할 때 Async Load Asset을 호출합니다.
- 블루프린트 에디터를 엽니다.
- 변수 패널에서 새 변수를 추가합니다.
- 변수 유형을
Soft Static Mesh Object Reference로 설정하고 이름을MySoftMesh라고 지정합니다. - 디테일 패널에서
MySoftMesh변수 옆의 드롭다운을 클릭하여 사용하고 싶은Static Mesh에셋(예:Shape_Cylinder)을 직접 지정합니다. (하드 레퍼런스와 동일하게 에디터에서 연결합니다.)
Event BeginPlay에서MySoftMesh변수(Get 노드)를 가져옵니다.MySoftMesh를Async Load Asset의Asset에 연결하고,BeginPlay의 실행 선을 이 노드에 연결합니다.Async Load Asset은 완료 시Completed를 실행합니다.Out실행 출력과 완료 시점을 혼동하지 않습니다.
Completed에서 반환된Object를Static Mesh로 캐스트하고, 성공한 경우에만 유효한 메시 컴포넌트의Set Static Mesh로 연결합니다.- 캐스트 성공 결과를
New Mesh에 연결합니다. 로드 또는 캐스트에 실패하면 기존 메시를 유지하거나 실패 안내를 처리합니다. - 참고:
Load Asset Blocking은 동기 로드입니다. 즉시 사용할 수 있을 때까지 기다리므로 게임 스레드의 지연을 유발할 수 있습니다. 비동기 완료 뒤 사용할 객체는 필요한 동안 하드 참조나 컴포넌트 속성에 보관합니다.
소프트 레퍼런스는 변수에 경로가 들어 있는 상태와 실제 에셋이 메모리에 준비된 상태를 분리해서 생각해야 합니다.
따라 할 액터에는 유효한 Static Mesh 컴포넌트가 먼저 있어야 합니다. 비교가 쉽도록 처음에는 큐브를 표시하고 MySoftMesh에는 실린더 경로를 지정합니다. 로드 요청 직후가 아니라 Completed의 캐스트 성공 경로에서 그 컴포넌트를 Target으로 Set Static Mesh합니다. 실패 경로는 큐브를 유지하도록 정하면 성공·실패 결과를 구분할 수 있습니다. 패키징할 때는 실린더가 실제 Cook 대상에 포함됐는지도 별도로 확인합니다.
요청 직후의 다음 실행을 판정하기
Async Load Asset의 Out 경로에서 “요청함”을 출력했고, Completed는 아직 발생하지 않았습니다. 이 출력만으로 실린더를 Set Static Mesh에 적용할 수 있는 반환 객체가 준비됐다고 결론 내릴 수 있을까요?
요청 흐름과 완료 흐름을 구분하기
그렇게 결론 내릴 수 없습니다. Out의 후속 실행과 에셋 준비를 확인하는 Completed는 다른 시점입니다. Completed에서도 반환 객체·타입·적용할 컴포넌트를 확인한 뒤 사용합니다. 대상이 이미 다른 경로로 로드돼 있었을 가능성과 실제 완료 순서는 측정할 수 있지만, 이 조건은 요청 메시지만으로 성공을 보장하지 않습니다.
소프트 경로를 가진 것과 에셋이 준비된 것은 다릅니다
소프트 경로의 요청과 Out 후속 실행은 준비 완료가 아니며 Completed 뒤 반환 타입/컴포넌트 검사를 통과할 때만 메시를 변경한다. 하드 참조 비교를 앞선 실행 단계로 이어 붙이지 않는다.
LOADING DEPENDENCY · PATH · COMPLETION
소프트 경로를 가진 것과 에셋이 준비된 것은 다릅니다
하드 참조가 로딩 의존성을 만든 경우와 MySoftMesh를 Async Load Asset으로 읽는 경우를 비교합니다. 변수 타입만 정한 상태와 실제 대상 에셋을 지정한 상태도 구분합니다.
하드 참조 뒤의 메시·텍스처 스트리밍이나 리소스 준비 비용까지 없어지지는 않습니다. 완료 후 필요한 객체는 하드 참조나 컴포넌트 속성으로 보관하며, 패키지에 대상 경로가 포함되는지 확인합니다. 실패하면 기존 메시 유지 또는 정한 실패 안내를 수행합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 하드 참조가 로딩 의존성을 만들면 소유 에셋 로드에서 대상 준비와 SetStaticMesh로 진행한다. 소프트 참조는 경로만 보관하며 필요할 때 Async Load Asset을 요청한다. Out은 다음 실행 흐름이고 준비 완료를 보장하지 않는다. Completed에서 반환 객체의 Static Mesh 캐스트와 적용 컴포넌트를 확인해 성공할 때만 메시를 바꾼다. 실패하면 기존 메시를 유지하는 예다. 두 영역은 비교이며 이어지는 자동 실행이 아니다. |
| 노드·연결선 라벨 | 아니요 |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 소프트 요청 Soft 경로의 비동기 로드를 시작한다. |
|
|
| Completed 검사 완료 이벤트의 반환 타입과 컴포넌트를 확인한다. |
|
|
| 메시 변경 성공 조건이 맞을 때만 메시를 적용한다. |
|
|
소프트 경로를 가진 것과 에셋이 준비된 것은 다릅니다
소프트 경로의 요청과 Out 후속 실행은 준비 완료가 아니며 Completed 뒤 반환 타입/컴포넌트 검사를 통과할 때만 메시를 변경한다. 하드 참조 비교를 앞선 실행 단계로 이어 붙이지 않는다.
LOADING DEPENDENCY · PATH · COMPLETION
소프트 경로를 가진 것과 에셋이 준비된 것은 다릅니다
하드 참조가 로딩 의존성을 만든 경우와 MySoftMesh를 Async Load Asset으로 읽는 경우를 비교합니다. 변수 타입만 정한 상태와 실제 대상 에셋을 지정한 상태도 구분합니다.
하드 참조 뒤의 메시·텍스처 스트리밍이나 리소스 준비 비용까지 없어지지는 않습니다. 완료 후 필요한 객체는 하드 참조나 컴포넌트 속성으로 보관하며, 패키지에 대상 경로가 포함되는지 확인합니다. 실패하면 기존 메시 유지 또는 정한 실패 안내를 수행합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 하드 참조가 로딩 의존성을 만들면 소유 에셋 로드에서 대상 준비와 SetStaticMesh로 진행한다. 소프트 참조는 경로만 보관하며 필요할 때 Async Load Asset을 요청한다. Out은 다음 실행 흐름이고 준비 완료를 보장하지 않는다. Completed에서 반환 객체의 Static Mesh 캐스트와 적용 컴포넌트를 확인해 성공할 때만 메시를 바꾼다. 실패하면 기존 메시를 유지하는 예다. 두 영역은 비교이며 이어지는 자동 실행이 아니다. |
| 노드·연결선 라벨 | 아니요 |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 소프트 요청 Soft 경로의 비동기 로드를 시작한다. |
|
|
| Completed 검사 완료 이벤트의 반환 타입과 컴포넌트를 확인한다. |
|
|
| 메시 변경 성공 조건이 맞을 때만 메시를 적용한다. |
|
|
에셋 레퍼런싱의 중요성 및 선택 기준
- 메모리 최적화: 소프트 레퍼런스는 게임의 메모리 사용량을 크게 줄일 수 있는 핵심적인 방법입니다. 특히 거대한 오픈월드 게임이나 에셋이 많은 게임에서 특정 구역에 진입했을 때만 해당 구역의 에셋을 로드하는 등, 효율적인 메모리 관리가 필수적입니다.
- 초기 로딩 시간: 게임 시작 시 모든 에셋을 한꺼번에 로드하는 대신, 필요한 에셋만 점진적으로 로드함으로써 초기 로딩 시간을 단축하여 플레이어 경험을 향상시킬 수 있습니다.
-
하드 레퍼런스
- 게임 실행 내내 항상 필요한 필수 에셋 (예: 플레이어 캐릭터의 기본 모델, UI 기본 요소).
- 작은 규모의 게임이나 특정 액터가 항상 동일한 소수의 에셋만 사용하는 경우.
- 즉각적인 에셋 접근이 필요한 경우 (로딩 지연이 허용되지 않을 때).
-
소프트 레퍼런스
- 레벨 로딩 시점에 필요하지 않지만, 게임 플레이 도중 동적으로 로드되어야 할 에셋 (예: 특정 상호작용 시 나타나는 아이템 모델, 특정 효과음, 스킬 이펙트).
- 플레이어의 선택에 따라 달라지는 에셋 (예: 캐릭터 커스터마이징 의상).
- 큰 규모의 에셋이 많아 메모리 관리가 중요한 경우.
에셋 레퍼런싱은 단순히 변수 타입 선택을 넘어, 게임의 성능과 사용자 경험에 직접적인 영향을 미치는 중요한 최적화 개념입니다.
어떤 에셋을 언제 메모리에 로드할지 신중하게 계획하는 것이 효율적인 게임 개발의 핵심입니다.
이번 절에서는 에셋 레퍼런싱의 기본 개념, 즉 하드 레퍼런스와 소프트 레퍼런스의 차이점과 블루프린트에서의 활용법에 대해 알아보았습니다.
이 개념을 통해 게임의 메모리 사용량과 로딩 시간을 최적화할 수 있습니다.