Bringing three old Unity demos to Unity 6

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.

DemoMade withSourceBrought toState
HDRP Sample Scene (modern building)Unity 6 template com.unity.template.hd 16.2.3Unity package registryUnity 6000.6.4f1streams; input not yet confirmed over the stream
Chop Chop (Open Project #1)Unity 2020.3.17f1, URPGitHubUnity 6000.6.4f1, URP 17.6streams and plays: keyboard verified 3 of 3 sessions
Spaceship DemoUnity 2022.2.6f1, HDRP 14 + VFX GraphGitHubUnity 6000.6.4f1, HDRP 17.6streams 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

HDRP Sample Scene - the first one, where the streaming setup was worked out

  1. Getting the project. The template comes from Unity's package registry as a .tgz. A plain download returned a redirect and an empty file. Fix: follow redirects (curl -L).
  2. Adding Render Streaming. 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.
  3. First build started, but never connected. The log said 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.
  4. Streamed. 1920 x 1080 at 24-28 frames per second, picture 31 seconds after the link was opened (first start includes downloading the 193 MB build).
  5. A trap found later: the package's settings file had Automatic Streaming on - see the last Chop Chop step. Because the HDRP package was copied into the other two projects, they inherited it.

Chop Chop - a 2020 project, URP, Addressables

  1. Opening it in Unity 6.6. The package list was written for 2020.3 and much of it no longer exists. Fix: a new 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.
  2. Cinemachine. Asking for Cinemachine 2.10 got 6.6.0 anyway - Unity 6.6 forces its own version, which is the Cinemachine 3 API. Fix: 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.
  3. Polybrush. Its editor code called 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.
  4. Editor-only tools of the project failed to compile: a state-machine script template (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.
  5. The build refused to start: "Unable to build with the current configuration". The project was set to IL2CPP and the build machine had only the Mono Windows player installed; Addressables checks this first. Fix: the build script switches to Mono. The project's active target was not Windows either - the script switches that too.
  6. Where to put the streaming object. Chop Chop starts in an 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.
  7. Streamed. 1920 x 1080, 27-31 frames per second, picture 21 seconds after opening; zip 682 MB.
  8. But input worked only sometimes. In one session the arrow keys moved the menu; in the next, nothing reacted - not keys, not clicks. The app's log explained it:
    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.
  9. One connection now - and still no input. The log was clean (one 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.
  10. Verified: three sessions in a row on the stream - the menu moves with the arrow keys, Enter opens New Game, the level loads, W walks and D turns. Note: mouse clicks on Chop Chop's main menu do not react (keyboard does); not yet looked into.

Spaceship Demo - a 2022 HDRP project with VFX Graph

  1. Packages for 6.6. HDRP 14.0.6 to 17.6.0 (VFX Graph follows), Cinemachine 2.9.5 to 6.6.0, Timeline 6.6.0, uGUI 2.6.0, AI Navigation 2.0.14, and the Input System added. A build front-end package was removed: its dependency, a preview build-report inspector, does not compile on 6.6 (BinaryFormatter errors) and nothing in the game uses it. Good news: VFX Graph assets and the HDRP 14 to 17 jump needed no manual fixes - the import upgraded them.
  2. Round 1 - Cinemachine 3. Nine scripts and four assembly definitions referred to Cinemachine. Fix: Unity.Cinemachine in both places, plus two renamed members: m_NoiseProfile to NoiseProfile, m_CustomBlends to CustomBlends.
  3. Rounds 2-3 - the bundled "gameplay ingredients" editor tools. Non-generic 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.
  4. Round 4 - the build-report dependency mentioned above was the last compile error; removing the front-end package removed it.
  5. Round 5 - the player built (1.31 GB), but every piece of text was a solid block. The project carries its own copy of TextMeshPro's shaders from TextMeshPro 3.0.6; Unity 6's TextMeshPro needs its own. Fix: replace 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.
  6. Round 6 - the window would not stay windowed. The game's graphics options applied "full screen at native size" on start, overriding the size the app was started with. Fix: the Screen.SetResolution call in the options' Apply() was disabled.
  7. A zoomed picture. Tested locally with a 1280 x 720 window, the stream showed about a 1.5x zoom of the menu. With a 1920 x 1080 window - the video size - the full frame came through. Not explained; 1920 x 1080 is used everywhere.
  8. Streamed. The main menu at 1920 x 1080, 30-31 frames per second, picture 31 seconds after opening; zip 620 MB. First HDRP build about 25 minutes (shader compilation), later builds about 5.
  9. Input does not reach the game - not fixed. Spaceship reads the old Input Manager (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.

What these three taught, in short

If your project…expectdo
uses Cinemachine 2namespace and a few member renamesUnity.Cinemachine; fix the names the compiler lists
has its own TextMeshPro Essentials foldertext as solid blocksreplace its shaders with uGUI's
has editor tools of its owncompile errors that stop the build, though the game does not use themupdate them, or compile them out on Unity 6
unloads its first scenethe stream stops when the menu loadsDontDestroyOnLoad on the streaming object
reads the old Input Managerpicture without controlmove to the Input System
copied Render Streaming settings from another projectinput that works only sometimescheck Automatic Streaming is off
sets resolution in codea cropped or zoomed streamlet the start-up arguments decide

What is not known yet

Setup reference: Make a Unity project stream, step by step. Overview: Unity streaming.

Last updated