Three of Unity's own demo projects were taken from the version they were made in to Unity 6.6, given Unity Render Streaming, and streamed to a browser through Eagle 3D Streaming. This page tells each one as it happened: what was tried, what broke, and what fixed it. If you are upgrading an older Unity project of your own, the same errors are likely to meet you.
New to Unity streaming? Read Make a Unity project stream, step by step first. This page refers to its sections.
| Demo | Made with | Source | Brought to | State |
|---|---|---|---|---|
| HDRP Sample Scene (modern building) | Unity 6 template com.unity.template.hd 16.2.3 | Unity package registry | Unity 6000.6.4f1 | streams; input not yet confirmed over the stream |
| Chop Chop (Open Project #1) | Unity 2020.3.17f1, URP | GitHub | Unity 6000.6.4f1, URP 17.6 | streams and plays: keyboard verified 3 of 3 sessions |
| Spaceship Demo | Unity 2022.2.6f1, HDRP 14 + VFX Graph | GitHub | Unity 6000.6.4f1, HDRP 17.6 | streams the main menu; view only |
Every project used the same streaming setup: Render Streaming 3.1.0-exp.9 as an embedded package with
the three Unity 6.6 changes, one streaming object in the first scene (Screen source 1920 x 1080, Input
Receiver, Broadcast, Signaling Manager, kept alive across scenes), Run In Background, Input Background Behavior
Ignore Focus, windowed 1920 x 1080, Windows x86_64. The streaming object was added by a small
editor script run in batch mode, so a rebuild is one command:
Unity.exe -batchmode -quit -accept-apiupdate -buildTarget Win64 -projectPath <project> ^
-executeMethod E3dsDemoBuild.Build -logFile build.log
.tgz.
A plain download returned a redirect and an empty file. Fix: follow redirects (curl -L).3.1.0-exp.9 did not compile on Unity 6.6: error UAC0005 on
AppDomain.GetAssemblies() in SignalingSettings.cs, and
AndroidApiLevel22 missing in the setup wizard. Fix: embed the package in
Packages/, disable the analyzer warning around that one call, use AndroidApiLevel26.Connecting WS ws://127.0.0.1:80 although the command line gave another address. In the package,
SignalingManager.Awake() built the connection from the default settings and only afterwards would
have read the command line. Fix: let Awake() call _Run(null, null, handlers),
which reads the command line first. After this the app connected.manifest.json: Addressables 2.11.2, Cinemachine 6.6.0, Input System
1.20.0, Localization 1.5.13, ProBuilder 6.1.2, URP 17.6.0, Timeline 6.6.0, uGUI 2.6.0 (TextMeshPro now lives
inside uGUI). Removed: TextMeshPro, UI Builder, the VS Code package, the in-editor tutorials, Recorder, and an
explicit Scriptable Build Pipeline. The lock file was deleted so Unity rebuilt it.using Cinemachine; became
using Unity.Cinemachine; in the two scripts that use it. The old camera classes still exist in
Cinemachine 3 as legacy classes, so nothing else had to change.GetInstanceID / InstanceIDToObject,
which are errors in 6.6. Fix: embed Polybrush 1.2.1 without its Editor folder. The runtime
part stays, so painted meshes still load.EndNameEditAction), a "replace object" window (non-generic TreeView), and an unused URP
render feature (URP 17 API). None of them is part of the game. Fix: each wrapped in
#if !UNITY_6000_0_OR_NEWER.Initialization scene,
loads the menu through Addressables, and then unloads the first scene. A streaming object there would
disappear the moment the menu appears. Fix: a three-line script calling
DontDestroyOnLoad on the streaming object. Addressables content is built before the player.Other WebSocketSignaling exists with same URL:ws://127.0.0.1:… Signaling process may be in conflict.
Signaling: Connecting WS …
Signaling: Connecting WS …
Signaling: WS connection closed, code: 1008 (repeated every few seconds)
The app was opening two connections. Only one streaming object was in the scene - the second
came from the Render Streaming settings file, which had Automatic Streaming switched on. That creates a
built-in streaming object at start-up, beside the one in the scene. Only one connection is accepted; when the
built-in one won, the viewer saw the picture but input went nowhere. Fix:
automaticStreaming: 0 in Packages/com.unity.renderstreaming/Runtime/RenderStreamingSettings.asset,
then rebuild. The same change was made in the HDRP and Spaceship projects.Connecting WS, no
1008), yet keys still did nothing. The second cause: the Input System's Background Behavior was still at
its default, which drops keyboard and mouse while the app window has no focus - and on the streaming machine it
never has focus. That also explains why the very first session sometimes worked: the window happened to have
focus. Fix: Ignore Focus, written into the project's own Input System settings asset
(Assets/Settings/Input/InputSystem.inputsettings.asset, m_BackgroundBehavior: 2). Setting
it from a build script is not enough if the project keeps its settings in its own asset - check the asset.Cinemachine. Fix: Unity.Cinemachine in both places, plus two renamed members:
m_NoiseProfile to NoiseProfile, m_CustomBlends to
CustomBlends.TreeView
types became TreeView<int>; a [SerializeField] on a property became
[field: SerializeField]; GetInstanceID() became GetEntityId() and
InstanceIDToObject became EntityIdToObject; an asset rename prompt using
EndNameEditAction was compiled out on Unity 6.Assets/TextMesh Pro/Resources/Shaders with the shaders from the
TMP Essential Resources package that ships inside uGUI 2.6.0. They keep the same file IDs, so fonts and
materials keep pointing at them. Any older project with its own TMP Essentials folder will need the same.Screen.SetResolution call in the options' Apply() was disabled.StandaloneInputModule, Input.GetAxis). Streamed input arrives as Input System devices,
which that code never looks at. To make it playable, the menu needs InputSystemUIInputModule and the
first-person controls need Input Actions. Until then the stream is view-only.| If your project… | expect | do |
|---|---|---|
| uses Cinemachine 2 | namespace and a few member renames | Unity.Cinemachine; fix the names the compiler lists |
| has its own TextMeshPro Essentials folder | text as solid blocks | replace its shaders with uGUI's |
| has editor tools of its own | compile errors that stop the build, though the game does not use them | update them, or compile them out on Unity 6 |
| unloads its first scene | the stream stops when the menu loads | DontDestroyOnLoad on the streaming object |
| reads the old Input Manager | picture without control | move to the Input System |
| copied Render Streaming settings from another project | input that works only sometimes | check Automatic Streaming is off |
| sets resolution in code | a cropped or zoomed stream | let the start-up arguments decide |
Setup reference: Make a Unity project stream, step by step. Overview: Unity streaming.
Last updated