Search scene for Blueprint?

I am trying to find a Blueprint class in my scene. I created it with Blueprints → new empty blueprint class, named it TestCam and based it on Pawn. It contains a skeletalMesh and a Camera.

I have tried using Iterators, as I usually do, but I cannot make my code find it. What class should I be looking for? I have tried APawn, AActor, UObject and even USceneComponent in this code:

USceneComponent* getActor(FString name)  //i pass in the name as it is in the scene outliner
{
	const TCHAR* Name = *name;

	UWorld* World = GEngine->GameViewport->();
	TArray<USceneComponent*> PawnActors;

	for (TObjectIterator<USceneComponent> Itr; Itr; ++Itr)
	{		
		if (Itr->GetName().Contains(name))
		{
			PawnActors.Add(*Itr);
		}
	}
	return PawnActors[0];
}

First of all use TActorIterator insted of TObjectInterator, it will limit search pool to selected world.

Insted of using name, try to use UClass* of your blueprint, it will be more reliable, you can get UClass of object using GetClass() function. I don’t how you would get UClass of blueprint, one way you could do is to make C++ UClass varable somewhere that you can set in editor and compare based on that

Also keep in mind what you doing is quite expensive in performance, you could save up a lot of CPU time by making actors register themselves somewhere, list themselves in to some list in more global object like GameMode

Thanks! i actually just switched to ObjectItr to test. Will switch back.

I am trying something like:

if(ActorItr->IsA(TestCam::StaticClass()))

But obviously it cant find that class. Hmmm.

… i’m not too worried about performance for this, It doesn’t run every tick, just on user interaction.

So it’s C++ class? Note that you can use StaticClass only for C++ classes, to get UClass blueprint you can use 2 methods mentioend above.

Where do you execute your getActor function?

Sorry, no it is a blueprint class. I am totally stuck here. If I have:

if (ActorItr->GetClass()), what should the rest of the code look like?

I need to somehow get a reference to the class, but that is where my mind boggles.

This function is executed on keypress currently, from inside plugin code.

In a classic case of overthinking a problem… I have been overthinking this problem. I have done this with GetActorLabel().

for (TActorIterator<AActor> ActorItr(World); ActorItr; ++ActorItr)
	{		
		UE_LOG(LogTemp, Log, TEXT("GetActorLabel: %s"), *ActorItr->GetActorLabel());
		if (ActorItr->GetActorLabel().Contains("TestCam"))
		{
			UE_LOG(LogTemp, Log, TEXT("FOUND: %s"), *ActorItr->GetActorLabel());
			return *ActorItr;
		}

	}

Thanks @anonymous_user_f5a50610, yet again, for your help.