본문으로 건너뛰기

안동민 개발노트

본문 시작

에셋 레퍼런싱의 기초

하드 참조와 소프트 참조의 로딩 시점·메모리 영향을 비교하고 상황에 맞는 에셋 참조 방식을 선택합니다.

지금까지는 게임 데이터를 저장/관리하는 방법을 살펴봤습니다.

하지만 실제 프로젝트에서는 3D 모델, 텍스처, 사운드, 애니메이션, 블루프린트처럼 파일 형태의 리소스도 다뤄야 합니다.

이 리소스를 에셋(Asset)이라 부르며, 블루프린트나 C++ 코드에서 어떻게 참조하고 사용하는지 이해하는 것이 중요합니다.

이번 절에서는 에셋 레퍼런싱(Asset Referencing)의 기본 개념과 활용법을 정리합니다.


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

에셋 레퍼런싱은 블루프린트나 코드에서 게임 프로젝트 내의 특정 에셋(예: Static Mesh, Texture, Sound Wave, Blueprint Class 등)을 가리키는 방식을 의미합니다.

마치 파일 시스템에서 파일의 경로를 지정하여 파일을 찾아가는 것과 유사합니다.

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

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

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

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

변수 생성
  • 블루프린트 에디터를 엽니다.
  • 변수 패널에서 새 변수를 추가합니다.
  • 변수 유형Soft Static Mesh Object Reference로 설정하고 이름을 MySoftMesh라고 지정합니다.
  • 디테일 패널에서 MySoftMesh 변수 옆의 드롭다운을 클릭하여 사용하고 싶은 Static Mesh 에셋(예: Shape_Cylinder)을 직접 지정합니다. (하드 레퍼런스와 동일하게 에디터에서 연결합니다.)
활용 (비동기 로딩)
  • 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 노드도 사용할 수 있으며, 이는 좀 더 복잡한 비동기 로딩 로직에 사용됩니다.

소프트 레퍼런스는 변수에 경로가 들어 있는 상태와 실제 에셋이 메모리에 준비된 상태를 분리해서 생각해야 합니다.

경로를 저장하고 필요할 때만 에셋을 로드한다

소프트 레퍼런스 변수는 에셋 경로를 들고 있을 뿐이므로, 실제 사용은 로드 완료 이후 단계에서 처리합니다.

  1. 1
    경로 준비

    path Soft Object Reference에 에셋 경로만 보관됩니다.

  2. 2
    Load Asset

    request 필요한 순간에 로드 노드를 호출합니다.

  3. 3
    Loading

    wait 비동기 처리 중에는 임시 표시나 입력 제한을 둡니다.

  4. 4
    Completed

    done Loaded Asset 핀으로 실제 에셋을 적용합니다.

  5. 5
    성공 경로

    Loaded Asset을 필요한 타입으로 확인한 뒤 Static Mesh, Texture, Sound에 적용합니다.

  6. 6
    실패 경로

    경로 누락이나 캐스팅 실패를 기록하고 Placeholder 에셋이나 빈 상태로 폴백합니다.


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

아래 다이어그램은 하드 참조와 소프트 참조를 고를 때 로딩 시점, 메모리 비용, 실패 처리 기준을 함께 보는 흐름을 정리한 것입니다.

Hard Reference와 Soft Reference는 로딩 시점이 다르다

Hard는 참조한 에셋을 함께 끌고 오고, Soft는 경로만 들고 있다가 필요할 때 로드한다.

  1. Hard Reference

    항상 필요한 핵심 에셋 블루프린트 로드 때 함께 로드

  2. Soft Reference

    선택적 스킨, 큰 아이콘 필요할 때 경로로 로드

  3. Async Load

    게임 중 끊김을 줄임 완료 콜백에서 적용

선택 기준의미
좋은 hard항상 쓰는 작은 메시나 핵심 클래스
좋은 soft자주 안 쓰는 큰 에셋, DLC, 선택형 UI 이미지

하드/소프트 레퍼런스를 고를 때는 사용 빈도, 에셋 크기, 로딩 지연, 실패 처리를 함께 확인해야 합니다.

