This didn’t work for me in 4.27
FolliageMeshes was deprecated
Had to do something like this
for (TActorIterator<AInstancedFoliageActor> ActorItr(GetWorld()); ActorItr; ++ActorItr)
{
AInstancedFoliageActor* FoliageMesh = *ActorItr;
auto FoliageComponents = FoliageMesh->GetComponentsByClass(UFoliageInstancedStaticMeshComponent::StaticClass());
for (auto& Comp : FoliageComponents)
{
auto FoliageComponent = Cast<UFoliageInstancedStaticMeshComponent>(Comp);
if (FoliageComponent != nullptr)
{
UStaticMesh* Mesh = FoliageComponent->GetStaticMesh();
auto InstanceCount = FoliageComponent->GetInstanceCount();
UE_LOG(LogTemp, Display, TEXT("FoliageComp Mesh:%s Instances:%d"),
*Mesh->GetName(),
FoliageComponent->GetInstanceCount());
for (int i = 0; i < InstanceCount; ++i)
{
FTransform InstanceTransform;
FoliageComponent->GetInstanceTransform(i, OUT InstanceTransform, true);
UE_LOG(LogTemp, Display, TEXT("%s[%d] %s"),
*Mesh->GetName(),
i,
*InstanceTransform.ToString()
);
}
}
}
Need to include Foliage module in YourProject.Build.cs
and headers:
#include “Runtime/Foliage/Public/InstancedFoliageActor.h”
#include “Runtime/Foliage/Public/FoliageInstancedStaticMeshComponent.h”
#include “Engine/StaticMesh.h”