Updates
Progress, a slice at a time.
Every slice that lands is written up in the plan with what it does, how it was checked, and what's next. These are those write-ups, newest first.
Saving to .unity
scene_save to a .unity path patches the file the scene came from, measured against the scene as exported when opened: untouched documents stay byte for byte (a save…
Reviewing agent edits
editor_core credits each transaction to a person or an agent; an agent's are pending until accepted or reverted. Reverts are selective: any transaction can go, as long as…
C# hot reload
Script assemblies (--scripts DLLs, a Unity project's Assembly-CSharp) load from bytes into collectible load contexts that share the engine assemblies; a reload loads the new build into a…
Unity scenes in the editor
Imported scenes become editor objects: built without running anything, written in the scene format (built-in settings that differ from a new component's, every script field), then destroyed. Scene…
Playing Unity projects
tassix_unity_yaml: Unity's YAML dialect (document headers with class and file IDs, stripped placeholders, block and flow collections, wrapped quoted and plain scalars, untyped scalars kept as strings). Parses…
MCP builds without client restarts
tassix_mcp_launcher is what .mcp.json starts: it runs the build cargo xtask mcp names in target/mcp/current.json and relays the session. When a newer build is installed it swaps between…
Audio, scenes and PlayerPrefs
Audio (tassix_audio: cpal output, symphonia decoding of WAV/Ogg/MP3/FLAC, own mixer with resampling and gain ramps; a manual 48 kHz clock when headless): AudioSource with Unity's defaults and clamps:…
Joints and CharacterController
CharacterController on PhysX's capsule controller, as Unity's: Move with collide-and-slide, stepOffset, slopeLimit, skinWidth and minMoveDistance. CollisionFlags (not a [Flags] enum, as in Unity), isGrounded and…
2D physics and the 2D platformer
Backend: Box2D 2.4.2 (MIT) vendored and compiled with a small C shim (crates/physics2d). Unity's Physics2D runs Box2D v2 with its tuning constants exposed as settings; ours are patched…
Input and Roll-a-Ball
Legacy Input: GetKey/Down/Up by KeyCode or Unity key name, mouse buttons, mousePosition, mouseScrollDelta, anyKey/anyKeyDown, and GetAxis/GetAxisRaw/GetButton* over Unity's default InputManager axes (Horizontal/Vertical…
3D physics
Backend: NVIDIA PhysX 5.1 through physx-sys (Unity uses PhysX 4.1, so contacts and the solver behave alike). The bindings are archived upstream; we build the bundled PhysX source…
FBX import, Resources and Instantiate
FBX (tassix_import, through ufbx): binary and ASCII FBX (and OBJ) converted as Unity's ModelImporter does with default settings: X mirrored and winding swapped, the axis system converted by…
Frame pipelining
Render thread: the player extracts each frame on the main thread into a self-contained FrameExtract (FrameBuilder), and a render thread uploads, encodes, submits and presents it (FrameRenderer). Two…
GlTF import and submeshes
Import (tassix_import): glTF 2.0 files (.gltf/.glb, external or embedded buffers and PNG/JPEG images): node hierarchy, meshes with one submesh per primitive, base color factor and texture (with KHR_texture_transform)…
3D basics
Renderer (tassix_render, wgpu 30): reverse-Z depth, left-handed view, clockwise front faces, draws sorted by mesh and instanced (one draw call per mesh), lit shader with one directional light…
Phase 1 outcome
milestone met. 10 conformance scenarios (the recorded spec, ~840 events) recorded in Unity 6000.2.10f1 pass (lifecycle, object lifetime, coroutines, Mathf, vectors, rotations/matrices, world-space transforms, value…