인프런 커뮤니티 질문&답변

제리님의 프로필 이미지
제리

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

2-15강 적군을 처치한 score UI가 업데이트 X

해결된 질문

작성

·

91

0

안녕하세요 득우님, 2-15강에서 적군을 처치한 score UI가 제대로 업데이트 되지 않아서 질문을 남기게 되었습니다.

강의대로 따라한 결과, Controller 블루프린트에서 GameOver와 GameClear event는 제대로 동작하여서 게임의 승리와 죽음시 관련 UI들은 잘 spawn됩니다.

하지만, 적군 NPC 처리시 적군 처리 count가 업데이트가 안됩니다. 그러나 적군 처리시 text widget의 숫자의 색깔이 변하는 것으로 보아, WBP_PlayerScore의 custom event들은 잘 트리거 되지만, 아래 그림의 빨간 화살표가 가르키는 New Score 변수가 업데이트 되지 않는다는 것으로 유추해 보았습니다.

 

득우 질문.png

 

그래서 만약 제가 생각한 가정이 맞다면 다음과 같은 궁금증이 생겼습니다.

1. WBP_PlayerScore의 custom event를 트리거하는 부분은 어디에 있는지

2. 각 WBP_PlayerScore의 custom event에 Input으로 들어가는 "New Score"라는 변수는 어떻게 접근하는지

3. Controller에서는 Custom event를 트리거할때 Kismet 접두사가 붙은 C++함수로 컨트롤 했는데, PlayerScore의 custom event도 같은 방식인건지

 

감사합니다!

답변 1

1

이득우님의 프로필 이미지
이득우
지식공유자

안녕하세요. 마지막 예제는 C++외에도 블루프린트와 함께 활용할 수 있도록 한번 구성해보았습니다.
ABPlayerController를 상속받은 BP_ABPlayerController에 SetScore를 호출하는 이벤트를 다음과 같이 구성했습니다.

ABPlayerController의 헤더에 다음과 같은 블루프린트 이벤트를 선언했습니다. 이는 Cpp에는 내용이 없고 블루프린트에 선언한 OnScoreChangedCpp 이벤트에 대응되는 함수입니다.

UFUNCTION(BlueprintImplementableEvent, Category = Game, Meta = (DisplayName = "OnScoreChangedCpp"))
void K2_OnScoreChanged(int32 NewScore);

UFUNCTION 매크로에 의해 블루프린트에서는 OnScoreChangedCpp라는 이름의 이벤트로 나타나지만 Cpp 코드에서는 K2_OnScoreChanged 함수를 호출해주어야 합니다.

K2_OnScoreChanged 함수 호출은 다음과 같이 GameScoreChanged 함수 호출을 통해 발생되며, GameScoreChanged 함수는 점수를 관장하는 주체인 게임 모드를 통해 발동됩니다.

void AABGameMode::OnPlayerScoreChanged(int32 NewPlayerScore)
{
	CurrentScore = NewPlayerScore;

	AABPlayerController* ABPlayerController = Cast<AABPlayerController>(GetWorld()->GetFirstPlayerController());
	if (ABPlayerController)
	{
		ABPlayerController->GameScoreChanged(CurrentScore);
	}

	if (CurrentScore >= ClearScore)
	{
		bIsCleared = true;

		if (ABPlayerController)
		{
			ABPlayerController->GameClear();
		}
	}
}   

이렇게 해서 블루프린트 이벤트 호출이 발생하면 다음의 블루프린트 로직에 의해 문의주신 UI의 SetScore함수(이벤트)가 발동되도록 설계했습니다.

image

제리님의 프로필 이미지
제리
질문자

친절한 설명 감사드립니다 득우님!

제리님의 프로필 이미지
제리

작성한 질문수

질문하기