虚幻 C++获取所有骨骼、材质

  1. 获取所有骨骼mesh
  2. 获取其上的所有材质,并创建动态材质方便修改

直接上代码

this->GetComponents<USkeletalMeshComponent>(meshes,true);
    UE_LOG(LogTemp, Warning, TEXT("meshes count : %d"), meshes.Num());
    for (auto mesh : meshes)
    {
        auto ms = mesh->GetMaterials();
        for (int i = 0; i < ms.Num(); ++i)
        {
            //如果是动态材质直接添加
            if (ms[i]->IsA(UMaterialInstanceDynamic::StaticClass())) {
                materials.Add(Cast<UMaterialInstanceDynamic>(ms[i]));
            } else {
                //不是则创建动态材质
                UMaterialInstanceDynamic* md = UMaterialInstanceDynamic::Create(ms[i], this);
                mesh->SetMaterial(i,md);
                materials.Add(md);
            }
        }
    }
    UE_LOG(LogTemp, Warning, TEXT("materials count : %d"), materials.Num());