这种方法是直接使用C++调整贴图
1.新建C++类,继承UserWidget
下图是新建好的,取名CanvasUserWidget
2.修改CanvasUserWidget类
CanvasUserWidget.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Image.h"
#include "CanvasUserWidget.generated.h"
/**
*
*/
UCLASS()
class WATERWALL426_API UCanvasUserWidget : public UUserWidget
{
GENERATED_BODY()
public:
UCanvasUserWidget(const FObjectInitializer& ObjectInitializer);
virtual void NativeConstruct()override;
UFUNCTION(BlueprintCallable)
void CreateTexture();
UFUNCTION(BlueprintCallable)
void Draw(FVector2D Pos);
private:
//Iamge控件
UImage* pImage;
UPROPERTY(EditAnywhere)
UTexture2D* pTexture;
};
CanvasUserWidget.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "CanvasUserWidget.h"
UCanvasUserWidget::UCanvasUserWidget(const FObjectInitializer& ObjectInitializer) :Super(ObjectInitializer)
{
}
void UCanvasUserWidget::NativeConstruct()
{
Super::NativeConstruct();
}
void UCanvasUserWidget::CreateTexture()
{
if (pTexture)return;
//create
pTexture = UTexture2D::CreateTransient(1920, 1080);
pTexture->UpdateResource();
//set brush
pImage = Cast<UImage>(GetWidgetFromName(FName(TEXT("Image_Canvas"))));
pImage->SetBrushFromTexture(pTexture);
}
void UCanvasUserWidget::Draw(FVector2D Pos)
{
if (!pTexture)return;
FTexture2DMipMap& mipmap = pTexture->PlatformData->Mips[0];
unsigned char* Data = (unsigned char*)mipmap.BulkData.Lock(LOCK_READ_WRITE);
int texturex = pTexture->PlatformData->SizeX;
int texturey = pTexture->PlatformData->SizeY;
float bPerUV_v = 1.0 / texturey;
for (int32 y = 0; y < texturey; y++)
{
for (int32 x = 0; x < texturex; x++)
{
if (x<= Pos.X + 4&&x>= Pos.X - 4&&y<= Pos.Y+4&& y >= Pos.Y - 4)
{
Data[(y * texturex + x) * 4 + 0] = 0;//B
Data[(y * texturex + x) * 4 + 1] = 0;//G
Data[(y * texturex + x) * 4 + 2] = 255;//R
Data[(y * texturex + x) * 4 + 3] = 255;//A 0:全透明;255:全不透明
}
}
}
mipmap.BulkData.Unlock();
pTexture->UpdateResource();
//update
pImage->SetBrushFromTexture(pTexture);
}
3.新建蓝图,选择CanvasUserWidget
添加“画布画板”和“图像”控件,将图像命名为Image_Canvas
添加函数
4.新建Pawn和GameMode
略(懒.....麻烦看前一篇)