icon
5장 : 기본 데이터 관리 기법

에셋 레퍼런싱의 기초


지금까지 게임 데이터를 저장하고 관리하는 다양한 방법을 살펴보았습니다. 하지만 게임에서 다뤄야 할 데이터 중에는 3D 모델, 텍스처, 사운드, 애니메이션, 블루프린트 에셋 등과 같이 파일 형태로 존재하는 리소스들이 있습니다. 이러한 리소스들을 에셋(Asset) 이라고 부르는데, 블루프린트나 C++ 코드에서 이 에셋들을 어떻게 참조하고 사용하는지 이해하는 것이 중요합니다. 이번 절에서는 에셋 레퍼런싱(Asset Referencing) 의 기본 개념과 그 활용법에 대해 알아보겠습니다.


에셋 레퍼런싱이란 무엇인가?

에셋 레퍼런싱은 블루프린트나 코드에서 게임 프로젝트 내의 특정 에셋(예: Static Mesh, Texture, Sound Wave, Blueprint Class 등)을 가리키는 방식을 의미합니다. 마치 파일 시스템에서 파일의 경로를 지정하여 파일을 찾아가는 것과 유사합니다.

언리얼 엔진에서 에셋 레퍼런스는 크게 두 가지 주요 형태로 나뉩니다.

  1. 하드 레퍼런스 (Hard Reference)

    • 개념: 특정 에셋에 대한 직접적인 참조를 의미합니다. 이 레퍼런스를 가진 블루프린트나 클래스가 메모리에 로드될 때, 참조하는 에셋도 무조건 함께 메모리에 로드됩니다.
    • 형식: Object Reference (예: Static Mesh Object Reference, Texture2D Object Reference, Blueprint Class Reference 등)
    • 예시: Set Static Mesh 노드의 New Mesh 핀에 직접 Static Mesh 에셋을 연결하는 경우.
    • 장점: 에셋에 즉시 접근하여 사용할 수 있어 편리하고, 런타임에 추가 로딩 지연이 없습니다.
    • 단점: 불필요한 에셋까지 미리 메모리에 로드될 수 있어 메모리 사용량이 증가하고, 초기 로딩 시간이 길어질 수 있습니다. 특히 대규모 프로젝트에서는 심각한 메모리 문제가 발생할 수 있습니다.
  2. 소프트 레퍼런스 (Soft Reference)

    • 개념: 특정 에셋의 경로(Path) 에 대한 참조를 의미합니다. 이 레퍼런스를 가진 블루프린트나 클래스가 메모리에 로드될 때, 참조하는 에셋은 자동으로 로드되지 않습니다. 에셋이 실제로 필요할 때 명시적으로 로드 명령을 내려야만 메모리에 올라옵니다.
    • 형식: Soft Object Reference (예: Static Mesh Soft Object Reference, Texture2D Soft Object Reference, Soft Class Reference 등)
    • 예시: 아이템의 아이콘 이미지를 Soft Texture2D Reference 변수에 저장하고, 아이템이 인벤토리 창에 표시될 때만 해당 이미지를 로드하여 사용하는 경우.
    • 장점: 메모리 사용량을 최적화하고 초기 로딩 시간을 줄일 수 있습니다. 필요한 에셋만 필요할 때 로드하므로 유연성이 높습니다.
    • 단점: 에셋을 사용하기 전에 명시적으로 로딩하는 과정이 필요하며, 이 로딩 과정에서 약간의 지연이 발생할 수 있습니다.

블루프린트에서 에셋 레퍼런싱 활용

하드 레퍼런스 사용법

하드 레퍼런스는 변수 타입 설정 시 Object Reference를 선택하여 사용합니다.

  1. 변수 생성
    • 블루프린트 에디터를 엽니다.
    • 변수 패널에서 새 변수를 추가합니다.
    • 변수 유형Static Mesh Object Reference로 설정하고 이름을 MyMesh라고 지정합니다.
    • 디테일 패널에서 MyMesh 변수 옆의 드롭다운을 클릭하여 사용하고 싶은 Static Mesh 에셋(예: Shape_Cube)을 직접 지정합니다.
  2. 활용
    • Event BeginPlay나 다른 이벤트에서 Static Mesh ComponentSet Static Mesh 노드를 사용하고, New Mesh 핀에 MyMesh 변수(Get 노드)를 연결합니다.
    • 컴파일하고 플레이하면, 액터에 지정된 큐브 메시지가 적용된 것을 볼 수 있습니다.

