Unreal - 페이드 인 / 아웃

2025. 5. 15. 15:12·Unreal5 프로젝트 다이어리

레벨을 이동해보겠습니다

레벨을 이동시켜줄 콜리전을 가지고있는 액터를 만들어주었습니다.

 

오버랩 상호작용할 boxCollision과 루트컴포넌트 씬 컴포넌트를 선언해주고 만들어주었습니다

UPROPERTY(EditAnywhere, Category = "MySettings")
class UBoxComponent* boxCollision;

UPROPERTY(EditAnywhere, Category = "MySettings")
class USceneComponent* sceneComp;
ATeleporterCristal::ATeleporterCristal()
{
	PrimaryActorTick.bCanEverTick = true;
	sceneComp = CreateDefaultSubobject<USceneComponent>(TEXT("sceneComp"));
	RootComponent = sceneComp;
	boxCollision = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxCollision"));
	boxCollision->SetupAttachment(RootComponent);
}

 

사용할 콜리전의 크기를 조절 사용할 블루프린트액터나 메시를 할당해주었습니다

 

오버랩 처리를 해주겠습니다 부딪힌 대상이 SwordCharacter면 반응하며 targetLvelPath의 이동경로로 이동합니다

UFUNCTION()
void OnBeginOverlapCollision(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
UPROPERTY(EditAnywhere, Category = "MySettings")
FString targetLevelPath;

 

void ATeleporterCristal::BeginPlay()
{
	Super::BeginPlay();
	boxCollision->OnComponentBeginOverlap.AddDynamic(this, &ATeleporterCristal::OnBeginOverlapCollision);
}
void ATeleporterCristal::OnBeginOverlapCollision(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	FString hitActorName = OtherActor->GetName();
	if (hitActorName.Contains(TEXT("SwordCharacter")))
	{
		UGameplayStatics::OpenLevel(this, FName(*targetLevelPath));
	}
}

 

해당 경로는 레벨의 레퍼런스 복사 이후 /Game 앞의 경로를 지워주고 

맨뒤의 필요없는 .~~ 를 지워주시고 넣어주시면되겠습니다

 

그럼 해당 경로의 맵으로 이동하게됩니다

 

레벨을 전환할때 페이드 아웃과 페이드 인을 만들어보도록 하겠습니다

사용할 위젯을 생성

 

보더를 추가한뒤 색상을 검정으로 설정

 

페이드인과 페이드아웃의 애니메이션을 만듭니다

위젯과 코드를 연동해주도록 하겠습니다

 

UPROPERTY(meta = (BindWidget))
class UBorder* Border_Fade;

UPROPERTY(meta = (BindWidgetAnim), Transient)
class UWidgetAnimation* FadeIn;

UPROPERTY(meta = (BindWidgetAnim), Transient)
class UWidgetAnimation* FadeOut;

UFUNCTION()
void PlayFadeIn();

UFUNCTION()
void PlayFadeOut();

 

void UFadeInOutWidget::PlayFadeIn()
{
	PlayAnimation(FadeIn);
}

void UFadeInOutWidget::PlayFadeOut()
{
	PlayAnimation(FadeOut);
}

 

위젯애니메이션 만드는법은 전 이전 글을 참고바랍니다

2025.04.04 - [Unreal5 프로젝트 다이어리] - Unreal 캐릭터 - 위젯애니메이션

 

Unreal 캐릭터 - 위젯애니메이션

스킬의 위젯블루프린트 애니메이션을 통해 스킬쿨타임을 시각적으로 보여주는걸 만들어보자해당 애니메이션을 원하는객체를 선택후좌측하단에 있는 애니메이션을 열고+애니메이션 해서 노드

lucodev.tistory.com

 

페이드아웃부터 해보겠습니다

 

위젯을 참조할 fadeWidget그리고 인스턴스 그리고 레벨을 오픈할 함수를 만들어줍니다

UPROPERTY(EditAnywhere, Category = "MySettings")
TSubclassOf<class UFadeInOutWidget> fadeWidget;

UFadeInOutWidget* fadeWidgetInstance;

UFUNCTION()
void OpenLevel();

 

오버랩의 함수를 변경해주겠습니다

오버랩되었을때 플레이어컨트롤러에 위젯인스턴스를 AddToViewport해서

페이드아웃 위젯을 띄우고 FadeOut 애니메이션이 끝나면 델리게이트 이벤트로 OpenLevel함수를 호출

레벨을 이동시킵니다

void ATeleporterCristal::OnBeginOverlapCollision(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	FString hitActorName = OtherActor->GetName();
	if (hitActorName.Contains(TEXT("SwordCharacter")))
	{
		APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);
		if (PC)
		{
			fadeWidgetInstance = CreateWidget<UFadeInOutWidget>(PC, fadeWidget);
			if (fadeWidgetInstance)
			{
				fadeWidgetInstance->AddToViewport();

				FWidgetAnimationDynamicEvent endEvent;
				endEvent.BindDynamic(this, &ATeleporterCristal::OpenLevel);
				fadeWidgetInstance->BindToAnimationFinished(fadeWidgetInstance->FadeOut, endEvent);
			}
			fadeWidgetInstance->PlayFadeOut();
		}
		
	}
}

