Material·Î UMG UImage ¸¶½ºÅ·

¾ð¸®¾ó ¸ÓƼ¸®¾óÀ» ÀÌ¿ëÇØ UMG UImage¸¦ ¸¶½ºÅ· Çغ¸ÀÚ.

»¡°£ »ç°¢Çü ¾ÈÀÇ Å¸¿øÇü À̹ÌÁö°¡ ¸¶½ºÅ·ÀÌ µÈ ½ÇÇà È­¸éÀÌ´Ù.



"Button1"À» Ŭ¸¯Çϸé UTexture2DDynamic À̹ÌÁö·Î ¹Ù²ï´Ù.
"Button2"¸¦ Ŭ¸¯Çϸé UTexture2D À̹ÌÁö·Î ¹Ù²ï´Ù.

UTexture2DDynamic À̹ÌÁö´Â À¥¿¡¼­ ´Ù¿î·Îµå ¹ÞÀº À̹ÌÁö°í UTexture2D À̹ÌÁö´Â ¸®¼Ò½º À̹ÌÁöÀÌ´Ù.

¸ÓƼ¸®¾ó ¸¸µé±â

mask ÅؽºÃĸ¦ ÀÌ¿ëÇØ ÅؽºÃĸ¦ ¸¶½ºÅ· ÇÑ´Ù.
¸ÓƼ¸®¾ó À̸§Àº "M_ui_mask"·Î ÇÑ´Ù.



µÎ°³ÀÇ "Texture Sample"À» "ÆĶó¹ÌÅÍ·Î º¯È¯"À» ÀÌ¿ëÇÏ¿© °¢°¢ BaseTexture, MaskTexture·Î º¯È¯ÇÑ´Ù.
ÆĶó¹ÌÅÍ·Î º¯È¯ÇÏ´Â ÀÌÀ¯´Â ¹öÆ° Ŭ¸¯½Ã ÅؽºÃĸ¦ ¹Ù²Ù±â À§Çؼ­ÀÌ´Ù.
Äڵ忡¼­´Â UMaterialInstanceDynamic::SetTextureParameterValue ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ¹Ù²Û´Ù.

¸ÓƼ¸®¾ó À̸§Àº M_ui_mask·Î ÇÑ´Ù.

UImage¿¡ ¸ÓƼ¸®¾ó Àû¿ë

UImage À§µåÁ¬ÀÎ Image_pictureÀÇ µðÅ×ÀÏ > Brush > Image¿¡ ¸ÓƼ¸®¾ó "M_ui_mask"·Î ÁöÁ¤ÇÑ´Ù.
UImageÀÇ Image´Â ÅؽºÃÄ »Ó¸¸ ¾Æ´Ï¶ó ¸ÓƼ¸®¾óµµ ÁöÁ¤ÀÌ °¡´ÉÇÑ´Ù.



UTexture2D À̹ÌÁö·Î ¹Ù²Ù±â

UMaterialInstanceDynamic::SetTextureParameterValue¸¦ ÀÌ¿ëÇØ "BaseTexture"¸¦ ¹Ù²Û´Ù.
ReplaceTexture´Â ½ÇÇàÀü¿¡ ÅؽºÃÄ ¸®¼Ò½º¸¦ ÁöÁ¤ÇØ µÐ´Ù.

MainMenu.h
#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MainMenu.generated.h"

UCLASS()
class UI_TEST_API UMainMenu : public UUserWidget
{
    GENERATED_BODY()

protected:
    virtual bool Initialize();

private:
    UFUNCTION()
    void OnPlayGame1();
    UFUNCTION()
    void OnPlayGame2();

    UFUNCTION()
    void OnGetTexture2D(UTexture2DDynamic* _texture);

protected:
    UPROPERTY()//UPROPERTY(meta = (BindWidget))
    class UButton* Game1_Button;

    UPROPERTY()//UPROPERTY(meta = (BindWidget))
    class UButton* Game2_Button;

