Alexa.Ki
(Alendromeda.ki)
May 8, 2022, 7:29pm
1
I have a skeletal mesh and I want to set a material on a specific slot. How can I do it?
I am currently trying the following method but its not working.
void AMyCharacter::SetDynamicMaterials()
{
ReturnDynamicMaterial = UMaterialInstanceDynamic::Create(MaterialSource, this, FName("MyDynMaterial"));
static ConstructorHelpers::FObjectFinder<UMaterialInterface>MaterialSource (TEXT("/Game/Assets/MyDynMaterial"));
if (MaterialSource.Object != nullptr)
{
GetMesh()->SetMaterialByName("head_Slot", ReturnDynamicMaterial);
}
return;
}
Alexa.Ki
(Alendromeda.ki)
May 8, 2022, 8:04pm
2
Incase if you want to see the example in blueprints. this is what I want to achieve …
Alexa.Ki
(Alendromeda.ki)
May 8, 2022, 8:10pm
3
Alexa.Ki:
SetDynamicMaterials
This is how it looks like in the native code generator.
void AMyTestCharacter::SetDynamicMaterials()
{
UMaterialInstanceDynamic* DynMaterialRefference{};
UMaterialInstanceDynamic* CreateDynamicMaterialInstance_ReturnValue{};
CreateDynamicMaterialInstance_ReturnValue = UKismetMaterialLibrary::CreateDynamicMaterialInstance(this, CastChecked<UMaterialInterface>(CastChecked<UDynamicClass>(AMyTestCharacter::StaticClass())->UsedAssets[0], ECastCheckedType::NullAllowed), FName(TEXT("None")), EMIDCreationFlags::None);
DynMaterialRefference = CreateDynamicMaterialInstance_ReturnValue;
if(::IsValid((*(AccessPrivateProperty<USkeletalMeshComponent* >((this), ACharacter::Mesh() )))))
{
(*(AccessPrivateProperty<USkeletalMeshComponent* >((this), ACharacter::Mesh() )))->SetMaterialByName(FName(TEXT("TopBody.Slot")), DynMaterialRefference);
}
}