Scene Graph - Trailing ID issues (can still be edited and are shared for instanced prefab child entities)

Summary

The new trailing ID of entities should make all entities unique, however that does not seem to apply to prefab child entities. Their ids remain the same across all placed prefab instances, which makes it partly impossible to distill them when picking the correct entity reference.

Please select what you are reporting on:

Unreal Editor for Fortnite

What Type of Bug are you experiencing?

UI/Tools

Steps to Reproduce

  • Create a prefab with multiple child entities
  • Place multiple instances of that prefab into the main level

Additional example:

vz_test_entity_id_component := class<final_super>(component) {
  @editable
  ETarget: entity
}

Expected Result

All entities should get unique ids after being placed, all references (even when connected inside a prefab graph itself) should be updated to the new and unique reference. Right now this is still an issue: Scene Graph - Prefab referenced entities still remain unique when placed into the main level

Observed Result

  • Prefab graph does not handle IDs correctly, they are all remain white and are not grayed out and can still be edited.

  • When placing multiple instances of the same prefab, IDs of child entities are not updated, all remain the same.

  • Picking the right entity by the same becomes tricky as even all ids of prefab child entities remain the same and therefore look like duplicates.

Platform(s)

PC / UEFN

FORT-901745 has been ‘Closed’. This is working as intended by design.

Quick breakdown of why this was marked as “by design”.

The names of the entities inside a prefab aren’t GUIDs, they’re the names of the fields that will eventually be generated into the prefab Verse class. So you can imagine that you have each sub-entity in the prefab looking like this some day in the future:

my_prefab := class(entity):
     # components and sub-entities also nested added inside the entities
     SubEntity_nfiwhriakt3jb3:entity = entity{} 
     SubEntity_j23kj52h3tlkj2:entity = entity{}

When you instance the prefab into the world or another prefab, the sub-entities won’t get new names, as those are just the names of the fields on your prefab class. They’re named by default with the additional guidy looking part to avoid collisions when multiple users are creating entities in the same prefab. That’s all leading to enabling OFPE (one file per entity) workflows, which will be coming in the near future.

You can choose to rename the entities inside your prefab definition to more logical/readable names. Eventually with multi-user workflows with OFPE using too simple of names increases the potential for name/file collisions, though the tools won’t stop you from choosing whatever names you want if you like. Naming sub-entities inside a prefab to simpler names is still a good choice readability and coding wise, assuming you don’t have multiple authors trying to change one prefab at the same time.

To recap, what you’re seeing in the editor is an instance of a big class. You cannot change the field names on a class on a per-instance basis.

1 Like