Files

Code Reload - Minics

Demonstrates code reloading with the minics vm. This allows code reloading cs scripts on all platforms (even on il2cpp players) with the constraint the the script must only contain a subset of csharp.

What's in this sample

File Purpose
pong.cs PongScript, a self-playing Pong game that can be reloaded.
SampleScene.unity Scene with a GameObject carrying PongScript.

PongScript is a self-playing arena Pong: two paddles orbit a circle and rally a ball that switches colour on each hit.

Try it

  1. Import this sample and add PongScene to the built scene list.
  2. Enable developement build and autoconnect profiler in the build settings (minics uses the profiler connection to reload the scripts.)
  3. You may also want to enable run in background in the player settings if you are building for web.
  4. Build and run the player. The paddles start rallying the ball automatically, and the profiler begins collecting data.
  5. Make a change to pong.cs and push it with unity command reload_file_player_interpreter "Assets/Samples/Unity Pipeline/0.2.0-exp.2/Code Reload Examples/CodeReload_Minics/pong.cs" to see the reload live. (For automatic re-push on every save, use the Code Reload Interpreter Watch section of the Pipeline Settings inspector.)

How the code reload works

  • [CodeReload] on the class opts every eligible method (Start, Update, PlacePaddle, OnDisable, …) into in-place reload. Editing any of them takes effect on the next reload_file.
  • [OnCodeReload] on OnReloaded() runs once after each reload, on every live instance. Here it tears down and rebuilds the scene (OnDisable() + Start()) so edits to setup code apply immediately.
  • Verification markers updateTicks and marker are public fields you can read back over eval to confirm the freshly reloaded Update body is actually running.

Because in-place reloaded bodies may only touch public members of the target type, every field and helper on PongScript is public.

Minics

Minics is a subset of all C# features. This means that not all scripts will be able to be reloaded. Consult the package documentation for more information on which features are supported.