Object Pooling 사용 이유
단편화 방지
매번 객체를 생성하고 지우고를 반복하면 메모리 단편화 생길 확률이 높아진다
그를 방지하기 위해 사용한다
연속적 지역성을 만들어준다
최초에 필요한 메모리가 크다는 단점이 있다
객체화 되면 안되는 클래스
UClass(Abastract)
Abstract를 붙이면 객체화 될 수 없는 클래스
카메라 애니메이션
마우스 오른쪽 클릭 -> 기타 -> 카메라 애님
Movement Track 추가로 카메라 움직임 저장
0초에 카메라 위치 기본 키 지우기
프리뷰 카메라 위치 설정하고 키추가 (엔터)
초 움직이고, 프리뷰 카메라 위치 정하고, 엔터
Soft Reference
soft object ptr
직접적으로 주소를 가지지 않는다
객체는 없지만 주소만 마킹해둔다
약연결
강참조와 약참조
강참조
object A가 object B를 참조하여 A를 로드시 B가 로드되게 만든다
직접 프로퍼티 참조
UPROPERTY(EditDefaultsOnly, Category=Building)
USoundCue* ConstructionStartStinger;
프로그래머가 UPROPERTY 로 노출, 디자이너는 블루프린트 상속 / 월드에 배치한 인스턴스로 아키타입을 지정한다
블루프린트가 로드될 때 마다 UPROPERTY의 일부로 참조되는 ConstructionStartStinger (USoundCue) 사운드 또한 자동으로 로드된다
생성 시간 참조
UPROPERTY()
class UTexture2D* BarFillTexture;
//생성자
AStrategyHUD::AStrategyHUD(const FObjectInitializer& ObjectInitializer) :
Super(ObjectInitializer)
{
static ConstructorHelpers::FObjectFinder<UTexture2D> BarFillObj(TEXT("/Game/UI/HUD/BarFill"));
...
BarFillTexture = BarFillObj.Object;
...
}
로드해야하는 에셋을 프로그래머가 정확히 알 경우, 오브젝트 생성시 프로퍼티를 설정하는 경우다
오브젝트가 로드 및 초기화되면 강참조된 에셋도 로드된다
메모리가 크게 불어날 수 있다
약참조
오브젝트 경로같은 문자열 형태의 간접 메커니즘을 통해 object A가 object B를 참조하게 만든다
로딩을 유예시키고 실행시간에 로드할 부분을 결정할 수 있다
간접 프로퍼티 참조
TSoftObjectPtr으로 에셋 로드 시점을 제어한다
에셋을 수동으로 로드해야한다
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category=Building)
TSoftObjectPtr<UStaticMesh> BaseMesh;
UStaticMesh* GetLazyLoadedMesh()
{
if (BaseMesh.IsPending())
{
const FSoftObjectPath& AssetRef = BaseMesh.ToStringReference();
BaseMesh = Cast< UStaticMesh>(Streamable.SynchronousLoad(AssetRef));
}
return BaseMesh.Get();
}
실행시간에 string을 만들어 오브젝트로의 레퍼런스를 구하려는 경우
FindObject<>()
이미 생성 또는 로드된 UObject 만 사용하려는 경우
LoadObject<>()
이미 로드되어 있지 않은 오브젝트를 로드하려는 경우
'> Project > Unreal4 C++' 카테고리의 다른 글
[Unreal4 C++] 공격하는 Enemy AI의 수 제한 (0) | 2024.01.27 |
---|---|
[Unreal4 C++] 베지에 곡선을 활용한 Boss_Skill (0) | 2023.11.01 |
[Unreal4 C++] 03 (0) | 2023.08.17 |
[Unreal4 C++] 02 Weapon Attachment, BackRoll (0) | 2023.07.18 |
[Unreal4 C++] 01 Movement (0) | 2023.07.07 |