Quick answer: The collection’s editor values are just defaults. Drive them at runtime with SetScalarParameterValue / SetVectorParameterValue from a manager, every time the value should change.

A day/night system uses a Material Parameter Collection (MPC) for sun direction. In the editor you scrubbed it to test — in the build it’s stuck wherever you left the default.

The Editor Value Is Just a Default

The values you see and tweak on the MPC asset are the starting defaults. They’re not a live data source. In a build, nothing changes them unless your code does.

Drive It at Runtime

void ADayNightManager::Tick(float Dt)
{
    FLinearColor SunDir = ComputeSunDirection(TimeOfDay);
    UKismetMaterialLibrary::SetVectorParameterValue(
        this, SkyMPC, "SunDirection", SunDir);
}

A manager owns the MPC and pushes values into it. Every material referencing the MPC updates from that single call.

Initialize on BeginPlay

Don’t rely on the default being “close enough”. Set the MPC explicitly in BeginPlay so the first frame is correct, then keep updating.

Per-World Instances

MPC values are per-world. PIE, the editor world, and the game world each have their own instance — which is exactly why editor scrubbing doesn’t carry into a build. Always set them from game code.

Verifying

Build and run. The sky and lighting respond to the day/night cycle. Restarting the level reinitializes correctly. No frozen-at-default look.

“An MPC asset holds defaults, not live state. A runtime manager must push values into it.”

Keep one authoritative manager per MPC — scattered SetParameter calls across the codebase make ‘why is the sky wrong’ impossible to debug.