UI 애니메이션 효과 만들기

2025. 2. 7. 14:37·내배캠/Unreal Engine

   

 

 

📌 Main Menu WBP에서 애니메이션 효과 생성

 

  • GameOver 텍스트와 TotalScore 텍스트를 생성하고 위치를 잡기
  • 두 TextBlock 모두 "is Variabl" 체크를 해주고 Behavior 탭에 Visibility를 "Hidden" 으로 변경해 숨김 처리
    • 게임 시작하는 단계에서는 GameOver 텍스트와 TotalScore 텍스트가 보여지지 않아야 한다.
    • 따라서 두 텍스트 모두 변수로 만들어 이 텍스트들을 게임이 종료될 때 보여지도록 설정하는 함수를 만들 예정

 

  • 애니메이션을 설정할 GameOver TextBlock을 클릭한 뒤 하단의 Animations 창 왼족에 "+ Animation" 버튼을 클릭해
    새 애니메이션을 만들어준다.
  • 그 다음 우측 창에서 "+ Add" 버튼을 클릭해 "GameOver Text"에 "Render Opacity"를 추가한다.
  • 우측 타임라인에서 0.0초에 1.0 → 1.0초에 0.2 → 2.0초에 1.0 의 값을 반복해서 설정하면 텍스트가 깜빡이는 연출을 할  수 있다.

 

  • 우측에 "Graph" 버튼을 클릭하면 EventGraph 창으로 전환
  • 좌측 Functions 카테고리에서 "PlayGameOverAnim" 이라는 함수를 생성
  • 아래 Animation 카테고리를 살펴보면 방금 만들었던 Anim_TimeOver 애니메이션이 있는 것을 확인할 수 있고,
    TextBlock에 "is Variable" 체크를 해놨기 때문에 GameOverText와 TotalScoreText까지 있는 것을 확인할 수 있다.
  • "PlayGameOverAnim" 함수를 더블 클릭

 

  • 함수 내부로 들어와서 이 함수가 호출되었을 때, GameOver Text와 TotalScore Text를 "Visibility"로 설정하여 보여질 수 있도록 한다.
  • GameOver Text의 경우 PlayAnimation 노드를 연결해 방금 만들어주었던 Anim Time Over 애니메이션을 연결해주었다.

 

📌 PlayerController에서 WBP에서 만든 함수 호출

✅ PlayerController.cpp 

void AStrikeZonePlayerController::ShowMainMenu(bool bIsReStart)
{
	/* 생략 */
	
	if (bIsReStart)
	{
		UFunction* PlayAnimFunc = MainMenuWidgetInstance->FindFunction(FName("PlayGameOverAnim"));
		if (PlayAnimFunc)
		{
			MainMenuWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
		}

		if (UTextBlock* TotalScoreText = Cast<UTextBlock>(MainMenuWidgetInstance->GetWidgetFromName("TotalScoreText")))
		{
			if (USZ_GameInstance* GameInstance = Cast<USZ_GameInstance>(UGameplayStatics::GetGameInstance(this)))
			{
				TotalScoreText->SetText(FText::FromString(FString::Printf(TEXT("Total Score: %d"), GameInstance->TotalScore)));
			}
		}
	}
}

 

  • ShowMainMenu( ): 메인 메뉴가 노출되어야 되는 상황일 때 호출되는 함수
  • bIsRestart: 초기 게임 시작이 아닌, 게임오버 상황을 의미
  • MainMenuInstance에서 UObject::FindFunction() 함수로 WBP에서 만들었던 함수를 가져와 저장한다.
  • UOject::ProcessEvent() 함수로 WBP의 애니메이션 재생 함수를 호출한다.
  • TotalScore 점수를 GameInstance에서 가져와 SetText 해주었다.

 

🔎 UObject::FindFunction과 UObject::ProcessEvent 정리

언리얼 엔진에서 주로 함수 호출과 이벤트 처리를 동적으로 다룰 때 사용된다.
특히 런타임 시점에서 함수의 존재 여부를 확인하거나 이벤트를 실행할 때 유용하며, 플러그인 시스템이나 모듈 간의 동적 호출에서 자주 사용된다.

 

✅ UObject::FindFunction(FName InName) 

주어진 함수 이름(FName)을 기반으로 해당 UObject에 해당 함수가 있는지 찾는다.
UFunction* FindFunction(FName FunctionName) const;

🟢 FindFunction의 장점

  • 동적 함수 확인 가능: 런타임 시점에서 함수가 존재하는지 확인할 수 있다.
  • 안전한 호출: 함수가 존재하지 않을 경우 nullptr을 반환하므로 안전한 조건부 호출이 가능하다.

🔴 FindFunction의 단점

  • 비용 발생 가능: 런타임에 함수 탐색을 수행하기 때문에 빈번한 호출 시 성능에 부담을 줄 수 있다.
  • 정적 타입 안전성 부족: 컴파일 타임에 타입 검증이 되지 않으므로 잘못된 함수명을 사용할 위험이 있다.

 

✅ UObject::ProcessEvent

UFunction 포인터와 파라미터 구조체 를 받아 런타임에 동적으로 함수를 호출하는 기능을 제공한다.

UFunction 메타데이터를 기반으로 호출하며, 호출할 함수가 블루프린트에 구현되어 있다면 그 블루프린트 구현 함수를 호출하고 만약 블루프린트에 해당 함수가 없고 C++에 정의된 함수가 있다면 C++ 함수가 호출된다.
다만 호출할 함수가 UFUNCTION 매크로로 선언된 함수여야 리플렉션 시스템에 등록되어 메타데이터 정보를 읽을 수 있다.
void ProcessEvent(UFunction* Function, void* Parameters);

🟢 ProcessEvent의 장점

  • 동적 함수 호출: 런타임에 함수명을 몰라도 FindFunction으로 찾은 UFunction을 기반으로 호출할 수 있다.
  • Reflection 시스템 통합: 언리얼의 리플렉션 시스템을 활용해 외부 데이터나 이벤트를 처리할 수 있다.
  • 블루프린트 함수 호출 가능: 블루프린트에서 정의된 함수도 호출할 수 있어 C++ ↔ 블루프린트 간 상호작용이 가능하다.

🔴 ProcessEvent의 단점

  • 비정적 호출: 정적 함수 호출보다 성능이 떨어질 수 있다. 런타임 탐색과 호출로 인해 비용이 증가한다.
  • 디버깅 어려움: 런타임에 호출되므로 호출 시 오류가 발생할 경우 원인을 찾기 어려울 수 있다.

'내배캠 > Unreal Engine' 카테고리의 다른 글

Particle과 Sound 효과 연출  (0) 2025.02.07
Widget Component로 월드에 UI 배치하기  (0) 2025.02.07
게임 메뉴 UI 디자인 / 게임 흐름에 맞게 UI 전환  (0) 2025.02.06
UI 위젯 설계와 실시간 데이터 연동  (0) 2025.02.06
Game State와 Game Mode  (0) 2025.02.04
'내배캠/Unreal Engine' 카테고리의 다른 글
  • Particle과 Sound 효과 연출
  • Widget Component로 월드에 UI 배치하기
  • 게임 메뉴 UI 디자인 / 게임 흐름에 맞게 UI 전환
  • UI 위젯 설계와 실시간 데이터 연동
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    UI 애니메이션 효과 만들기
    상단으로

    티스토리툴바