UControlRigRuntimeAsset holds an RF_Public URigVMEditorAsset object that is not stripped for packaged build.

The reason that this object is not stripped is because it has been marked RF_Public, so it does not have to be referenced in order to be saved into the package.

A fix that I am attempting is: overriding bool IsEditorOnly() const in the URigVMEditorAsset class.

But I wonder if this is issue is on the radar and whether this is the proper fix.

[Attachment Removed]

Steps to Reproduce
Important to use 5.8.3 or 5.8.2

Build a packaged game that uses/loads a UControlRigRuntimeAsset. Observe during runtime loading of the UControlRigRuntimeAsset that it tries to load the URigVMEditorAsset resulting in errors/warnings.

The main error, when loading the ControlRigRuntimeAsset is this:

[2026.09.29-15.34.51:566][ 0] LogStreaming: Warning: Missing Dependency, missing script import /Script/ControlRigDeveloper.ControlRigEditorAsset(0x34ECC8253290519C) for package /Game/NewControlRigRuntimeAsset

But a bunch of related errors spam the log too.

The steps to reproduce with the attached project are:

  1. Make a packaged build
  2. Start the exe
  3. Look for errors like “LogStreaming: Warning: Missing Dependency” or “NewControlRigRuntimeAsset” in the logs
    [Attachment Removed]

Hi, thanks for taking the time to report this. In this case, we’ve found the issue and have made a fix in ue5-main. The CL is 54682414. If you want to take a look, it’s similar to your approach, but it also sets the public flag on the editor asset.

Alongside this, I’ve been looking at an alternative fix since we want to get this resolved in the 5.8.4 hotfix release, but the UE5-main CL isn’t hotfix-compatible. For the hotfix, I’m manually setting the public flag on the editor asset and all its sub-objects, which should be enough to hide them from the cooker without the IsEditorOnly overload being implemented. It’ll look something like this:

void URigVMRuntimeAsset::PostLoad()
{
	Super::PostLoad();
#if WITH_EDITORONLY_DATA
	if (EditorAsset)
	{
// FIX START
		if (!EditorAsset->HasAnyFlags(RF_Transactional))
		{
			EditorAsset->SetFlags(RF_Transactional);
		}
 
		// Assets saved before the editor asset was created non-public have it, and its subobjects, marked RF_Public.
		// Clear the flag so the cooker doesn't harvest them into cooked packages.
		TArray<UObject*> EditorAssetObjects;
		EditorAssetObjects.Add(EditorAsset);
		GetObjectsWithOuter(EditorAsset, EditorAssetObjects, EGetObjectsFlags::IncludeNestedObjects);
		for (UObject* EditorAssetObject : EditorAssetObjects)
		{
			EditorAssetObject->ClearFlags(RF_Public);
		}
// FIX END
		EditorAsset->PostLoad();
	}
#endif
}

We’ll likely bring something like this over to UE5-main as well, since any control rig created when the bug was present will still have the public flag set on all its sub-objects. I don’t think you need the extra change, but I wanted to mention it for completeness, just in case.

Let me know if you want to discuss this any further.

[Attachment Removed]