에셋 레퍼런스는 로드 시점과 메모리 영향으로 선택한다

블루프린트 변수가 에셋을 가리킬 때 중요한 질문은 지금 함께 로드할지, 필요할 때 경로로 찾아올지다.

  1. Hard Reference

    즉시 사용 소유 블루프린트가 로드될 때 연결된 에셋도 함께 메모리에 올라간다. 기본 캐릭터, 공통 UI, 항상 보이는 메시처럼 실패하면 안 되는 에셋에 맞다.

  2. Soft Reference

    지연 로드 에셋 경로만 들고 있다가 Load Asset 같은 노드로 필요할 때 불러온다. 아이템 아이콘, 스킬 이펙트, 지역 전용 메시처럼 상황별 에셋에 유리하다.

  3. 선택 전에 확인할 네 가지

    매번 필요하면 하드, 드물게 필요하면 소프트가 기본값이다. 02 큰 텍스처와 이펙트는 초기 메모리 예산을 먼저 확인한다. 03 사용 직전 로딩 시간이 보이면 미리 로드하거나 하드로 둔다. 04 소프트 로드는 로드 실패와 대체 에셋 경로를 함께 설계한다.

  4. 사용 빈도

    매번 필요하면 하드, 드물게 필요하면 소프트가 기본값이다.

  5. 에셋 크기

    큰 텍스처와 이펙트는 초기 메모리 예산을 먼저 확인한다.

  6. 지연 허용

    사용 직전 로딩 시간이 보이면 미리 로드하거나 하드로 둔다.

  7. 실패 처리

    소프트 로드는 로드 실패와 대체 에셋 경로를 함께 설계한다.

에셋을 실제 프로젝트에 배치할 때는 "언제 필요한가"와 "없어도 진행 가능한가"를 먼저 나누면 선택이 쉬워집니다.

필수 에셋은 하드, 선택 에셋은 소프트

메모리 상주 여부와 실패 허용도를 먼저 판단합니다.

  1. 항상 필요한가

    always 플레이어 기본 메시나 핵심 UI는 하드 레퍼런스가 단순합니다.

  2. 큰 에셋인가

    large 희귀 스킨, 고해상도 텍스처는 필요할 때 로드합니다.

  3. 나중에 보여도 되나

    late 인벤토리 미리보기처럼 지연이 가능하면 소프트가 유리합니다.

  4. 대체 표시가 있나

    fallback 로드 실패 시 기본 아이콘이나 빈 슬롯을 준비합니다.

  • 메모리 최적화: 소프트 레퍼런스는 게임의 메모리 사용량을 크게 줄일 수 있는 핵심적인 방법입니다. 특히 거대한 오픈월드 게임이나 에셋이 많은 게임에서 특정 구역에 진입했을 때만 해당 구역의 에셋을 로드하는 등, 효율적인 메모리 관리가 필수적입니다.
  • 초기 로딩 시간: 게임 시작 시 모든 에셋을 한꺼번에 로드하는 대신, 필요한 에셋만 점진적으로 로드함으로써 초기 로딩 시간을 단축하여 플레이어 경험을 향상시킬 수 있습니다.
언제 어떤 레퍼런싱을 사용해야 할까요?
  • 하드 레퍼런스
    • 게임 실행 내내 항상 필요한 필수 에셋 (예: 플레이어 캐릭터의 기본 모델, UI 기본 요소).
    • 작은 규모의 게임이나 특정 액터가 항상 동일한 소수의 에셋만 사용하는 경우.
    • 즉각적인 에셋 접근이 필요한 경우 (로딩 지연이 허용되지 않을 때).
  • 소프트 레퍼런스
    • 레벨 로딩 시점에 필요하지 않지만, 게임 플레이 도중 동적으로 로드되어야 할 에셋 (예: 특정 상호작용 시 나타나는 아이템 모델, 특정 효과음, 스킬 이펙트).
    • 플레이어의 선택에 따라 달라지는 에셋 (예: 캐릭터 커스터마이징 의상).
    • 큰 규모의 에셋이 많아 메모리 관리가 중요한 경우.

