UE5

All about Soft and Weak pointers (소프트 포인터와 약한 포인터의 모든 것)

게임 개발 2024. 8. 27. 17:25

 

 

 

다음 포인터 유형을 사용하세요

 

  • TSoftObjectPtr :
    경로를 통해 로드되거나 로드되지 않을 수 있는 객체를 참조하는 데 사용합니다.
    로드되지 않았더라도 다른 레벨의 액터를 가리킬 수 있습니다.
    에셋(메쉬 등)을 pointing하며 애셋을 임시로 로드할 때 비동기 로드 기능과 함께 사용할 수 있습니다.
    블루프린트 변수 유형인 "Soft Object Reference"과 동일합니다.
  •  TSoftClassPtr :
    로드되거나 로드되지 않을 수 있는 클래스 또는 Blueprint 유형을 참조하는 데 사용됩니다.
    로드되면 인스턴스를 만들 수 있는 클래스 유형이 제공됩니다.
    비동기 로딩 함수와 함게 사용하여 로드할 수 있습니다.
    "Soft Class Reference" 청사진 변수 유형과 동일합니다.
  • TWeakObjectPtr :
    이미 인스턴스화된 객체를 참조하는 데 사용됩니다.
    객체가 파괴되거나 garbage collected되면 null로 확인됩니다.

 

 

이 포인터 유형을 사용하지 마세요

 

  • FSoftObjectPath : 
    다른 포인터 유형에서 내부적으로 사용됩니다. 이는 결과를 캐시하지 않으므로 느립니다.
    Editor 에서 설정하면 UBlueprintGeneratedClass 대신
    UBlueprint 클래스를 가리키게 되는데, 이는 일반적으로 게임플레이 코드에서 원하는 것이 아닙니다.
    하지만 Editor 플러그인 제작자는 이 기능을 원할 수 있습니다.
  • FSoftClassPath :
    FSoftObjectPath와 동일하지만 클래스 로딩과 관련된 일부 도우미 함수가 있습니다.
    현재는 대부분 레거시 유형입니다.
  • FSoftObjectPtr : 
    TSoftObjectPtr의 템플릿 기반이 아니고 BP에 노출되지 않는 버전입니다.

 

Weak Pointer vs Soft Pointer

 

Weak Pointer 는 GUObjectArray 인덱스를 사용하여 이미 인스턴스화된 기존
UObject를 가리키도록 생성되거나 설정됩니다.

포인터는 가리키는 객체가 가비지 수집되었는지 알기 위해 UPROPERTY일 필요가 없습니다.

 

Soft Pointer는 로드될 수도 있고 로드되지 않을 수도 있는 객체나 자산의 경로에 대한 문자열 표현이다.

객체가 쿼리되고 발견된 후 추적하기 위해 내부적으로 추가적인 Weak Pointer를 저장합니다.

(편집기 없는 빌드에서)

 

 

Soft Pointer

 

거의 대부분의 경우에 TSoftObjectPtr 또는 TSoftClassPtr을 사용해야 하지만,

모든 관련 클래스에 대한 설명은 아래에 나와 있습니다.

 

 

FSoftObjectPath

 

게임플레이 코드에 대한 FSoftObjectPath 변수를 직접 만들지 마세요.

해결된 객체를 캐시하지 않으므로 모든 쿼리가 객체를 다시 검사합니다.

또한 생성된 클래스 (UBlueprintGeneratedClass, 경로 이름에 "_C")

대신 블루프린트 클래스 자산(UBlueprint)을 가리킵니다.

UBlueprint는 패키지 빌드에서 제거됩니다.

TSoftObjectPtr 또는 TSoftClassPtr을 사용하세요.

 

인스턴스 세부 정보 / 클래스 기본값 보기의 FSoftObjectPath

 

 

모든 유형의 소프트 포인터에서 내부적으로 사용됩니다.

소프트 객체 경로 변수는 블루프린트에서 생성할 수 있지만 무엇을 하는지 알고

