调整目录结构

This commit is contained in:
2025-11-16 00:26:50 +08:00
parent 5afc656fba
commit 9f018feb7d
606 changed files with 64949 additions and 108 deletions
+24 -30
View File
@@ -21,15 +21,16 @@
// Sets default values
AIronBlock::AIronBlock() : StaticMeshComp(nullptr),
AIronBlock::AIronBlock() : StaticMeshComp(nullptr), DeformBaseMat(nullptr), DeformCalMat(nullptr),
PositionRenderTarget0(nullptr), PositionRenderTarget1(nullptr),
DynMaterial(nullptr)
DynMaterial(nullptr), DynCalMaterial(nullptr)
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
RootComponent = StaticMeshComp;
StaticMeshComp->AttachToComponent(RootComponent,FAttachmentTransformRules::SnapToTargetIncludingScale);
//RootComponent = StaticMeshComp;
}
void AIronBlock::PostInitProperties()
{
@@ -63,12 +64,6 @@ UTextureRenderTarget2D* AIronBlock::CreateDeformRT(const FString& RTName, int32
UTextureRenderTarget2D* RenderTarget = NewObject<UTextureRenderTarget2D>(this, FName(*RTName));
if (RenderTarget)
{
// **关键修复 1:** 设置为32位浮点数格式,以匹配 FLinearColor 和 CS 的 PF_A32B32G32R32F
//RenderTarget->RenderTargetFormat = RTF_RGBA32f;
// **关键修复 2:** 明确告诉引擎我们需要为这个纹理创建UAV
//RenderTarget->bCanCreateUAV = true;
RenderTarget->InitCustomFormat(Size, Size, PF_A32B32G32R32F, false);
RenderTarget->bNeedsTwoCopies = true; // 告知引擎这个纹理会被用于Ping-Pong,优化内存
RenderTarget->SizeX = Size;
@@ -80,8 +75,6 @@ UTextureRenderTarget2D* AIronBlock::CreateDeformRT(const FString& RTName, int32
RenderTarget->ClearColor = ClearColor;
// 立即创建RHI资源
RenderTarget->UpdateResource();
// 定义你要清除的颜色 (R=0.5, G=0.5, B=0.5)
//FLinearColor ClearColor = FLinearColor(0.25f, 0.25f, 0.25f, 1.0f);
// 调用 Kismet Rendering Library 的清除函数
UKismetRenderingLibrary::ClearRenderTarget2D(
@@ -89,8 +82,8 @@ UTextureRenderTarget2D* AIronBlock::CreateDeformRT(const FString& RTName, int32
RenderTarget,
ClearColor
);
FlushRenderingCommands();
RenderTarget->UpdateResourceImmediate(true);
//FlushRenderingCommands();
//RenderTarget->UpdateResourceImmediate(true);
}
return RenderTarget;
}
@@ -98,12 +91,9 @@ UTextureRenderTarget2D* AIronBlock::CreateDeformRT(const FString& RTName, int32
void AIronBlock::InitializePositionTexture()
{
// 创建位置纹理
const int32 TextureSize = TexSize; // 纹理尺寸
// --- 关键修复: 创建两个 RenderTarget ---
PositionRenderTarget0 = CreateDeformRT(TEXT("PositionRT0"), TextureSize);
PositionRenderTarget1 = CreateDeformRT(TEXT("PositionRT1"), TextureSize);
PositionRenderTarget0 = CreateDeformRT(TEXT("PositionRT0"), TexSize);
PositionRenderTarget1 = CreateDeformRT(TEXT("PositionRT1"), TexSize);
// 设置变形材质
SetupDeformationMaterial(nullptr);
@@ -115,23 +105,27 @@ void AIronBlock::SetupDeformationMaterial(UTexture2D* OrigTex)
// 创建动态材质实例
if (StaticMeshComp)
{
// 加载基础材质 (请确保你的材质支持读取 PositionTexture)
UMaterial* BaseMaterial = LoadObject<UMaterial>(nullptr, TEXT("/Game/Materials/M_Iron")); // 示例路径
if (!BaseMaterial)
if (!DeformBaseMat)
{
BaseMaterial = LoadObject<UMaterial>(nullptr, TEXT("/Engine/BasicShapes/BasicShapeMaterial"));
DeformBaseMat = LoadObject<UMaterial>(nullptr, TEXT("/Game/Res/Materials/M_Iron"));
}
UMaterial* CalMaterial = LoadObject<UMaterial>(nullptr, TEXT("/Game/Materials/M_HitCal")); // 示例路径
if (!CalMaterial)
if (!DeformBaseMat)
{
CalMaterial = LoadObject<UMaterial>(nullptr, TEXT("/Engine/BasicShapes/BasicShapeMaterial"));
DeformBaseMat = LoadObject<UMaterial>(nullptr, TEXT("/Engine/BasicShapes/BasicShapeMaterial"));
}
if (BaseMaterial && CalMaterial)
if (!DeformCalMat)
{
DynMaterial = UMaterialInstanceDynamic::Create(BaseMaterial, this);
DynCalMaterial = UMaterialInstanceDynamic::Create(CalMaterial, this);
DeformCalMat = LoadObject<UMaterial>(nullptr, TEXT("/Game/Res/Materials/M_HitCal"));
}
if (!DeformCalMat)
{
DeformCalMat = LoadObject<UMaterial>(nullptr, TEXT("/Engine/BasicShapes/BasicShapeMaterial"));
}
if (DeformBaseMat && DeformCalMat)
{
DynMaterial = UMaterialInstanceDynamic::Create(DeformBaseMat, this);
DynCalMaterial = UMaterialInstanceDynamic::Create(DeformCalMat, this);
StaticMeshComp->SetMaterial(0, DynMaterial);
//StaticMeshComp->SetMaterial(1, DynCalMaterial);
// 设置初始参数
if (DynMaterial)
{
@@ -185,4 +179,4 @@ void AIronBlock::OnHammerHit(const FHitResult& HitResult)
void AIronBlock::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
}
+19 -20
View File
@@ -17,30 +17,22 @@ UCLASS()
class BLADESMITH_API AIronBlock : public AActor
{
GENERATED_BODY()
UPROPERTY(EditAnywhere)
public:
UPROPERTY()
UStaticMeshComponent* StaticMeshComp;
/** 用于Ping-Pong缓冲的渲染目标 A */
UPROPERTY()
UTextureRenderTarget2D* PositionRenderTarget0;
/** 用于Ping-Pong缓冲的渲染目标 B */
UPROPERTY()
UTextureRenderTarget2D* PositionRenderTarget1;
/** 应用于网格的动态材质实例 */
UPROPERTY()
UMaterialInstanceDynamic* DynMaterial;
/** 应用于网格的动态材质实例 */
UPROPERTY()
UMaterialInstanceDynamic* DynCalMaterial;
/* 变形表现基础材质 */
UPROPERTY(EditAnywhere)
UMaterial* DeformBaseMat;
/* 变形冲击计算材质 */
UPROPERTY(EditAnywhere)
UMaterial* DeformCalMat;
/* 冲击力系数 */
UPROPERTY(EditAnywhere)
float ImpactForce;
/* 冲击力范围 */
UPROPERTY(EditAnywhere)
float ImpactAffectRange;
/* 冲击计算RT贴图大小 */
UPROPERTY(EditAnywhere)
float TexSize;
public:
@@ -69,7 +61,14 @@ private:
* 1: 读 RT1, 写 RT0
*/
int32 CurrentTextureIndex = 0;
/** 应用于网格的动态材质实例 */
UMaterialInstanceDynamic* DynMaterial;
/** 用于Ping-Pong缓冲的渲染目标 A */
UTextureRenderTarget2D* PositionRenderTarget0;
/** 用于Ping-Pong缓冲的渲染目标 B */
UTextureRenderTarget2D* PositionRenderTarget1;
/** 应用于网格的动态材质实例 */
UMaterialInstanceDynamic* DynCalMaterial;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;