If a parent blueprint has data that is used by asset registry tags such as the AssetBundleData, any child blueprints that derive from it will use that in their exported tags. If the parent blueprint is modified and resaved by either a manual change or something like a fixup redirects, the parent asset registry tags will be updated, but the child blueprint will not be resaved so will have out of date tags. If the child directly referenced the relevant object it would probably get resaved due to the reference graph, but if it only inherits it that data will not be captured by the graph and the child will probably get skipped. This can happen with any tags but the initial repro was from bundles. 

Possible solutions:

  1. Manually resave the child when this happens, this is the approach that has been taken by internal games as it is relatively rare
  2. Change the reference tracking code so it writes parent-created references into the header for child BPs, this will pick up many references we don't actually want tracked though
  3. Modify fixup processes to resave all child BPs when saving parents. This is hard to do right now because the asset registry does not understand parent/child relationships but there has been some talk of changing that
  4. Manually refresh the tags some other way. UPrimaryDataAsset::PostLoad handles this when the child is loaded, but this can happen too late if it needs that data before the asset is in memory

All solutions have downsides, I cannot think of a perfect solution

Steps to Reproduce
  1. Make a blueprint class inherit from a native class that has asset registry tags referencing specific assets. Simplest way is to inherit from PrimaryDataAsset and mark a native TSoftObjectPtr variable with meta = (AssetBundles = "Client")
  2. In the parent blueprint, set the variable to point to a specific asset
  3. Make a child blueprint, do not override anything
  4. Rename the asset pointed to by the parent blueprint and fixup redirects if needed. This will resave the parent blueprint but not child blueprint
  5. The on-disk version of the child blueprint will end up with outdated asset registry tags

Have Comments or More Details?

There's no existing public thread on this issue, so head over toAnswerHub just mention UE-93256 in the post.

Login to Vote

ComponentGameplay - Blueprint
Affects Versions4.26
CreatedMay 18, 2020
UpdatedMay 19, 2020