Phase 6 updates

Phase 6 · Slice 6 ·

The project corpus

  • corpus/projects.json pins 14 MIT-licensed Unity projects (Unity 5.3 to 6000.2); cargo xtask corpus fetches them into target/corpus, plays each headless for 300 frames and ranks what their logs say is missing (docs/compatibility/corpus.md). First run: 2 of 14 compiled. Three of the projects (DOTween and Zenject users) don't build in Unity either: their plugin DLLs aren't committed.
  • Engine fixes it found: Unity's full version defines (UNITY_X_Y_OR_NEWER for every minor release, the exact version, input defines from the project's active input handling) and asmdef versionDefines; package script GUIDs without a Library folder; pre-2019.2 scenes' UnityEngine.UI.dll references by class file ID; prefab instances in the pre-2018.3 format; [RequireComponent] naming a plain class (skipped, as in Unity, rather than failing the scene); attribute usages as wide as Unity's (HideInInspector, SerializeField, Tooltip... on properties; found with a new --usages mode of the coverage tool); quoted YAML scalars that close at column 0.
  • APIs it needed, each checked in a new corpus_apis scenario recorded in Unity: UnityEngine.LowLevel.PlayerLoop (Unity's default loop generated from the recording; inserted systems run at their place, from the next frame), RuntimeInitializeOnLoadMethod (Unity's phase order), UnityWebRequest and friends (file:// deterministic; a missing file is a 404; EscapeURL in Unity's format), AudioMixer from .mixer assets (built in the conformance project through the editor's own mixer API) with groups, exposed parameters, snapshots and AudioSource routing, Gizmos (no-ops, as in players), Cursor, RectInt and BoundsInt, RenderTexture (no camera rendering into it yet) and AsyncGPUReadback, the Scripting attributes, JetBrains.Annotations (generated from Unity's signatures with a new --signatures mode), full RuntimePlatform and SystemLanguage, PhysicMaterial. The internal frame loop class is now FrameLoop (UnityEngine.PlayerLoop is a namespace in Unity).
  • Second run: 5 of 14 compile (Asteroids, Bowl-Master, Artifact, Infinity-Rush and RedRunner's next errors are small), and Bowl-Master's 2017 scene loads 321 objects without exceptions. Fixes after that run (YAML, uGUI GUIDs, RuntimePlatform, RectInt) aren't reflected in the corpus page yet.
  • 56 scenarios pass on the JIT and NativeAOT. Native API 38.
  • Next from the corpus: IMGUI (GUI, OnGUI), TextMesh, WheelCollider, TrailRenderer, Unity Analytics/Ads stubs; replacing the three incomplete projects.