Quick answer: Ensure the GameObject with the SignalReceiver isn’t disabled or stripped, the SignalAsset is referenced, and the PlayableDirector binds the signal track to that receiver.

A cutscene uses Timeline Signal Emitters to trigger gameplay events. In the editor they fire; in the build, nothing happens.

SignalReceiver Must Be Live

The SignalReceiver component listens for signals. If its GameObject is inactive at the time the signal fires, the callback is skipped. Confirm the receiver’s object is active during playback.

Binding the Signal Track

In the Timeline, the Signal Track must be bound to the object holding the SignalReceiver. Check the binding in the PlayableDirector’s Bindings list — a missing binding shows as “None”.

director.SetGenericBinding(signalTrack, signalReceiverGameObject);

If you instantiate the cutscene at runtime, bind the track in code.

SignalAsset Referenced

The SignalAsset (.signal file) must be included in the build. If it’s only referenced by the Timeline and the Timeline is in a scene, it ships — but a dynamically-loaded Timeline needs the asset reachable (Addressables or Resources).

Reaction Events

SignalReceiver maps each SignalAsset to a UnityEvent. Verify the event has a listener wired and the target method is public. Editor-only methods won’t survive.

Verifying

Build and run the cutscene. Each Signal Emitter fires its gameplay event at the right frame. No missing reactions.

“Signals need three live things: an active receiver, a bound track, and a shipped asset.”

For runtime-instantiated cutscenes, write a small helper that binds all signal tracks after Instantiate — the editor does this for you, builds don’t.