소프트 레퍼런스 사용법 (비동기 로딩)

소프트 레퍼런스는 변수 타입 설정 시 Soft Object Reference를 선택하여 사용하며, 사용할 때 Load Asset 노드가 필요합니다.

  1. 변수 생성
    • 블루프린트 에디터를 엽니다.
    • 변수 패널에서 새 변수를 추가합니다.
    • 변수 유형Soft Static Mesh Object Reference로 설정하고 이름을 MySoftMesh라고 지정합니다.
    • 디테일 패널에서 MySoftMesh 변수 옆의 드롭다운을 클릭하여 사용하고 싶은 Static Mesh 에셋(예: Shape_Cylinder)을 직접 지정합니다. (하드 레퍼런스와 동일하게 에디터에서 연결합니다.)
  2. 활용 (비동기 로딩)
    • Event BeginPlay에서 MySoftMesh 변수(Get 노드)를 가져옵니다.
    • MySoftMesh 출력 핀에서 드래그하여 Load Asset 노드를 검색하고 선택합니다.
      • Load Asset 노드는 비동기로 작동하며, 에셋 로딩이 완료되면 Completed 실행 핀이 활성화됩니다.
    • Load Asset 노드의 Completed 실행 핀 뒤에 Static Mesh ComponentSet Static Mesh 노드를 연결합니다.
    • Load Asset 노드의 Loaded Asset 출력 핀을 Set Static Mesh 노드의 New Mesh 핀에 연결합니다. (필요하다면 Cast 노드를 통해 Static Mesh 타입으로 캐스팅합니다.)
    • 참고: Load Asset 노드 외에 Async Load Asset 노드도 사용할 수 있으며, 이는 좀 더 복잡한 비동기 로딩 로직에 사용됩니다.

에셋 레퍼런싱의 중요성 및 선택 기준

  • 메모리 최적화: 소프트 레퍼런스는 게임의 메모리 사용량을 크게 줄일 수 있는 핵심적인 방법입니다. 특히 거대한 오픈월드 게임이나 에셋이 많은 게임에서 특정 구역에 진입했을 때만 해당 구역의 에셋을 로드하는 등, 효율적인 메모리 관리가 필수적입니다.
  • 초기 로딩 시간: 게임 시작 시 모든 에셋을 한꺼번에 로드하는 대신, 필요한 에셋만 점진적으로 로드함으로써 초기 로딩 시간을 단축하여 플레이어 경험을 향상시킬 수 있습니다.

언제 어떤 레퍼런싱을 사용해야 할까요?

  • 하드 레퍼런스

    • 게임 실행 내내 항상 필요한 필수 에셋 (예: 플레이어 캐릭터의 기본 모델, UI 기본 요소).
    • 작은 규모의 게임이나 특정 액터가 항상 동일한 소수의 에셋만 사용하는 경우.
    • 즉각적인 에셋 접근이 필요한 경우 (로딩 지연이 허용되지 않을 때).
  • 소프트 레퍼런스

    • 레벨 로딩 시점에 필요하지 않지만, 게임 플레이 도중 동적으로 로드되어야 할 에셋 (예: 특정 상호작용 시 나타나는 아이템 모델, 특정 효과음, 스킬 이펙트).
    • 플레이어의 선택에 따라 달라지는 에셋 (예: 캐릭터 커스터마이징 의상).
    • 큰 규모의 에셋이 많아 메모리 관리가 중요한 경우.

에셋 레퍼런싱은 단순히 변수 타입 선택을 넘어, 게임의 성능과 사용자 경험에 직접적인 영향을 미치는 중요한 최적화 개념입니다. 어떤 에셋을 언제 메모리에 로드할지 신중하게 계획하는 것이 효율적인 게임 개발의 핵심입니다.


이번 절에서는 에셋 레퍼런싱의 기본 개념, 즉 하드 레퍼런스와 소프트 레퍼런스의 차이점과 블루프린트에서의 활용법에 대해 알아보았습니다. 이 개념을 통해 게임의 메모리 사용량과 로딩 시간을 최적화할 수 있습니다.