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이미지와 구분을 지어서 이런식으로 좀 보기 편하게 만들어놨습니다.
반응형