2026-05-05(화)

조범근·2026년 5월 5일

TIL

목록 보기
53/81

C++ Week 10

Study

팀플, 알고리즘 1문제



Today I Learned


UnrealC++

Spline

currentSpline->GetLocationAtDistanceAlongSpline(
	currentSplineDistance,
    ESplineCoordinateSpace::World
);

Spline은 맵에 그려둔 길이다. 캐릭터가 이 길을 따라 움직일 수 있다. 위 함수는 "Spline 위에서 currentSplineDistance만큼 이동한 지점의 월드 위치를 가져와라"라는 뜻이다.

0.0f는 Spline의 시작점
currentSpline->GetSplineLength()는 끝 지점


SpawnActor

currentCharacter = GetWorld()->SpawnActor<ACharacter>(
	Data.characterClass,
	spawnLocation,
	spawnRotation,
	spawnParams
);

Actor 안의 Spline 시작 위치(0.0f)를 가져와서 스폰했다.

현재 월드에 Data.characterClass 캐릭터를 spawnLocation / spawnRotation 위치에 생성하고 그 포인터를 currentCharacter에 저장한다.
SpawnParams.Owner = this;는 “이 매니저가 스폰한 액터다” 정도의 소유자 표시.


TFunction< void() >

void ShowTransition(TFunction<void()> action);
나중에 실행할 코드를 적어놓는 람다같은 것.
여기서 void()뜻은 인자값, 리턴값 없다는 것.

rootWidgetInstance->ShowTransition([this, pc, rootWidgetInstance]()
{
	pc->SetViewTargetByTag("CharacterSelectCamera", 0.0f);
	if (IsValid(ScreenSwitcher) == true)
	{
		ScreenSwitcher->SetActiveWidgetIndex(1);
	}
});

이런식으로 ShowTransition이 끝나면 뒤 {} 안의 코드를 실행해달라는 것이다.

void UOutGameRootWidget::ShowTransition(TFunction<void()> action)
{
	pendingTransitionAction = MoveTemp(action);
	
	if (IsValid(TransitionWidget) == true)
	{
		TransitionWidget->PlayFadeOut();
	}
}

이렇게 pendingTranstionAction에 저장만 해둔다.

이 작업의 흐름은PlayFadeOut() 후 Animation이 끝나면 Broadcast()하여
HandleTransitionFadeOutFinished()를 실행한다.

void UOutGameRootWidget::HandleTransitionFadeOutFinished()
{
	if (pendingTransitionAction)
	{
		pendingTransitionAction();
		pendingTransitionAction = nullptr;
	}

	if (IsValid(TransitionWidget) == true)
	{
		TransitionWidget->PlayFadeIn();
	}
}

여기서 pendingTransitionAction()에 아까 람다를 담았으니까 여기서 실행을 해준다.

결국 TFFunction<void()>를 사용한 이유는
FadeOut 끝나고 할 일이 매번 다르고 FadeOut이 진행되는 검은화면 시점에 세팅을 끝내두고 싶기때문에 사용했다.

0개의 댓글