TIL day 36

2025. 2. 10. 22:19·TIL

1. 알고리즘


오늘은 코딩 테스트 대신 알고리즘 수업을 들은 후, 관련 내용을 정리하고 사용해 보았습니다.

기존에 써보지 않은 함수인 next_permutation, prev_permutation 이나 nth_element 등에 대해서 접하게 되었습니다.

https://gbleem.tistory.com/70

 

우선순위 큐, 순열, 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
'TIL' 카테고리의 다른 글
  • TIL day 38
  • TIL day 37
  • TIL day 35
  • TIL day 34
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    character animation
    motion matching
    map을 vector로 복사
    BFS
    gamestate
    addonscreendebugmessage
    싱글턴
    actor 클래스
    enhanced input system
    DP
    매크로 지정자
    blend pose
    상속
    Vector
    템플릿
    applydamage
    const
    C++
    cin함수
    additive animation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
TIL day 36
상단으로

티스토리툴바