You can 'tag' actor and components.
A tag is a string (well, an FName internally) you assign to your actors and components. Each of them can have multiple tags.
The 'Tags' properties allows you to tag actors:
your_actor.Tags = ['foo', 'Bar', tEsT']You can eventually fast-check an actor for the availability of a tag:
if your_actor.actor_has_tag('foo'):
ue.log('Success')Finding all actors with a tag is unfortuntaley a slow operation (in C++, Blueprint and obviously python):
import unreal_engine as ue
def find_all_actors_with_tag(world, tag):
for actor in world.all_actors():
if actor.actor_has_tag(tag):
yield actor
world = ue.get_editor_world()
for actor in find_all_actors_with_tag(world, 'foo'):
print(actor)Eventually you can use the blueprint api:
import unreal_engine as ue
from unreal_engine.classes import GameplayStatics
world = ue.get_editor_world()
# blueprint ufunctions returns a tuple (as UFunctions can returns multiple values)
actors, = GameplayStatics.GetAllActorsWithTag(world, 'one')
for actor in actors:
print(actor)You can tag components too using the property 'ComponentTags':
your_component.ComponentTags = ['one', 'two', 'three']Fast-check of tag availability can be done with the component_has_tag() function:
if your_component.component_has_tag('one'):
print('yes')While you can get the list of actor's component tagged with the specific value:
component_list = your_actor.get_components_by_tag('two')The function can take an optional argument specifying which classes of ActorComponent must be taken into account:
from unreal_engine.classes import SceneComponent
# search all the components children of the class SceneComponent and tagged with 'two'
component_list = your_actor.get_components_by_tag('two', SceneComponent)