📘Unreal Engine/📝Unreal Engine

[Unreal Engine] 어서트 (Assert)

주으기 2024. 5. 21. 10:16
728x90
반응형

문서

https://docs.unrealengine.com/5.3/ko/asserts-in-unreal-engine/

 

어서트

언리얼 엔진의 어서트 함수 기능에 대한 레퍼런스입니다.

docs.unrealengine.com

 


 

들어가며

요약 : 어서트(assert)는 if문 같이 조건의 참 / 거짓에 따라 참이면 그냥 통과하고, 거짓이면 크래시 로그를 출력하거나, 에디터를 크래시 나게 한다, 출시 빌드에서는 코드를 처리하지 않기에 성능에 영향을 안 끼친다.

 

assert는 개발 중에 예상치 못했거나, 유효하지 않은 조건을 검사하고 확인하는 데 사용된다.

 

이러한 기능은 포인터가 null인지, 서로의 값이 같은지, 함수가 반복적으로 실행되지는 않는지 등

예외의 상황을 두어 조건이 맞지 않으면 크래시 로그를 출력하거나, 에디터를 크래시 내는 등으로 알려준다.

 

assert의 주요 특징은 출시 빌드에서는 이 구문이 사라진다는 점이다.

즉 빌드된 게임에서는 퍼포먼스상 영향을 미치지 않고, 추가 이펙트도 없어서 되도록 자주 사용해도 좋다.

 

assert의 종류에는 동일한 3가지 계열인 check, verify, ensure을 제공한다.

 


 

check

check는 첫 번째 파라미터가 false 값이면 에디터에 크래시를 낸다.

출시 빌드에서는 check 구문이 사라진다.

check의 매크로들은 문서를 참고하자 |문서| (위의 문서와 동일)

// 이 함수는 JumpTarget이 null이면 안 된다.
void AMyActor::CalculateJumpVelocity(AActor* JumpTarget, FVector& JumpVelocity)
{
    check(JumpTarget != nullptr);
}

 


 

 

verify

verify는 대부분 check와 똑같이 동작하지만, 출시 빌드에서 사라지지 않는다는 점이 check와 다르다.

물론, 출시 빌드에서는 파라미터가 false여도, 에디터가 크래시 나는 것은 무시된다. 확인용도?

verify((Mesh = GetRenderMesh()) != nullptr);

 


 

 

ensure

ensure은 check와 verify와 비슷하지만, 에디터를 크래시 내지는 않는다.

 

파라미터가 false인 경우, 출력 로그에 크래시 났다고 알리고, 실행은 계속한다.

명시적으로 계속 로그를 띄우는 ensure를 사용하는 게 아니면, 로그는 최초 1번만 띄운다.

 

ensure은 모든 빌드 (출시 포함)에서 동작한다. 크래시 로그는 출시 빌드를 제외한 빌드에서만 출력된다.

ensure((Mesh = GetRenderMesh()) != nullptr);

 

 

 

 

 

728x90
반응형