UBlueprintGeneratedClass 클래스를 가리키고 싶지 않으며

캐싱이 필요하지 않은 편집이 유틸리티에서만 수행해야 합니다.

 

Blueprint에서 사용하면 디스크 자산만 선택할 수 있고,

객체 인스턴스는 선택할 수 없습니다. 인스턴스를 가리키려면 TSoftObjectPtr 를 사용합니다.

 

템플릿화되지 않았습니다.

자산 유형으로 선택을 제한하려면 MetaClass UProperty 메타데이터를 사용할 수 있습니다

(또는 그런 종류의 기능에 대해 TSoftClassPtr을 대신 사용).

 

 

FSoftClassPath

FSoftObjectPath와 동일 하지만 클래스 로딩과 관련된 일부 도우미 함수가 있습니다.

현재는 대부분 레거시 유형입니다. 직접 만들지 말고 대신 TSoftClassPtr을 사용하세요.

 

 

FSoftObjectPtr

소프트 -object 및 -class 포인터의 기본 클래스입니다.

FSoftObjectPath 와 객체를 찾은 후 캐싱하기 위한 FWeakObjectPtr을 유지합니다.

 

많은 기능이 들어 있는 TPersistentObjectPtr를 확장합니다.

USTRUCT가 아니므로 Blueprint에서 사용할 수 없습니다. C++만 가능합니다.

 

두 가지 확장 유형인 TSoftObjectPtr 또는 TSoftClassPtr이 있으며,

이는 각각 객체 인스턴스 또는 자산(CDO)을 가리키는 템플릿화된 BP 가시적 방식을 제공합니다.

대신 사용해야 합니다.

 

Get()을 호출하면 기본 클래스에서 이를 호출하는데,

기본 클래스는 먼저 내부 WeakPtr가 이전에 캐시되었는지(PIE 세션이 아닌 경우) 확인하고,

그렇지 않으면 FSoftObjectPath.ResolveObject를 호출하여 개체를 찾습니다.

 

 

TSoftObjectPtr

인스턴스 세부 정보 / 클래스 기본값 보기의 TSoftObjectPtr
블루프린트로 소프트 객체 포인터 만들기

 

일반 FSoftObjectPtr의 템플릿화된 래퍼런스 블루프린트에서 사용할 수 있습니다.

경로 이름이 있는 모든 것을 가리키는 데 사용할 수 있습니다.

디스크 자산이든 모든 레벨의 객체이든 로드되지 않을 수 있는 것을 가리키는 데 가장 적합합니다.

 

이미 로드되지 않은 모든 레벨의 객체를 가리킬 수 있기 때문에 크로스 레벨 통신에 매우 강력하지만,

제 생각에는 사용 빈도가 그렇게 높지 않았습니다.

 

액터는 현재 로드되지 않는 다른 레벨에 있지만 속성은 여전히 경로 값을 유지합니다.

 

 

이미 인스턴스화된 액터를 참조하려면 대신 TWeakObjectPtr을 사용하세요.

 

편집기의 기본값은 Blueprint 유형으로 설정할 수 없습니다( 대신 TSoftClassPtr 사용 ).

하지만 Data Assets를 가리킬 수는 있습니다.

 

값은 로드된 액터를 선택하여 인스턴스 세부 정보 창에서 설정하거나,

현재 열려 있는 맵에 있는 모든 액터의 클래스 기본값에서 설정할 수 있습니다.

 

출저

https://dev.epicgames.com/community/learning/tutorials/kx/unreal-engine-all-about-soft-and-weak-pointers

'UE5' 카테고리의 다른 글

Experience  (1) 2024.09.07
StaticClass, TSubClassOf, FSoftObjectPath, FScopeLock  (2) 2024.09.06
UBlueprintFunctionLibrary  (0) 2024.08.21
Conditional Door(player needed key) & bullet shooting  (0) 2024.06.20
Game Timer & Time Slow Skill  (0) 2024.06.11