Tip)
@param을 이용하여 변수의 설명을 주석으로 달수있다.(변수 사이의 ,를 기준으로 바뀐다)
Log
어제 UE_LOG를 이용하여 로그를 띄우는걸 해봤는데 추가 기능을 알아보자
UE_LOG는 UE_LOG( CategoryName, Verbosity , Format , Message)로 구성할수있고
CategoryName
밑줄 그어진것이 카테고리 네임으로 로그의 카테고리를 식별가능하다.
출력로그의 필터 - 카테고리에서 로그의 카테고리의 목록을 확인가능하다.
카테고리 네임을 추가하는 방법이있는데
cpp파일에서 DEFINE_LOG_CATEGORY(NewCategoryName)을 h파일에서 DECLARE_LOG_CATEGORY_EXTERN(NewCategoryName, Log, All)을 추가하고 해당로그를 사용할 클래스 헤더에 include시켜주고 UE_LOG에 NewCategoryName을 설정하면 변경된 상태로 나오게 된다.
Verbosity
Verbosity는 출력되는 로그의 종류를 구분시켜준다.
Log
로그 파일 출력 O / 게임 내의 콘솔 출력 X / 에디터의 출력 로그 탭을 통해 계속해서 출력된다.
Warning
콘솔 및 로그 파일 출력 O, 노란색으로 표시.
Error
콘솔 및 로그 파일 출력 O, 빨간색으로 표시.
Display
콘솔 및 로그 파일 출력 O
Fatal
콘솔 및 로그 파일 출력 O, 로그가 비활성화된 경우에도 작동이 중단.
Verbose
로그 파일 출력 O, 게임내의 콘솔 출력 X, 일반적으로 자세한 로깅 및 디버깅에 사용
VeryVerbose
로그 파일 출력 O, 게임내의 콘솔 출력 X, 일반적으로 대량의 로그를 출력하는 상세한 로깅 사용
Format
포맷은 쓰는 자료형에 맞게만 대응시켜주면된다. (%i는 int)
Log는 띄워봤지만 BP에서 사용하던 Print String을 사용하고 싶을때 Print를 사용하여 C++에서 구현이 가능하다
GEngine->AddOnScreenDebugMessage(Key, Duration, Color, Data)로 사용가능하며
Int는 FString::FromInt(Data)를 Float는 FString::SanitizeFloat(Data)를 사용한다.
(SanitizeFloat은 소수점을 6자리까지 나타내지만 14.450000같이 필요없는 0을 제거해 14.45로 나오게한다)
Tick에서 Print하면 계속 1번사진 같이 나오겠지만 Key값을 입력해 그줄에 고정적으로 Print되게 할수있다.
(1번사진은 Key값이 INDEX_NONE이며 -1로도 대체가능하다)
매개변수값을 매크로로 설정하여 손쉽게 관리 가능하다.
Extern, Static, Namespace
전역변수는 한 프로젝트 내부에서 공용으로 사용하기에 다른 cpp파일에서 새로 정의를 할수없다.
빌드는 컴파일 + 링크를 거치는데 링크단계에서 중복선언된 함수나 변수를 찾는다고 한다.(탱크유 GPT)
- 컴파일 단계:
- 소스 코드 파일(.cpp)을 컴파일러에 전달하여 개별 객체 파일(.o 또는 .obj)을 생성합니다. 이 객체 파일에는 해당 파일의 함수 및 변수의 기계 코드 및 기호 정보가 포함됩니다.
- 링크 단계:
- 링커는 여러 객체 파일 및 라이브러리 파일을 결합하여 하나의 실행 파일(일반적으로 .exe, .out 또는 이식 가능한 실행 파일)을 생성합니다.
- 여러 개의 객체 파일을 하나로 합치는 작업 중, 중복된 함수 또는 변수 정의가 있을 경우 충돌을 방지하고 적절한 연결을 수행합니다.
- 라이브러리 파일은 코드의 재사용을 촉진하며, 이들은 이미 컴파일된 함수와 클래스의 집합입니다. 프로그래머는 이러한 라이브러리를 사용하여 작업을 단순화하고 코드의 재사용을 촉진할 수 있습니다.
Extern
External(외부의)를 줄여 extern으로 표기하고 전역변수,전역함수를 가져와서 사용하고 싶을 때 사용한다.
선언 앞에 extern을 붙여서 사용가능 A.cpp(전역변수 int i 생성) B.cpp(extern int i로 A의 int i 사용가능)
Static
전역변수로 설정을 했지만 다른곳에서 extern으로 못 가져가게 만들 때 사용한다.
A.cpp(전역변수 Static int i 생성), B.cpp(전역변수 int i 생성), C.cpp(extern i 호출) 의 경우 C.cpp에서의 i는 B의 변수이다.
Namespace
파일내부에서 Static 전역변수를 많이 만들고 싶을때 사용하는것이 Namespace
Namespace안에서는 일일이 static을 붙이지 않아도 알아서 붙은것처럼 작동한다.
namespace A
{
/*static이 생략 */ int i;
}
namespace B
{
/*static이 생략 */ int i;
}
//A::i, B::i로 나눠서 사용가능 A::i, B::i는 서로다른 i다.
'언리얼 C++ 정리' 카테고리의 다른 글
09/15 학습 정리 ( 다중상속, Interface ) (0) | 2023.09.19 |
---|---|
09/13 학습정리 (SetupAttachment, Look, PlayerController ) (0) | 2023.09.14 |
09/11 학습정리( Movement 구현 , Component 추가) (0) | 2023.09.12 |
09/05 학습정리( Reflection , UPROPERTY() ) (0) | 2023.09.06 |
09/04 학습정리 ( TCHAR , 액터 내부 컴포넌트 바인딩) (0) | 2023.09.05 |