void ATeleporterCristal::OpenLevel()
{
	UGameplayStatics::OpenLevel(this, FName(*targetLevelPath));
}

 

페이드 아웃이 잘 일어나는것을 확인할수 있습니다

 

페이드 인 입니다

페이드 인을 하는곳은 이동한 맵의 GameMode입니다

.h의 코드입니다

//fade
UPROPERTY(EditAnywhere, Category = "MySettings")
TSubclassOf<class UFadeInOutWidget> fadeWidget;

UFadeInOutWidget* fadeWidgetInstance;

UFUNCTION()
void RemoveFadeOutWidget();

 

.cpp입니다

pCon = UGameplayStatics::GetPlayerController(this, 0);
//fade
if (pCon && bNeedFadeIn)
{
	fadeWidgetInstance = CreateWidget<UFadeInOutWidget>(pCon, fadeWidget);
	if (fadeWidgetInstance)
	{
		fadeWidgetInstance->AddToViewport();

		if (fadeWidgetInstance->FadeIn)
		{
			FWidgetAnimationDynamicEvent endEvent;
			endEvent.BindDynamic(this, &ASwordPlayerGameBase::RemoveFadeOutWidget);
			fadeWidgetInstance->BindToAnimationFinished(fadeWidgetInstance->FadeIn, endEvent);
		}
	}
	fadeWidgetInstance->PlayFadeIn();
}

 

RemoveFadeOutWidget함수입니다

void ASwordPlayerGameBase::RemoveFadeOutWidget()
{
	if (fadeWidgetInstance)
	{
		fadeWidgetInstance->RemoveFromParent();
		fadeWidgetInstance = nullptr;
	}
}

 

bool변수 bNeedFadeIn 변수가 True일떄만 작동하게 하였습니다

 

페이드인과 아웃이 잘 작동합니다

 

'Unreal5 프로젝트 다이어리' 카테고리의 다른 글

Unreal - 버튼 위젯 사용하기  (0) 2025.05.16
Unreal - 로딩 창  (0) 2025.05.16
Unreal - GameMode로 맵마다 설정을 변경하기  (0) 2025.05.15
Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동  (0) 2025.05.15
Unreal - AI의 회피 알고리즘( RVO )  (0) 2025.05.10
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 버튼 위젯 사용하기
  • Unreal - 로딩 창
  • Unreal - GameMode로 맵마다 설정을 변경하기
  • Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (121) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (3) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (21) N
        • Stack (3)
        • Hash (4)
        • Heap (2)
        • Sort (1) N
      • 코드 개인보관함 (8) N
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 컷씬
    unreal look at
    언리얼 foot step
    언리얼 비헤이비어트리
    언리얼 behaviortree
    unreal loading
    unreal 로딩
    언리얼 페이드 아웃
    unreal 모션매칭
    언리얼
    언리얼 로딩창
    unreal sequence
    언리얼 시퀀스
    언리얼 behavior tree
    언리얼 look at
    unreal 컷씬
    언리얼 motionmatching
    언리얼 로딩
    언리얼 모션매칭
    unreal 시퀀스
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 페이드 인 / 아웃
상단으로

티스토리툴바