Unreal - 던전진행도 위젯 만들기 (스칼라 파라미터 조절하기)

2025. 5. 23. 01:27·Unreal5 프로젝트 다이어리

던전이 진행하면서 던전의 현 진행도를 나타내는 위젯을 만들어보겠습니다

던전의 진행도는 AI가 잡은 마리수에 비례하여 0 부터 100% 비율을 나타냅니다

둥근 메테리얼을 만들고 메테리얼 인스턴스를 만듭니다

 

Percentage라는 ScalarParameter값을 코드에서 수정해보겠습니다

 

c++에서 scalarParameter값을 수정하기위해서는 build.cs의 파일의 수정이 필요합니다

Build.cs파일에 해당 모듈을 추가해줍니다

"Slate", "SlateCore"

 

먼저 위젯을 띄우겠습니다

UPROPERTY(EditAnywhere, Category = "Percent")
TSubclassOf<UDungeonClearPercentWidget> percentWidgetAsset;

class UDungeonClearPercentWidget* percentWidget;

UFUNCTION()
void SetPercentWidget();

 

해당함수는 뷰포트에 TsubclassOf로 참조한 percentWidgetAsset을 띄웁니다

void ASwordPlayerGameBase::SetPercentWidget()
{
	ASwordPlayController* swordController = Cast<ASwordPlayController>(GetWorld()->GetFirstPlayerController());
	if (swordController)
	{
		percentWidget = CreateWidget<UDungeonClearPercentWidget>(swordController, percentWidgetAsset);
		percentWidget->AddToViewport();
	}
}

 

위젯에서 사용할 인스턴스를 할당해주고 위젯의 이미지이름 변수와 코드를 바인드해줍니다

 

위젯의 코드입니다

.h

UCLASS()
class BLASTERDREAM_API UDungeonClearPercentWidget : public UUserWidget
{
	GENERATED_BODY()
public:
	virtual void NativeConstruct() override;
	
	void setPercent(float percent);
	UPROPERTY(meta = (BindWidget))
	UImage* Image_PercentCircle;

	UPROPERTY()
	UMaterialInstanceDynamic* dynamicMaterial;
	
};

 

사용할 헤더를 추가해줍니다

#include "Components/Image.h"
#include "Materials/MaterialInstanceDynamic.h"

 

ScalarParameter인 Percentage의 퍼센트를 바꾸는 함수입니다

처음에는 0프로 로 초기화시킵니다 setPercent(float percent) 함수로 퍼센트를 업데이트시킵니다

void UDungeonClearPercentWidget::NativeConstruct()
{
	Super::NativeConstruct();
	UMaterialInterface* materialInstance = Cast<UMaterialInterface>(Image_PercentCircle->GetBrush().GetResourceObject());
	if (materialInstance)
	{
		dynamicMaterial = UMaterialInstanceDynamic::Create(materialInstance, this);
		if (dynamicMaterial)
		{
			FSlateBrush newBrush = Image_PercentCircle->GetBrush();
			newBrush.SetResourceObject(dynamicMaterial);
			Image_PercentCircle->SetBrush(newBrush);
	
			dynamicMaterial->SetScalarParameterValue(FName("Percentage"), 0.0f);
		}
	}
}

void UDungeonClearPercentWidget::setPercent(float percent)
{
	if (dynamicMaterial)
	{
		dynamicMaterial->SetScalarParameterValue(FName("Percentage"), percent);
	}
}

 

던전1부터 3까지 경유하면서 스폰되는 AI의 수는 123마리입니다

게임인스턴스에서 총 잡은 카운트를 세고있습니다 인스턴스의 skeletonDieSumCount변수입니다

게임모드에서 작업합니다

BeginPlay에서 캐스팅을 해줍니다

UStatGameInstance* myInstance;
class UDungeonClearPercentWidget* percentWidget;

 

myInstance = Cast<UStatGameInstance>(GetGameInstance());
percentWidget = Cast<UDungeonClearPercentWidget>(percentWidget);

 

tick에서 인스턴스의 총 잡은 카운트와 총잡아야할 카운트(123마리)를 퍼센트로 계산하여 위젯에 할당합니다

Clamp값을 주어 넘치지않게 해줍니다 Max는 1입니다

if (myInstance)
{
	float killCount = myInstance->skeletonDieSumCount;
	float nowPercent = killCount / 123.0f;
	nowPercent = FMath::Clamp(nowPercent, 0.0f, 1.0f);
	percentWidget->setPercent(nowPercent);
}

 

총 처치된 ai수 카운트퍼센트에 따라 좌측상단에있는 메테리얼의 ScalarParameter값이 변경되어 fill값이 변경됩니다

 

던전진행도를 숫자로도 나타내보겠습니다

 

텍스트를 달아줍니다

 

percent인 float값을 int형으로 바꾼뒤 그걸 string으로 형변환 그리고 뒤에 %를 붙히는 함수를 만들었습니다

void UDungeonClearPercentWidget::setTextPercent(float percent)
{
	int32 intPercent = FMath::RoundToInt(percent * 100.0f);
	FString percentString = FString::Printf(TEXT("%d%%"), intPercent);
	TextBlock_Percent->SetText(FText::FromString(percentString));
}

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

Unreal - 던전 클리어 위젯 만들기  (0) 2025.05.25
Unreal - 플레이어 리스폰  (0) 2025.05.24
Unreal - 자동 흡수되는 확률형 드롭 아이템 만들기  (0) 2025.05.22
Unrela - 시퀀스 만들기 (AI편)  (0) 2025.05.22
Unreal - 부숴지는 벽 만들기 (Chaos Distruction)  (0) 2025.05.22
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 던전 클리어 위젯 만들기
  • Unreal - 플레이어 리스폰
  • Unreal - 자동 흡수되는 확률형 드롭 아이템 만들기
  • Unrela - 시퀀스 만들기 (AI편)
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 컷씬
    언리얼 컷씬
    unreal look at
    언리얼 behavior tree
    언리얼
    언리얼 로딩창
    언리얼 behaviortree
    언리얼 foot step
    언리얼 로딩
    언리얼 페이드 아웃
    unreal 시퀀스
    unreal sequence
    unreal 로딩
    unreal loading
    언리얼 motionmatching
    언리얼 look at
    언리얼 시퀀스
    unreal 모션매칭
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 던전진행도 위젯 만들기 (스칼라 파라미터 조절하기)
상단으로

티스토리툴바