본문 바로가기

UE5(언리얼)

[언리얼5/UE5] Hard/Soft Reference

반응형

Blueprint에서는 내가 BP_ThirdPersonCharacter를 상속 받은 TestActor를 로드하려면
BP_ThirdPersonCharacter 강제로 로드한다. 

 

근데  BP_ThirdPersonCharacterd의 크기고 상당한 것을 볼 수 있다. 그래서 규모가 큰 게임에서는 Blueprint를 지양하는 것이다. 그렇게 오브젝트 뿐 아니라 함수를 호출할 때도 동일하게 적용된다.

 

 

Hard Reference

 

Hard Reference는 직접 참조로, 참조된 모든 오브젝트를 즉시 로드한다.

예를 들어 BP_ThirdPersonCharacter에 다른 에셋을 Hard Reference로 설정하면 해당 캐릭터와 함께 모든 관련 에셋도 메모리에 로드된다.

 

장점

    • 오브젝트에 쉽게 접근 가능하며, 참조한 에셋이 이미 메모리에 있으므로 언제든지 사용 가능하다.
    • 게임 로직이나 기능이 언제든지 즉시 동작해야 하는 중요한 에셋에서 유용합니다.

단점

  • 모든 참조된 에셋이 한꺼번에 로드되므로 로딩 시간이 길어지거나 메모리 낭비가 발생할 수 있다. (로딩할 때 참조된 모든 정보를 로드해야되니까)

 

Soft Reference

Soft Reference는 필요할 때만 수동으로 로드할 수 있다. 참조된 에셋이 즉시 로드되지 않고, 실제로 사용할 때 비동기적으로 로드하는 방식이다.

 

장점

  • 필요한 시점에서만 에셋을 로드하므로 초기 메모리 소비를 줄이고 로딩 시간을 최적화할 수 있다.
  • 게임의 특정 상황에서만 필요한 에셋에는 유용하다.

 

단점

  • 매번 수동으로 로드해야 하므로 코드가 더 복잡해질 수 있다.
  • 타이밍 이슈가 발생할 수 있다. 특히 중요한 기능에서 Soft Reference를 잘못 관리하면 순간적으로 필요한 에셋이 로드되지 않아 문제를 일으킬 수 있습니다.

 

그래서 언제 무엇을 사용할까?


그래서 판단은 어떻게 하냐?

Hard Reference:  주요 에셋 (주요 캐릭터 애니메이션, UI)

Soft Reference: 지금 당장 필요하지 않은 에셋, 추가적인 기능에만 사용하는 에셋 (특정 이벤트의 특수 효과나 레벨 전환 시 등장하는 에셋들이 이에 해당할 수 있습니다. )

 

Blueprint의 사용을 최적화 방법

Blueprint에 로직을 부모 클래스에만 추가하기

BP의 부모 클래스에만 로직을 추가하면 자식 클래스에 불필요한 코드 중복을 줄이고, 메모리 사용과 로딩 시간을 최적화할 수 있다.

 

중요한 오브젝트와 기능은 C++로 구현하기

 

BP object reference 피하기

객체 간의 참조를 줄이거나 인터페이스를 이용하여 의존성을 최소화하자. 모든 오브젝트가 메모리에 로드되어 비효율적으로 프로그램이 실행될 수 있다!

 

반응형