소프트 포인터와 약한 포인터 정보

다음 포인터 유형 사용

TSoftObjectPtr : 이 경로를 통해 로드되거나 로드되지 않을 수 있는 개체를 참조하는 데 사용됩니다.

로드되지 않은 경우에도 액터의 다른 레벨을 가리킬 수 있습니다.

메시와 같은 특수 목적을 위해 자산을 비동기식으로 로드하는 기능. 블루프린트의 Soft Object Reference Blueprint 변수 유형과 같은 용도로 사용됩니다.

TSoftClassPtr : 이 경로를 통해 로드되거나 로드되지 않을 수 있는 클래스를 참조하는 데 사용됩니다.

일단 로드되면 사용자는 이를 사용하여 인스턴스를 생성할 수 있습니다.

이러한 함수를 비동기적으로 로드하는 데 사용됩니다.

청사진에서는 청사진 변수 유형을 참조하는 소프트 클래스와 동일하게 작동합니다.

TWeakObjectPtr: 인스턴스화된 개체를 참조하는 데 사용됩니다.

객체가 파괴되거나 가비지 수집되면 null 값을 가집니다.

이러한 포인터 유형을 사용하지 마십시오.

  • FSoftObjectPath : 다른 포인터 유형에 의해 내부적으로 사용됩니다.

    결과를 캐시하지 않기 때문에 느립니다.

    에디터에서 설정하면 UBlueprintGeneratedClass 대신 UBlueprint 클래스를 가리킬 것인데, 이는 일반적으로 게임 코드가 원하는 것이 아닙니다.

    그러나 편집기 플러그인 제작자는 해당 기능이 필요할 수 있습니다.

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

    지금은 대부분 레거시 유형입니다.

  • FSoftObjectPtr : TSoftObjectPtr의 비 템플릿 및 비 BP 공개 버전.

약한 포인터와 소프트 포인터

기존 UObject에 대한 약한 포인터를 만듭니다.

이 UObject는 GUObject 배열 인덱스에서 생성된 UObject입니다.

약한 포인터는 가리키는 대상이 가비지 수집되었는지 여부를 알 필요가 없기 때문에 UPROPERTY로 지정할 필요가 없습니다.

소프트 포인터 로드하거나 로드하지 않을 수 있습니다 개체 또는 자산 경로의 문자열 표현입니다.

개체를 쿼리하고 찾은 후 해당 개체를 추적하기 위해 추가 약한 포인터를 내부적으로 저장합니다.

소프트 포인터

FSoftObjectPath

게임 코드 FSoftObjectPath 변수를 직접 만들지 마십시오. . 확인된 개체를 캐시하지 않으므로 각 쿼리는 개체를 다시 검색합니다.

그리고 생성된 클래스( UBlueprintGeneratedClass 경로 이름에서 _씨 “) 청사진 클래스 자산 대신( 청사진 ). U 청사진은 패키지 빌드에서 제거되었습니다.

TSoftObjectPtr 또는 TSoftClassPtr 사용 .

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

블루프린트에서 소프트 오브젝트 경로 변수를 생성하는 것이 가능하지만, 무엇을 하는지 알고 UBlueprintGeneratedClass를 사용합니다.

클래스를 가리키고 싶지 않습니다.

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

블루프린트에서 사용하는 경우 오브젝트 인스턴스가 아닌 디스크의 자산만 선택할 수 있습니다.

인스턴스를 가리킨다 TSoftObjectPtr 사용

FSoftObjectPath는 템플릿이 아닙니다.

자산 유형별 선택 제한 메타클래스 U 속성 메타데이터(또는 그 기능 대신 TSoftClassPtr 사용).

개체를 구문 분석할 때 해시를 사용하여 검색합니다.

일반 포인터나 WeakPointer에 비해 약간의 오버헤드가 있습니다.

확장 클래스는 일반적으로 이를 캐시하므로 일단 해결되면 검색될 때 다시 검색되지 않습니다.

F 소프트 클래스 경로

FSoftObjectPath와 거의 동일하지만 로딩과 관련된 도우미 기능이 있습니다.

이것은 대부분 레거시 시스템이므로 직접 만드는 대신 TSoftClassPtr을 사용하십시오.

FSoftObjectPtr

부드러운 개체 및 클래스 포인터의 기본 클래스입니다.

내부 파트너를 찾다 FSoftObjectPath 발견 시 캐시 FWeakObjectPtr은 예약되어 있습니다.

많은 기능이 있습니다 TPersistentObjectPtr 확장.

구조 그렇지 않으므로 청사진에서는 사용할 수 없으며 C++에서만 사용할 수 있습니다.

TSoftObjectPtr 또는 TSoftClassPtr 두 가지 확장 유형이 있습니다.

이러한 각 유형은 개체 인스턴스 또는 자산(CDO)을 가리키는 템플릿과 청사진에 표시되는 방법을 제공합니다.

대신 사용해야 합니다.

얻다() 당신이 전화하면 기본 클래스에서 호출 약한 포인터 먼저 이전에 캐시되었는지(PIE가 아닌 세션에서) 확인하고 그렇지 않은 경우 FSoftObjectPath.ResolveObject 찾기 개체를 호출합니다.

TSoftObjectPtr

FSoftObjectPtr용 템플릿 래퍼입니다.

청사진에서 사용할 수 있습니다.

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

디스크의 자산이든 레벨의 개체든 로드할 수 없는 콘텐츠를 가리키는 데 가장 적합합니다.

액터가 현재 로드되지 않은 다른 레벨에 있더라도 경로 값은 동일하게 유지됩니다.


