UnityTrafficSimulation/BUILDING.md

5.8 KiB
Raw Blame History

Linux build and launch

The simulation builds and runs on Debian 13 x86_64 with its original Unity 2018.1.6f1 editor. UNet, the legacy .NET runtime, the scene, and the traffic algorithms are retained. The source recovery is described in Recovery/README.md.

Run over SSH

On the server:

./run-linux.sh --vnc

On your local computer, open a second SSH connection with a tunnel:

ssh -L 5901:127.0.0.1:5901 your-server

Connect a VNC viewer to 127.0.0.1:5901. The VNC service listens only on localhost; access it through the SSH tunnel. The launcher starts a virtual 1280×800 display, both Python services, the simulation server, and its graphical client. It requires xvfb, xauth, and x11vnc. Close the client or press Ctrl-C in the launcher terminal to stop all its processes.

Other modes:

./run-linux.sh --server  # Python services and headless simulation server
./run-linux.sh --demo    # Server plus graphical client on the current desktop

Python 3 and Bash are required. The launcher uses local HTTP ports 8080/8081 and UNet port 7777; it refuses to start if an existing service occupies those ports. Traffic lights start in the original off state (uncontrolled intersections). The simulation does not automatically cycle them; the original HTTP API can control them. Logs are written under Builds/linux/.

A separate graphical Linux client can connect to an already running server:

Builds/linux/Simulation.x86_64 --connect SERVER_ADDRESS \
  -screen-width 1280 -screen-height 800 -screen-fullscreen 0 -force-glcore

Without --connect, the player opens the original connection menu. --server starts the server automatically; --traffic-url and --event-url can select other HTTP services. Keep server and client in separate processes, as the original simulation uses delayed client interpolation.

Build

./build-linux.sh

Output: Builds/linux/Simulation.x86_64 and Builds/linux/Simulation_Data/. Distribute both together. The build log is Builds/linux/build.log. The script uses Xvfb when no display is available and places temporary import files in Builds/linux/tmp by default to avoid filling a small /tmp tmpfs. Override the editor or temporary directory when needed:

UNITY_EDITOR=/path/to/2018.1.6f1/Editor/Unity TMPDIR=/large/tmp ./build-linux.sh

The build includes Assets/Scenes/Main.unity. The original build settings incorrectly named the nonexistent SampleScene.unity.

Installed toolchain

  • /opt/unity/2018.1.6f1/Editor/Unity, including Linux player support.
  • Blender 2.79b at /opt/blender-2.79b-linux-glibc219-x86_64/blender, also available as blender on PATH for importing the original .blend models.
  • GTK 2, libsoup 2.4, GLU, and GConf 2 compatibility libraries. GConf came from Debian's libgconf-2-4_3.2.6-8_amd64.deb and gconf2-common_3.2.6-8_all.deb, as Debian 13 no longer includes it.
  • Xvfb, xauth, and x11vnc for SSH access. Mesa llvmpipe successfully rendered the client without a physical GPU. This software rendering can be slower than a desktop GPU. The machine has no audio device, so Unity reports audio fallback messages and runs without sound.

Downloads: Unity 2018.1.6f1, Blender 2.79b, Debian GConf packages. Recovery-only tools (ILSpy, UnityPy, OpenEXR, and .NET SDK) are not needed to build or run the restored source.

Activation on this machine

Unity Personal was activated using the signed-in account. The modern entitlement alone was insufficient for this editor; Unity's official Licensing Client successfully issued the compatible legacy license with --activate-ulf. The editor now reads ~/.local/share/unity3d/Unity/Unity_lic.ulf. No additional sign-in is needed for builds on this machine while that license remains valid. Licenses and credentials are outside the repository and build.

./unity-ssh.sh opens a private D-Bus session with a dedicated keyring in ~/.local/share/unity-ssh/keyrings. It preserves the desktop keyring. Use the same local keyring password when reopening it; this is separate from your Unity account password. The helper checks that credentials can be stored before opening its shell. Run ./unity-ssh.sh --check to check the keyring alone.

For an account sign-in or modern Personal activation, run inside that shell:

unity auth login
unity license activate --personal --accept-eula
unity license status

The login command prints a browser URL usable on another computer. The activation command accepts the Personal terms. Those commands alone may still require the legacy ULF compatibility step for Unity 2018. See the official Unity CLI documentation.

Verification

Verified on this host:

  • Linux player and editor C# compilation using the genuine Unity 2018 libraries.
  • A complete Linux standalone build, followed by server and graphical client startup through run-linux.sh --vnc.
  • Client connection, car spawning, completed trips, and traffic counts sent to the original Python backend.
  • HTTP traffic-light changes, queuing at red lights, and resumed traffic.
  • A local event displayed by the client's notification UI.
  • Rendered town, pedestrians, cars, post-processing, and recovered lighting.
  • No missing-script warnings or managed runtime exceptions during the successful server/client test. Old vendor API deprecation and model import warnings remain.
  • Launcher shutdown cleans up the services, players, VNC server, and virtual display it started.

Local screenshots and test captures are under Builds/linux/; generated output and the preserved old Library cache are ignored by Git.