Editor

Sharing a Plugin Across Projects with UnrealGameSync

Host your shared assets in a standalone plugin project, then attach it to any number of Unreal projects via two config changes — one in UnrealGameSync.ini to sync the content, one in the .uproject to expose it.

pluginunrealgamesyncugsperforcecontent-sharingvirtual-production

When the same assets (nDisplay configs, MediaProfiles, stage presets) need to live in multiple projects, duplicating them is a maintenance nightmare. The solution is to host the plugin in its own lightweight Unreal project (not in the engine, not inside each consuming project) and wire every project to it with two config changes.

Why a Project-Level Plugin, Not an Engine Plugin

Engine plugins require touching the engine directory. Every content update can trigger a full engine recompilation and risks introducing instability unrelated to your assets. Keeping the plugin in its own project lets you version and sync it independently, with faster iteration and no unwanted engine rebuilds.

Step 1 — Tell UGS to Sync the Plugin Project

Add an AdditionalPathsToSync entry in the consuming project's UnrealGameSync.ini. UGS will then pull the plugin project from Perforce alongside your project whenever anyone syncs.

ini
; {YourProject}/Build/UnrealGameSync.ini
[Perforce]
+AdditionalPathsToSync=/Sandbox/VirtualProduction/StageEssentials/...
Always sync the plugin project from the same Perforce branch as your consuming project. Cross-branch asset references will fail at load time.

Step 2 — Point the .uproject at the Plugin Directory

Add an AdditionalPluginDirectories entry to the consuming project's .uproject. Unreal will discover and load all plugins found under that path, making their content available in the Content Browser.

json
// {YourProject}/{YourProject}.uproject
{
  "AdditionalPluginDirectories": [
    "../StageEssentials"
  ]
}

Accessing the Shared Content

  • Open your project and enable Show Plugin Content in the Content Browser settings
  • Navigate to Plugins > [YourPlugin] Content
  • Any plugin added to the shared project is automatically available to all consumers

Key Rules for Assets in the Shared Plugin

  • Assets must be self-contained — no references to assets in the consuming project
  • Assets cannot be migrated from newer engine branches (version is baked in at creation time)
  • Mark new assets for Add in source control from within the plugin project, not the consumer
Switchboard pitfall: if a Perforce changelist only touches assets inside the plugin project, Switchboard will not recognize it as a changelist for the consuming project and will skip syncing. Workaround: always include at least one file from the main project in any CL that updates shared plugin assets.