프로그래밍/Unreal 부트캠프

TIL 2025.02.14 기록

Rozentea 2025. 2. 14. 23:48

0. 개요


오늘은 스파르타 캠프에서 커리어 데이를 진행했어서 오늘은 이력서 작성과 팀프로젝트 회의에 집중을 했었다.

 

추가적으로는 애니메이션 리타게팅, 모션 매칭에 대해 공부해 보았다.

ㄴ> 이건 아직 감이 많이 안잡히기도 했고, 실험도 해보긴 했지만.. 아직 크게 진전은 없어서 포스팅은 나중에 프로젝트에 적용할 수 있을 만큼 공부를 하고 포스팅하려한다.

 

때문에 강의 들었던 것을 조금 기록하고 오늘은 마치겠다.

 

1. UI 애니메이션 효과 및 3D 위젯 UI 구현하기


< UI에 애니메이션 넣기 >

기본적으로 하단에 애니메이션 창이 있다.

애니메이션을 추가한 다음 해당 애니메이션을 어떤 UI에 적용할 것인지 지정해줄 수 있다.

우리는여기서 랜더 오파시티를 이용해 깜빡이는 텍스트를 만들어주었다.

이제 이렇게 만든 애니메이션을 실행시켜줄 수 있는 함수를 만들어야 한다.

안보이게 꺼두었던 Text들을 다시 보이게 해주고, 애니메이션을 실행시켜주도록 함수를 만들었다.

블루프린트로 애니메이션 함수를 만들었으면

UFunction* PlayAnimFunc = MainMenuWidgetInstance->FindFunction(FName("Anim_TimeOver"));

를 사용해서 플레이어 컨트롤러에서 애니메이션을 실행 시켜줄 수 있도록 애니메이션을 찾아왔다.

MainMenuWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);

확인해보면, 점수 갱신이 안되었다.

때문에 이전과 동일하게 TotalTextBlock에 데이터를 연결해주었다.

 

이제 플레이어의 HP를 띄워줄 것이다.

그러기 위해서는 3D 위젯 컴포넌트라는 것을 사용해야 한다.

우선 택스트 형식으로 10/100과 같은 형태로 캐릭터에 붙여줄 것이다.

그래서 택스트만을 이용해 WBP를 만들어주었다.

이제 이것을 플레이어 3D 위젯 컴포넌트에 붙여주어야 한다.

이것은 UI를 3D월드 공간에 배치할 수 있게 해주는 기능이다.

이것도 2가지 모드가 있는데

  1. 스크린 모드
    ㄴ> UI가 항상 화면에 고정되어 있는 것으로 보인다.
    ㄴ> 즉, 3D 공간상에 배치는 되어있는데 우리가 예전에 파티클을 만들었던 것 처럼 항상 카메라의 정면을 바라보도록 그려진다는 것
  2. 월드 모드
    ㄴ> 캐릭터의 움직임에 따라서 택스트도 회전하게됨.

일단 우리 캐릭터 클래스에 해당 3D위젯 컴포넌트를 만들어 붙여주었다.

OverHeadWidgetComp = CreateDefaultSubobject<UWidgetComponent>(TEXT("OverHeadWidget"));
OverHeadWidgetComp->SetupAttachment(GetMesh());

또, 이전과 마찬가지로 위잿 인스턴스를 만들어서 텍스트를 전달해주었다.

이후에는 다시 에디터에서 캐릭터 BP를 열러 붙여준 3D위젯컴포넌트에 우리가 만들었던 체력 WBP를 연결해주면된다. 블루 프린트에서 스페이스 모드를 잠시 월드로 하면 체력바를 뷰포트에서 확인할 수 있다. 이 상태에서 위치나 크기를 조절해주고, 다시 스페이스 모드를 스크린으로 바꿔 저장해주면 된다.

게임 스테이트쪽에 게임이 완전히 정지될 수 있는 기능을 추가해주었다.

void ASpartaGameState::OnGameOver()
{
	if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController())
	{
		if (ASpartaPlayerController* SpartaPlayerController = Cast<ASpartaPlayerController>(PlayerController))
		{
				SpartaPlayerController->SetPause(true);
				SpartaPlayerController->ShowMainMenu(true);
		}
	}
}

SetPause()함수를 이용해 완전히 컨트롤러를 멈추거나 동작하게 할 수 있다.

 

2.  마무리


오늘 회의에서는

- 팀 프로젝트 동안 약속 정하기

- 코딩 컨벤션 정하기

- 업무 분담

- Git GUI tool 정하기

를 진행했다.

 

우리 조 분위기가 좋고 화목하고, 열정이 넘쳐서 좋았다. ㅎㅎ >ㅅ< b 쵝오