본문 바로가기
# 게임/# UE

[UE4] 2일차 - 디버깅

by 쁘레레레레레 2022. 6. 7.

오늘은 아마.. 하나 더 올라갈듯 하다.

 

자 시간이 없으므로 바로 본론

 

언리얼의 디버깅 시스템은 이러하다.

UE_LOG(카테고리,로깅 수준,형식,인자);

 

우선 설명전에 짧게 말하자면, 유니티의 경우 Debug.Log(); Debug라는 클래스로 다 처리가 가능하고 아무래도 레퍼런스쪽을 굳이 안가도 역할을 알 수 있는데, 언리얼은 굉장히 불친절한 친구이기 때문에 설명이 필요하다 느꼈다.

 

우선 카테고리는 LogTemp라는 애를 가져다 썼다. 나도 잘 모른다. 그냥 그렇게 배웠다.

 

로깅 수준은 레퍼런스 가면 있는데

Logging | Unreal Engine Community Wiki (unrealcommunity.wiki)

 

Logging | Unreal Engine Community Wiki

Logging means keeping an ordered record of events, function calls, variable values at a certain time during runtime, etc. This is usually saved in the form of text in a log file.

unrealcommunity.wiki

| Verbosity Level | Printed in Console? | Printed in Editor's Log? |                      Notes                       |
|----------------------|----------------------------|--------------------------------|--------------------------------------------------|
| Fatal                 | Yes                 | N/A                      | Crashes the session, even if logging is disabled |
| Error                 | Yes                 | Yes                      | Log text is coloured red                         |
| Warning            | Yes                 | Yes                      | Log text is coloured yellow                      |
| Display             | Yes                 | Yes                      | Log text is coloured grey                        |
| Log                   | No                  | Yes                      | Log text is coloured grey                        |
| Verbose            | No                  | No                       |                                                  |
| VeryVerbose     | No                  | No                       |                                                  |

 

대략 이러하다.

모든 로그들이 콘솔에 뜨는것이 아닌데다, 모든 로그들이 실행 중 해당 창에 뜨는것도 아니다.

 

그리고 디버깅 방식은 굉장히 불편하다.

우선 유니티의 경우 그냥 창을 켜서 f9로 break point를 찍은 후 디버거를 실행하면 되는데

 

언리얼의 경우 우선 에디터가 켜져있다면 종료를 한 후 break point를 원하는곳에 찍은 후 디버거를 실행하면 언리얼 에디터가 켜지고 에디터창에서 게임 실행을 누르면 그제서야 디버깅 시작이다.

 

뭐.. 여기까진 괜찮은데, 문제는 이 다음이다.

 

유니티에서 하듯 실수로 디버거의 중지버튼을 누르면 언리얼도 같이 꺼져버린다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

암튼 그러하다.

 

그리고 참고로 로컬 디버거 왼쪽에 있는 버튼들 관련해서 설명하자면

이거 봤을건데, DebugGame Editor쪽을 보면 아마 Development Editor라고 되어있을것이다.

 

Debug Game은 빌드할때 디버그 실행 파일을 누른꼴로 현재처럼 별다른 리소스가 있지 않으면 빌드 후 실행할때 에러난다.

Development Game은 개발모드로 역시 위와 같이 에러난다.   리소스가 없으니까

 

DebugGame Editor, Development Editor은 dll로 만든 후 에디터로 띄워준다고 한다. 이 경우 리소스가 없다고 뭐라 안해서 에디터를 사용해 개발시엔 이걸로 한다.

 

참고로 솔루션 구성창이 내 스샷과는 다르게 굉장히 좁을건데

솔루션 구성창 우클릭 - 사용자 지정 - 명령탭 - 도구모음 - 표준 - 하단에 솔루션 구성 클릭 - 선택사항 수정 - 너비 200~250지정을 하면 된다.

 

내 경우 150을 했다.

 

 

 

다시 로그로 넘어와서

UE_LOG(LogTemp, Warning,TEXT("BeginPlay %d"),3);

 

이와같이 쓸 수 있는데 이러면 로그에 BeginPlay 3이라고 적힌다.

기존 c++식 코딩처럼 %d를 써준 후 인자값으로 뒤에서 값을 넣어주면 된다.

 

그리고 update역할을 하는 tick에는

UE_LOG(LogTemp, Error, TEXT("Tick %f"), DeltaTime);

이 코드를 주었는데, Tick과 이후 시간을 준것이다.

 

창이 더러워져서 테스트용 로그는 뺴고

tick함수에다가

AddActorLocalRotation(FRotator(0.f,RotateSpeed * DeltaTime,0.f));

를 넣어줬는데

 

해당 액터의 로컬 로테이션 값에 FRotator라는 애를 써서 회전시켜준것이다.

FRotator의 인자는 (pitch, yaw, roll)이 들어간다고 레퍼런스에 쓰여있다. (물론 오버라이드 된 것중 하나.)

pitch는 y축

yaw는 z축

roll은 x축이다.

 

여기서 난 z축 회전을 위해 yaw에만 RotateSpeed값에 DeltaTime을 곱해준것이다.

 

참고로 개발경험이 있는 사람은 알겠지만, DeltaTime을 안해주면 한번에 돌아버린다.

우린 점차 도는 모션이 보고 싶기 떄문에, 도는 값에 시간값을 곱해줘서 천천히 돌게 할것이다.

 

예로들어 float RotateSpeed = 3.0f;로 줬다고 가정할때

델타타임은 0.000001 .... 0.000002뭐 이런식으로 프레임마다 엄청나게 올라가기때문에

한번에 3을 돌기보다 3에 1 미만의 소수점을 곱해줘서 점차 돌게 만드는것이다.

 

 

'# 게임 > # UE' 카테고리의 다른 글

[UE4] 곧 올릴 예정 애니메이션 ~ 충돌 / 사소한 UE 이슈들 ~ 구조  (0) 2022.07.11
[UE4] 1일차  (0) 2022.06.06
뷰포트 구리다.  (0) 2022.01.05
Project SEED 1  (0) 2021.12.06