UCLASS()의 멤버로 UPROPERTY()같은 오브젝트가 있을 때, 해당 멤버를 UPROPERTY()로 선언해야 한다.
블루프린트 내에도 편집하지 않을 때도 마찬가지다.
-> 만약, 하지 않으면 TArrray는 제대로 할당되지 않는다.
ex)
TArray<FSoundEffect> Greets; <- 잘못된 방식
UPROPERTY() TArray<FSoundEffect> Greets; <- 옳은 방식
즉, UPROPERTY()의 선언은 제대로 된 메모리 관리를 받아야 한다는 것을 알려주는 것이다.
가비지컬렉션 강제 수행
-> 메모리가 가득 차거나 일부를 비우고 싶을 경우 강제로 가비지 컬렉션을 사용할 수 있다.
-> 보통 강제로 가비지 컬렉션을 수행할 일은 별로 없지만, 더 이상 사용하지 않는 매우 큰 텍스처가 있다면 수행을 검토할 수 있다.
방법 : 메모리에서 해제하고 싶은 모든 UObject에 대해 간단히 CoditionalBeginDestory()를 호출하거나 참조 카운트를 0으로 변경한다.
GetWorld()->ForceGarbageCollection(true);
중단점과 단계별 코드 실행
break point사용 방법
->Visual studio 기준 라인에 중단점을 심을 라인에 F9또는 코드 라인 왼쪽의 회색 여백 클릭
이 후 Locals 창을 이용해서 변수 확인
디버거 : 변수 상태를 포함해 실행 중인 코드의 모든 정보를 확인하게 도와주는 강력한 도구
F10은 코드 한 줄 넘기기다. 한 줄 코드를 실행하며, 다음 줄에서 멈춘다.
실행하는데 오래 걸리는 코드 영역을 찾는데는 C++ 프로파일러가 유용하다.(최적화시 도움이 됨)
Debug->Performance Profiler
->Performance Wizard의 도움을 받고, 편집기 없이 게임 실행 -> 일정 시간 후 코드 실행을 멈춰 분석 샘플 수집(1~2분)
'Unreal Engine 4 > Unreal Engine 4' 카테고리의 다른 글
SetLifeSpan을 이용한 일정 시간 후 액터 삭제 (0) | 2022.03.21 |
---|---|
Destroy와 Timer를 사용한 액터 삭제 (0) | 2022.03.21 |
TScopedPointer (0) | 2022.03.21 |
TSharedPtr, TSharedRef (0) | 2022.03.21 |
UObject 파생 클래스를 제거하는 방법 (3) | 2022.03.16 |