Unreal Engine 4 프로그래밍 c++/UMG

언리얼 c++ 위젯 Tint값 설정하기

코닥쿠 2022. 1. 25. 01:40
반응형

PlayerWeaponHUD.h

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "ThirdPersonCharacter.h"
#include "Runtime/UMG/Public/UMG.h"
#include "PlayerWeaponHUD.generated.h"

/**
 * 
 */
UCLASS()
class PROJECT_API UPlayerWeaponHUD : public UUserWidget
{
	GENERATED_BODY()
	
public:
	virtual void NativeConstruct() override;

	virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;
private:
	class AThirdPersonCharacter* Player;

	//색깔변수//
	FLinearColor EquipColor;
	FLinearColor UnEnquipColor;
    //////////

public:
	//수류탄 이미지//
	UPROPERTY(meta = (BindWidget))
	class UImage* GrenadeImage1;
	UPROPERTY(meta = (BindWidget))
	class UImage* GrenadeImage2;
	UPROPERTY(meta = (BindWidget))
	class UImage* GrenadeImage3;
	///////////////
};

PlayerWeaponHUD.cpp

#include "PlayerWeaponHUD.h"
#include "Runtime/UMG/Public/Components/Image.h"
#include "Runtime/UMG/Public/Components/TextBlock.h"
#include "ThirdPersonCharacter.h"
#include "Engine.h"

void UPlayerWeaponHUD::NativeConstruct()
{
	Super::NativeConstruct();

	Player = Cast<AThirdPersonCharacter>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0));
	SetVisibility(ESlateVisibility::Visible);

	//장착시 색깔과 장착 안했을시 색깔 지정//
	EquipColor = FLinearColor(1.f, 1.f, 1.f, 1.f);
	UnEnquipColor = FLinearColor(1.f, 1.f, 1.f, 0.3f);
}

void UPlayerWeaponHUD::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
	Super::NativeTick(MyGeometry, InDeltaTime);

	//수류탄의 개수에 따라 색깔을 지정해줌//
	if (Player->Current_Grenade == 3)
	{
		GrenadeImage3->SetBrushTintColor(EquipColor);
		GrenadeImage2->SetBrushTintColor(EquipColor);
		GrenadeImage1->SetBrushTintColor(EquipColor);
	}
	else if (Player->Current_Grenade == 2)
	{
		GrenadeImage3->SetBrushTintColor(UnEnquipColor);
		GrenadeImage2->SetBrushTintColor(EquipColor);
		GrenadeImage1->SetBrushTintColor(EquipColor);
	}
	else if (Player->Current_Grenade == 1)
	{
		GrenadeImage3->SetBrushTintColor(UnEnquipColor);
		GrenadeImage2->SetBrushTintColor(UnEnquipColor);
		GrenadeImage1->SetBrushTintColor(EquipColor);
	}
	else if (Player->Current_Grenade == 0)
	{
		GrenadeImage3->SetBrushTintColor(UnEnquipColor);
		GrenadeImage2->SetBrushTintColor(UnEnquipColor);
		GrenadeImage1->SetBrushTintColor(UnEnquipColor);
	}
    	///////////////////////////////////
}

Widget c++같은경우에는 FLinearColor로 색을 지정할수 있으면 채도의 값은 FLinerColor의 기본 생성자로 생성할 수 있다.

그래서 값을 R,G,B,A 순으로 최대값(1.f, 1.f, 1.f, 1.f)값이다.

지금은 알파값만 조정하여 수류탄이 있을 경우에는 1을 주고 없을경우에는 0.3f값으로 좀 더 있다는 느낌을 주도록 하였습니다.

 

Weapon이미지와 구분을 지어서 이런식으로 좀 보기 편하게 만들어놨습니다.

 

 

반응형