1. 알고리즘
오늘은 코딩 테스트 대신 알고리즘 수업을 들은 후, 관련 내용을 정리하고 사용해 보았습니다.
기존에 써보지 않은 함수인 next_permutation, prev_permutation 이나 nth_element 등에 대해서 접하게 되었습니다.
우선순위 큐, 순열, k값 찾기
1. 우선순위 큐1 - 1. 기본 개념우선순위를 가지고 정렬 되어 있는 큐내부적으로 Heap 자료구조를 사용한다.삽입 삭제는 "항상" O(logN), 우선순위 높은 원소 검색은 O(1) 1 - 2. 사용하기기본적으로 가
gbleem.tistory.com
2. 언리얼 공부
오늘은 언리얼 강의를 모두 다 들었습니다.
마지막 강의 내용은 UI 관련 내용이어서, 재미있게 수강할 수 있었던 것 같습니다.
기억할 만한 내용들을 간단히 정리해 보자면,
1. 대부분의 UI는 PlayerController에서 동작하도록 구현
- HUD를 켜는 등의 동작
- 위젯 인스턴스를 통해 데이터를 받아와서 OpenLevel 실행 등의 동작
2. 위젯과 UI 연동
- 간단한 방식으로는 BP에서 바인딩 하는 방식
- 이 방식은 부하가 심함
- 매 Tick마다 수행하기 때문
- GameState에서 UpdateHUD 라는 함수를 구현하여, 타이머 핸들을 통해 HUD를 업데이트 하는 방식 사용하기
- HUDUpdateTimerHandle 이라는 타이머 사용
- GetWorldTimerManager().GetTimerRemaining() 함수 사용
void ASpartaGameState::BeginPlay()
{
Super::BeginPlay();
StartLevel();
GetWorldTimerManager().SetTimer(
HUDUpdateTimerHandle
, this
, &ASpartaGameState::UpdateHUD
, 0.1f
, true); //0.1초마다 반복
}
void ASpartaGameState::UpdateHUD()
{
if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController())
{
if (ASpartaPlayerController* SpartaPlayerController = Cast<ASpartaPlayerController>(PlayerController))
{
if (UUserWidget* HUDWidget = SpartaPlayerController->GetHUDWidget())
{
if (UTextBlock* TimeText = Cast<UTextBlock>(HUDWidget->GetWidgetFromName(TEXT("Time"))))
{
float RemainingTime = GetWorldTimerManager().GetTimerRemaining(LevelTimerHandle);
TimeText->SetText(FText::FromString(FString::Printf(TEXT("Time : %.1f"), RemainingTime)));
}
if (UTextBlock* ScoreText = Cast<UTextBlock>(HUDWidget->GetWidgetFromName(TEXT("Score"))))
{
if (UGameInstance* GameInstance = GetGameInstance())
{
if (USpartaGameInstance* SpartaGameInstance = Cast<USpartaGameInstance>(GameInstance))
{
ScoreText->SetText(FText::FromString(FString::Printf(TEXT("Score : %d"), SpartaGameInstance->TotalScore)));
}
}
}
if (UTextBlock* LevelText = Cast<UTextBlock>(HUDWidget->GetWidgetFromName(TEXT("Level"))))
{
LevelText->SetText(FText::FromString(FString::Printf(TEXT("Level %d"), CurrentLevelIndex + 1)));
}
}
}
}
}
3. Widget BP에서 만든 여러 요소들 사용하기
- TextBlock이나 Canvas등 여러 요소를 추가하여, 디자이너 탭에서 UI를 구현하는데,
- "그래프" 탭에서 사용하려면, 변수 여부에 체크 하기
4. UI 애니메이션 구현 및 파티클, 사운드 추가하기
- UI 애니메이션
- PlayAnimation 노드 사용
- 2D UI를 3D로 옮겨주기
- 스크린 모드와 월드 모드를 세팅해서 구현
- OverHeadWidget->SetWidgetSpace(EWidgetSpace::Screen);
- 파티클
- UGameplayStatics::SpawnEmitterAtLocation();
- 사운드
- UGameplayStatics::SpawnSoundAtLocation();
좀 더 자세한 내용과 코드들은 프로젝트 구현하면서 추가적으로 정리할 예정입니다.
'TIL' 카테고리의 다른 글
TIL day 38 (3) | 2025.02.12 |
---|---|
TIL day 37 (1) | 2025.02.11 |
TIL day 35 (2) | 2025.02.07 |
TIL day 34 (1) | 2025.02.06 |
TIL day 33 (0) | 2025.02.05 |