TSoftObjectPtr이 아니라 이미 인스턴스화된 액터에 대한 참조 TWeakObjectPtr 그걸 써.

기본값은 청사진 유형으로 설정할 수 없습니다(청사진 유형을 사용하려는 경우 TSoftClassPtr 사용). 하지만 데이터 자산가리킬 수

이 값은 로드된 액터를 선택하여 인스턴스 세부 정보 창에서 설정하거나 현재 열려 있는 맵의 액터의 클래스 기본값에서 설정할 수 있습니다.

가리키는 객체가 로드되지 않았을 때 Get()이 호출되는 경우 널 포인터 두번째 반품 하다.

일단 로드되면 전체 이름이 일치하는 액터가 반환되고 향후 쿼리를 위해 캐시됩니다.

TSoftClassPtr

T 하위 클래스 그림 FSoftObjectPtr 블루프린트 서브클래스와 함께 사용하기 위한 템플릿 래퍼입니다.

U 속성 다음과 같이 사용할 수 있습니다.

.

로드된 청사진 유형( U 청사진 생성 수업 )를 나타내는 데 사용됩니다.

또한 클래스를 비동기적으로(또는 장애가 발생한 경우에도 동기적으로) 로드하는 데 사용할 수 있습니다.

데이터 자산인스턴스화되어서는 안되므로 데이터 자산에는 적용되지 않습니다.

이것에 대해
TSoftObjectPtr 대신 사용해야 합니다.

약한 포인터

소프트 포인터처럼 경로를 저장하지 않고 인스턴스화된 개체를 참조할 뿐입니다.

약한 포인터는 int32입니다.

개체 색인int32로 개체 일련 번호 두 개의 값만 저장됩니다.

Get을 호출할 때 먼저 ObjectIndex를 가져옵니다.

사용 GUObject 배열 존재하는 경우 객체를 가져옵니다.

“하지만 ObjectIndex는 32비트에 불과합니다.

액터를 계속 생성하고 소멸시키다 보면 쉽게 숫자가 부족해지겠죠? ? “ 좋은 질문. 예, 이론적으로는 가능하지만 항상 최대 수십만 개의 개체가 활성화되어 있기 때문에 해당 인덱스가 재사용됩니다.

그것 덕분에 인덱스 재사용의 경우 원하는 객체인지 확인 ObjectSerialNumber가 있습니다.

ObjectSerialNumber는 약한 포인터입니다.

물체 처음 가리킬 때만 할당됨 그렇지 않으면 0입니다.

스레드 안전 증분 int32 카운터입니다 .

” 시리즈 숫자가 부족하면 어떻게 합니까? “그것은 게임을 충돌시킵니다.

즉, 시퀀스 번호가 부족하기 전에 최대 2,147,483,647개의 고유 항목이 있습니다.

물체 에 대한 새로운 약한 포인터를 만들 수 있습니다.

이것은 대부분의 사용 사례에 충분하지만 매우 오래 실행되는 프로세스 또는 약한 포인터의 이상한 사용을 고려하십시오.

서수를 비교한 후 최종 UObject 확인됨() 아닌지 확인 그렇지 않으면 ( 죽임을 당하다 의 경우) 유효하지 않은 그렇지 않으면 객체가 반환됩니다.

따라서 약한 포인터 역참조는 항상 작동합니다.

물체 또는 그렇지 않으면 널 포인터 반드시 돌려받을 수 있습니다.

모든 대표는 개체 추가 / 바인딩 개체 기능을 사용할 때 약한 포인터 통과하다 물체 그래서 당신은 참조를 유지 소멸 중 구독 취소에 대한 걱정 없이 대리자를 안전하게 구독할 수 있습니다.

이것은 관리되지 않는 C++ 포인터를 사용하고 있습니다.

원본 파일 추가 / BindRaw 함수를 사용하는 것과는 반대로 물체 소중히 다루고 사용하지 않으려고 합니다.

UObject 이외의 C++ 클래스의 멤버 함수를 등록할 때 AddRaw / BindRaw를 사용하십시오.

요약하다

요약하다, 약한 포인터는 역참조할 때 약간의 오버헤드가 있습니다.

물체 이것은 훌륭하고 안전한 방법입니다.

그렇다고 약하지도 않다!
물체 가져오기 및 유효성 검사의 모든 하우스키핑을 처리하기 때문입니다.

재산 일할 필요가 없다 .

FWeakObjectPtr

메모리의 UObject에 대한 약한 포인터입니다.

구조 아니요 청사진에서는 사용할 수 없습니다.

C++에서만.

TWeakObjectPtr 예 기본 클래스입니다.

TWeakObjectPtr

흔한 FWeakObjectPtr 예 템플릿 버전 블루프린트에서 사용할 수 있지만 C++에서 선언해야 합니다.

내부적으로 개체의 문자열 표현을 사용하지 않더라도 인스턴스 세부 정보 창(클래스 기본값이 아님).

문자열 경로를 사용하지 않고 인스턴스화된 개체로만 설정할 수 있기 때문에 자산을 찾는 오버헤드를 건너뜁니다.

C++에서 인스턴스화된 UObject는 현재 어떤 레이어에 있는지는 중요하지 않습니다.

레이어가 로드되어 있는 한 가리킬 수 있습니다.

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

소프트 포인터와 약한 포인터에 대하여 | Tutorial

언리얼 엔진의 다양한 소프트 및 위크 포인터 유형을 자세히 살펴보세요.

dev.epicgames.com