    UPROPERTY()
    class UImage* Image_picture;

protected:
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    class UTexture2D* ReplaceTexture;

    class UAsyncTaskDownloadImage* mDownloadTask;
};

Button02¸¦ Ŭ¸¯Çϸé "UTexture2D* ReplaceTexture" À̹ÌÁö·Î ¹Ù²Û´Ù.
UTexture2D::GetDynamicMaterial ÇÔ¼ö·Î ¸ÓƼ¸®¾óÀ» ±¸ÇÑ´Ù.
UMaterialInstanceDynamic::SetTextureParameterValue ÇÔ¼ö¿¡ ReplaceTexture¸¦ ÁöÁ¤ÇÑ´Ù.



void UMainMenu::OnPlayGame2()
{
    UE_LOG(LogTemp, Warning, TEXT("Clicked Game222222!"));

    UMaterialInstanceDynamic* Mat = Image_picture->GetDynamicMaterial();
    if (Mat)
    {
        UE_LOG(LogTemp, Warning, TEXT("Exist Mat"));
        Mat->SetTextureParameterValue(FName(TEXT("BaseTexture")), ReplaceTexture);
    }
}

½ÇÇàÈ­¸éÀº ´ÙÀ½°ú °°´Ù.




UTexture2DDynamic À̹ÌÁö·Î ¹Ù²Ù±â

À¥¿¡¼­ ´Ù¿î·ÎµåÇÑ UTexture2DDynamic À̹ÌÁö·Î ¹Ù²Û´Ù.
À̹ÌÁö ´Ù¿î·Îµå¿¡ ´ëÇÑ ÄÚµå ¼³¸íÀº »ý·« ÇÑ´Ù.

void UMainMenu::OnGetTexture2D(UTexture2DDynamic* _texture)
{
    //Image_picture->SetBrushFromTextureDynamic(_texture, true);  //À̹ÌÁö Àß ¹Þ¾Ò´ÂÁö Å×½ºÆ®
#if  1
    UMaterialInstanceDynamic* Mat = Image_picture->GetDynamicMaterial();
    if (Mat)
    {
        UE_LOG(LogTemp, Warning, TEXT("Exist Mat"));
        Mat->SetTextureParameterValue(FName(TEXT("BaseTexture")), _texture);
    }
#endif
}

void UMainMenu::OnPlayGame1()
{
    UE_LOG(LogTemp, Warning, TEXT("Clicked Game11111!"));

    //Start downloading the image.
    FString mURL = TEXT("https://xpressengine.github.io/XEIcon/assets/img/img_main_m.jpg");
    mDownloadTask = NewObject<UAsyncTaskDownloadImage>();
    mDownloadTask->OnSuccess.AddDynamic(this, &UMainMenu::OnGetTexture2D);
    mDownloadTask->Start(mURL);
}

Button01À» Ŭ¸¯Çϸé ÅؽºÃĸ¦ ´Ù¿î·Îµå ÇÑ´Ù.
ÅؽºÃÄ ´Ù¿î·Îµå°¡ ³¡³ª¸é OnGetTexture2D ÇÔ¼ö¿¡¼­ UTexture2DDynamic ÅؽºÃÄ·Î ¹Ù²Û´Ù.
½ÇÇà È­¸éÀº ´ÙÀ½°ú °°´Ù.



´Ù¿î·Îµå)
MainMenu.h
MainMenu.cpp
circle_mask.png

ÂüÁ¶)
UE4 C++ read network pictures
https://blog.katastros.com/a?ID=01700-140cf229-69f3-42a1-9027-0502477c2b3c

À̹ÌÁö¸¦ ´Ù¿î·ÎµåÇÏ°í UTexture2DDynamic·Î ÅؽºÃÄ ¹Ù²Ù±â
https://answers.unrealengine.com/questions/916137/view.html

Åõ¸íÇÑ PNG À̹ÌÁö¸¦ ¸¸µé¾î ÁÖ´Â °÷
https://www.remove.bg/ko