에셋 레퍼런싱은 단순히 변수 타입 선택을 넘어, 게임의 성능과 사용자 경험에 직접적인 영향을 미치는 중요한 최적화 개념입니다.

어떤 에셋을 언제 메모리에 로드할지 신중하게 계획하는 것이 효율적인 게임 개발의 핵심입니다.


이번 절에서는 에셋 레퍼런싱의 기본 개념, 즉 하드 레퍼런스와 소프트 레퍼런스의 차이점과 블루프린트에서의 활용법에 대해 알아보았습니다.

이 개념을 통해 게임의 메모리 사용량과 로딩 시간을 최적화할 수 있습니다.

마지막으로 하드 레퍼런스와 소프트 레퍼런스를 선택할 때의 로딩, 메모리, 실패 처리 기준을 정리합니다.

Hard Reference와 Soft Reference 선택 기준

에셋을 즉시 써야 하는지, 필요할 때 비동기로 불러와도 되는지에 따라 참조 방식과 로딩 위치가 달라집니다.

  1. 참조는 메모리와 로딩의 약속

    블루프린트 변수에 에셋을 직접 꽂으면 함께 로드되고, Soft Reference는 경로만 보관하다가 필요한 순간 로드합니다. 01 캐릭터 기본 메시, 항상 필요한 머티리얼, 필수 사운드는 Hard Reference로 단순하게 유지합니다. 02 상점 아이콘, 선택형 스킨, 큰 레벨 프롭은 Soft Object Reference와 Async Load Asset으로 로딩 시점을 늦춥니다. 03 비동기 완료 핀 뒤에서 Is Valid를 확인하고, 실패 시 기본 메시나 플레이스홀더 아이콘으로 대체합니다.

  2. 참조는 메모리와 로딩의 약속

    블루프린트 변수에 에셋을 직접 꽂으면 함께 로드되고, Soft Reference는 경로만 보관하다가 필요한 순간 로드합니다.

  3. 즉시 사용

    캐릭터 기본 메시, 항상 필요한 머티리얼, 필수 사운드는 Hard Reference로 단순하게 유지합니다.

  4. 지연 사용

    상점 아이콘, 선택형 스킨, 큰 레벨 프롭은 Soft Object Reference와 Async Load Asset으로 로딩 시점을 늦춥니다.

  5. 사용 전 확인

    비동기 완료 핀 뒤에서 Is Valid를 확인하고, 실패 시 기본 메시나 플레이스홀더 아이콘으로 대체합니다.

에셋 레퍼런싱에서 하드 참조와 소프트 참조를 고르는 기준을 추가합니다.

하드와 소프트 참조는 사용 빈도와 로딩 비용으로 고른다

항상 필요한 에셋은 Hard, 가끔 필요한 큰 에셋은 Soft, 게임 중 불러올 에셋은 Async Load가 맞다.

질문판정
항상 화면에 필요한가?Hard Reference가 단순하다.
에셋이 크고 드문가?Soft Reference로 경로만 보관한다.
플레이 중 로드해야 하나?Async Load로 완료 후 적용한다.
로딩 실패를 처리해야 하나?Soft/Async 경로에는 실패 UI나 기본 에셋을 둔다.

에셋 레퍼런싱은 하드 참조와 소프트 참조의 로딩 시점을 구분하고, 적용 전에 로드 완료와 실패 가능성을 확인해야 합니다.

에셋 로딩 전략은 경로, 요청, 완료 처리로 나눈다

Soft Reference를 쓰면 로드 요청과 완료 시점이 분리되므로 대기 UI와 실패 처리를 함께 둔다.

  1. Soft Path

    에셋 경로만 보관

  2. Request Load

    비동기 로드 시작

  3. Loading State

    버튼 잠금 또는 플레이스홀더 표시

  4. Completed

    성공 시 에셋 적용

  5. Fallback

    실패 시 기본 에셋 사용

점검기준
검수로드 완료 전에 에셋을 사용하지 않는지 본다.
위험큰 에셋을 Hard로 잡아 초기 로딩과 메모리를 키운다.