Unreal - 페이드 인 / 아웃

2025. 5. 15. 15:12·Unreal 프로젝트 다이어리/첫번째 프로젝트

레벨을 이동해보겠습니다

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

 

오버랩 상호작용할 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일떄만 작동하게 하였습니다

 

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

 

'Unreal 프로젝트 다이어리 > 첫번째 프로젝트' 카테고리의 다른 글

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
'Unreal 프로젝트 다이어리/첫번째 프로젝트' 카테고리의 다른 글
  • Unreal - 버튼 위젯 사용하기
  • Unreal - 로딩 창
  • Unreal - GameMode로 맵마다 설정을 변경하기
  • Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (211) N
      • Unreal 프로젝트 다이어리 (108) N
        • 첫번째 프로젝트 (73)
        • 두번째 프로젝트 (35) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 (52)
        • Stack,Queue (7)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2)
        • BFS , DFS (7)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2)
        • 기타 문제 (14)
      • C++ 백준 (4)
      • C++ 팁 (1)
      • 개인 코테 & 스타디 <비공개> (29)
        • 코드 개인보관함 (9)
        • 코딩테스트+@ (11)
        • 알고리즘 스타디 (6)
        • 알고리즘 스타디 과제 (3)
        • 비공개 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

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

    unreal 파쿠르
    언리얼 상호작용
    언리얼 파쿠르
    unreal 시퀀스
    언리얼 시퀀스
    언리얼 motionmatching
    언리얼
    unreal inventory
    unreal 인벤토리
    unreal 모션매칭
    Unreal Parkour
    언리얼 프로그래스바
    언리얼 ui
    언리얼 parkour
    언리얼 behavior tree
    언리얼 비헤이비어트리
    언리얼 컷씬
    언리얼 인벤토리
    언리얼 behaviortree
    언리얼 모션매칭
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 페이드 인 / 아웃
상단으로

티스토리툴바