GetHitResultUnderCursorForObjects and EObjectTypeQuery in C++

There are a few questions discussing EObjectTypeQuery on the AnswerHub that were never answered but they are fairly old so I am hoping something has changed in the meantime. I am trying to use GetHitResultUnderCursorForObjects() so something like this

TArray< TEnumAsByte< EObjectTypeQuery > > objects;
 objects.Add(EObjectTypeQuery::ObjectTypeQuery1);

 FHitResult hitResult;
if ( GetHitResultUnderCursorForObjects(objects,true,hitResult))
{
// Do the stuff...
}

but how do I know which object ObjectTypeQuery1 corresponds to? Just for concreteness lets say I am trying to find HitResults for objects derived from a class called AShape. Is there any workaround for this? In blueprints you can see the list of objects so I assume it must be possible somehow…
Thanks!

The logic of the pointed method is based on “collision channels” and not directly on “actor types”. Here you can find more detailed information using BP (of course it applies also to C++): https://impetus-games.com/blog/Rotating-an-Actor-towards-the-Mouse-Cursor-in-UE4 .

For the C++ side, after having properly configured the collision channels as explained in the above link, here is an example on how to fill the input array using both predefined and custom collision channels:

TArray<TEnumAsByte<EObjectTypeQuery> > objTypes;

// From "common" ECollisionChannel values
objTypes.Add(UEngineTypes::ConvertToObjectType(ECC_WorldDynamic));

// From "custom" collision channels.
ECollisionChannel CollisionChannel;
FCollisionResponseParams ResponseParams;
if (UCollisionProfile::GetChannelAndResponseParams(FName(TEXT("MyChannel")), CollisionChannel, ResponseParams))
{
    objTypes.Add(UEngineTypes::ConvertToObjectType(CollisionChannel));
}
1 Like