Is there a way to support assets that are local to a given workspace?

The idea would be to have an asset that only exists in the local workspace. It is never added to source control. A use case I have for this is an asset that is generated based on other assets. Say, for example, you had an asset that is automatically populated which contains the positions of every actor of a given type in a world. This asset needs to be generated locally by content creators when they make local changes. However, we don’t want them to have the file checked out, as that will lock the file and prevent other content creators from generating their own local version. Note that there may be an global version of this file that is regenerated by an automated process periodically. However, we still want designers to be able to override this locally without checking out or locking the file in source control.

Other proprietary engines I have worked in supported this, by defining a ‘local’ folder that contains assets that are never checked in, but instead act as overrides to files pulled from source control.

Steps to Reproduce

Hi! I can think of a couple ways that might help you.

First, I’d check to see if you can take advantage of the Asset Registry. It allows you to save arbitrary data on every asset that you can then query at runtime, both in the editor and in cooked builds. And in the editor, every OFPA actor in a WP level has their own entry. So you could, in theory, serialize their location to the Asset Registry and then query it. There are a few ways to save data to the asset registry, one way is to mark a UPROPERTY as AssetRegistrySearchable. You can also override the virtual function UObject::GetAssetRegistryTags for more complex data. If you can’t modify the source class, you can also hook into the global event UObject::FAssetRegistryTag::OnGetExtraObjectTagsWithContext.AddStatic(&MyCustomFunction).

(EDIT, sorry, pressed “Send” too early)

The second method would have a folder of the “global” read-only data assets which only the CI would check in, and then each user could have a local folder that Perforce is set to ignore. Your system then could first check for the existence of the local data assets to load, and if it doesn’t, then default to the global Data Assets files. Even though it’s not something available out of the box in Unreal, it would be very easy to check for the existence of a file; it would only take a couple of BP nodes / lines of code.

Hope this helps!