void AActor::DebugShowComponentHierarchy( const TCHAR* Info, bool bShowPosition ) { TArray<AActor*> ParentedActors; GetAttachedActors( ParentedActors ); if( Info ) { UE_LOG( LogActor, Warning, TEXT("--%s--"), Info ); } else { UE_LOG( LogActor, Warning, TEXT("--------------------------------------------------") ); } UE_LOG( LogActor, Warning, TEXT("--------------------------------------------------") ); UE_LOG( LogActor, Warning, TEXT("Actor [%x] (%s)"), this, *GetFName().ToString() ); USceneComponent* SceneComp = GetRootComponent(); if( SceneComp ) { int32 NestLevel = 0; DebugShowOneComponentHierarchy( SceneComp, NestLevel, bShowPosition ); } else { UE_LOG( LogActor, Warning, TEXT("Actor has no root.") ); } UE_LOG( LogActor, Warning, TEXT("--------------------------------------------------") ); }
void AActor::DebugShowOneComponentHierarchy( USceneComponent* SceneComp, int32& NestLevel, bool bShowPosition ) { FString Nest = ""; for (int32 iNest = 0; iNest < NestLevel ; iNest++) { Nest = Nest + "---->"; } NestLevel++; FString PosString; if( bShowPosition ) { FVector Posn = SceneComp->ComponentToWorld.GetLocation(); //PosString = FString::Printf( TEXT("{R:%f,%f,%f- W:%f,%f,%f}"), SceneComp->RelativeLocation.X, SceneComp->RelativeLocation.Y, SceneComp->RelativeLocation.Z, Posn.X, Posn.Y, Posn.Z ); PosString = FString::Printf( TEXT("{R:%f- W:%f}"), SceneComp->RelativeLocation.Z, Posn.Z ); } else { PosString = ""; } AActor* OwnerActor = SceneComp->GetOwner(); if( OwnerActor ) { UE_LOG(LogActor, Warning, TEXT("%sSceneComp [%x] (%s) Owned by %s %s"), *Nest, SceneComp, *SceneComp->GetFName().ToString(), *OwnerActor->GetFName().ToString(), *PosString ); } else { UE_LOG(LogActor, Warning, TEXT("%sSceneComp [%x] (%s) No Owner"), *Nest, SceneComp, *SceneComp->GetFName().ToString() ); } if( SceneComp->AttachParent ) { if( bShowPosition ) { FVector Posn = SceneComp->ComponentToWorld.GetLocation(); //PosString = FString::Printf( TEXT("{R:%f,%f,%f- W:%f,%f,%f}"), SceneComp->RelativeLocation.X, SceneComp->RelativeLocation.Y, SceneComp->RelativeLocation.Z, Posn.X, Posn.Y, Posn.Z ); PosString = FString::Printf( TEXT("{R:%f- W:%f}"), SceneComp->RelativeLocation.Z, Posn.Z ); } else { PosString = ""; } UE_LOG(LogActor, Warning, TEXT("%sAttachParent [%x] (%s) %s"), *Nest, SceneComp->AttachParent , *SceneComp->AttachParent->GetFName().ToString(), *PosString ); } else { UE_LOG(LogActor, Warning, TEXT("%s[NO PARENT]"), *Nest ); } if( SceneComp->AttachChildren.Num() != 0 ) { for (int32 iChild = 0; iChild < SceneComp->AttachChildren.Num() ; iChild++) { USceneComponent* EachSceneComp = Cast<USceneComponent>(SceneComp->AttachChildren[iChild]); DebugShowOneComponentHierarchy(EachSceneComp,NestLevel, bShowPosition ); } } else { UE_LOG(LogActor, Warning, TEXT("%s[NO CHILDREN]"), *Nest ); } }