10.23 - TIL

김혁·2025년 10월 23일

TIL

목록 보기
41/84

오늘의 코드카타

오늘의 공부

학습한 강의

  1. AI를 활용한 간단한 스텔스 게임 실습
    (1) 게임 기획 : 간단하게 만들 게임의 전체적인 기획
    (2) 게임의 간단한 레벨 디자인 : 엘리베이터 및 문 설계
    (3) 플레이어 캐릭터 구현 : 스킬 및 기본 능력 구현

오늘의 CS

언리얼 엔진의 에셋 참조

하드 참조 (Hard Reference)

  • 전통적인 C++ 포인터(raw pointer(*) 또는 TObjectPtr)를 사용하여 에셋을 직접 가리키는 방식
  • 특징
    • 즉시 로드 : 에셋을 포함하는 액터/클래스가 메모리에 로드되는 순간, 하드 참조된 에셋도 즉시 메모리에 로드됨
    • 로드 시간 영향 : 하드 참조가 많으면 많을수록 맵 로드 시간이나 클래스 인스턴스화 시간이 길어짐
    • 가비지 컬렉션 방지 : 하드 참조가 존재하는 한, 해당 에셋은 가비지 컬렉션의 대상이 되지 않음
    • 주 사용처 : 게임 플레이 중 항상 필요하고 빠른 접근이 필수적인 핵심 에셋 (예: 캐릭터 메시, 주요 애니메이션 블루프린트)

소프트 참조 (Soft Reference)

  • 에셋 자체를 직접 가리키는 포인터 대신, 에셋의 경로 정보를 저장하여 필요할 때 동적으로 로드하는 방식
  • TSoftObjectPtr(단일 에셋 참조) 또는 TSoftClassPtr(클래스 블루프린트 참조)를 사용
  • 특징
    • 지연 로드 : 액터/클래스가 로드될 때, 소프트 참조된 에셋은 자동으로 로드되지 않음. 메모리에는 에셋의 경로 문자열만 존재
    • 로드 시간 최적화 : 맵 로드나 클래스 인스턴스화 시간을 단축시켜 줌. 에셋이 필요해질 때 비동기적으로 로드함
    • 가비지 컬렉션 대상 : 소프트 참조는 에셋의 로드를 방해하지 않기 때문에, 다른 곳에서 하드 참조되지 않는 한 가비지 컬렉션의 대상이 됨
    • 주 사용처 : 게임 플레이 중 선택적으로 필요하거나 즉시 접근이 필수가 아닌 에셋 (예: 레벨에서만 사용되는 사운드, 레벨 스트리밍)

소프트 참조를 사용해야 하는 이유

  • 게임의 실시간 성능과 메모리 예산(Memory Budget)을 최적화하기 위해 적절히 구분하여 사용해야 함
  • 하드 참조만 과도하게 사용하면 게임 로딩, 특히 중간에 플레이어가 입장하게 되면 멈춤 현상이나 히치가 발생할 가능성이 매우 높음

  • 하드 참조의 위험성
    • 액터가 스폰되는 순간 연쇄적으로 모든 에셋이 로드되면서 CPU가 로드 작업에 묶여 히치가 발생함
    • 새로운 플레이어가 세션에 참여할 때, 그 플레이어가 필요한 모든 에셋을 동기적으로 로드해야 하기 때문에 접속 시간이 길어지거나 랙이 발생함
    • 사용하지 않는 에셋이 메인 메모리에 상주하여 메모리 예산을 초과하게 만들 수 있음
  • 비동기 로드 과정
    1. 로드 요청 : 플레이어가 에셋이 필요하면 LoadAsset()을 통해 비동기 로드를 요청함
    2. 백그라운드 처리 : 로드 작업은 백그라운드 스레드에서 처리되므로, 메인 게임 스레드가 멈추지 않아 히치가 발생하지 않음
    3. 로드 완료 콜백 : 로드가 완료되면 콜백 함수가 실행되어 로드된 에셋을 안전하게 사용할 수 있음

  • 하드 참조 예시 : 캐릭터의 기본 무기, 게임 모드의 핵심 클래스
  • 소프트 참조 예시 : 캐릭터의 스킨/파츠, 특수 능력의 이펙트
profile
게임 개발자를 향해..

0개의 댓글