原视频地址:【虚幻5】UE5C++零基础全网全流程开发从入门到进阶教程合集(持续跟新中)_哔哩哔哩_bilibili
创建MyMaterialActor
为我们的MyMaterialActor添加两个组件初始化组件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
USceneComponent* MySceneCom;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
UStaticMeshComponent* MyMeshCom;
并在构造函数中初始化组件
AMyMaterialActor::AMyMaterialActor()
{
// 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;
MySceneCom = CreateDefaultSubobject<USceneComponent>(TEXT("MyCustomScene"));
MyMeshCom = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyMesh"));
RootComponent = MySceneCom;
MyMeshCom->SetupAttachment(MySceneCom);
//静态加载资源
static ConstructorHelpers::FObjectFinder<UStaticMesh> myStaticMesh(TEXT("/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube'"));
MyMeshCom->SetStaticMesh(myStaticMesh.Object);
}
创建一个材质,材质编辑器中,生成Vector1base - Vector4base 快捷键需要配合鼠标左键+数字键
在MyMaterialActor的BeginPlay中动态加载材质,注意LoadObject<UMaterialInterface>,而不是UMaterialInstance,并绑定到我们的StaticMeshComponent上,并通过UMaterialIntanceDynamic对象对我们的材质进行动态修改。
void AMyMaterialActor::BeginPlay()
{
Super::BeginPlay();
UMaterialInterface* MyMaterialInstance = LoadObject<UMaterialInterface>(nullptr, TEXT("/Script/Engine.Material'/Game/myProperty/MyMaterial/MyMaterial1.MyMaterial1'"));
if (MyMaterialInstance) {
UMaterialInstanceDynamic* DynamicMaterial = MyMeshCom->CreateDynamicMaterialInstance(0, MyMaterialInstance);
DynamicMaterial->SetVectorParameterValue("BaseColor",FLinearColor::Red);
DynamicMaterial->SetScalarParameterValue("BaseMetallic", 1);
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, TEXT("BeginPlay!"));
}
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, TEXT("False!"));
}