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.
The corpus’s next small APIs
Checked by a new corpus_apis_3 scenario recorded in 6000.3 (the conformance project gains Unity's terrain and terrain physics modules): GeometryUtility (CalculateFrustumPlanes from cameras and matrices, in Unity's order…
A third round of corpus projects
Fourteen more MIT projects in corpus/projects.json (37 in all): an RTS tutorial, a third-person controller, an FPS maze, gravity racing, a roguelike, two tower defenses, a 3D platformer…
Lights, shadows and GrabPass in project shaders
The custom shaders' per-camera buffer carries the view's own shading data: the main light's shadow matrix, strength, softness, biases and fade distance, and the point and spot lights…
Dragging to reorder
Unity's animated dragger does take pointer events sent through a panel, so the ui_toolkit_list_drag scenario records it: canStartDrag on the press (its id, selected ids and the item's…
A TextMeshPro build per project version
TextMeshPro 3.2 (Unity 2023.2 and later) made the first UVs Vector4s (TMP_MeshInfo.uvs0, TMP_Vertex.uv); scripts written for earlier versions say Vector2[] and don't compile (or run) against the other.…
Lighting includes
Tassix's own Lighting.cginc, UnityLightingCommon.cginc and AutoLight.cginc (UnityLight, UnityGI, SurfaceOutput, Lambert and Blinn-Phong lighting, _SpecColor, the shadow and attenuation macros at 1), ShadeSH9 and the…
Custom shaders
crates/shaderlab (tassix_shaderlab): ShaderLab parsed (properties with their defaults and attributes, Category, SubShader and pass tags, render state fixed or from properties, inherited down, CGPROGRAM/HLSLPROGRAM with…
Contextual menus and column resizing
DropdownMenu (actions with status callbacks and user data, separators not after another or at the start, inserting, removing, PrepareForDisplay asking each action its status (None until then), Execute…
Tree controllers and MultiColumnTreeView
BaseTreeViewController, TreeViewController and DefaultTreeViewController over the tree's model: root and all ids (each root's children, then the root, as Unity lists them), parents, children, child indices, depth…
MultiColumnListView
Column (name, title, icon, widths with Unity's defaults, visible, sortable, stretchable, optional, resizable, comparison, makeCell, bindCell, unbindCell, destroyCell, makeHeader, bindHeader, templates) and Columns…
ListView editing
View controllers: CollectionViewController (source, ids, items by index and id, making and binding through the view, events), BaseListViewController (AddItems with the source's default values, Move, RemoveItem…
Foldout
Foldout: a Toggle (its text in a label inside the input) and a content container (unity-content) its children go into, hidden (inline display) while the value is false;…
TreeView
BaseTreeView and TreeView over the virtualized collection view: SetRootItems with TreeViewItemData, rows of the items whose parents are all expanded (itemsSource), each a row element with an indent…
Virtualized ListView
Collection views keep a pool of the viewport's worth of items plus two (fixed heights: the viewport over the item height; dynamic: over the smallest height measured), bound…
UI Toolkit composite fields
BaseCompositeField with Vector2Field, Vector3Field, Vector4Field, Vector2IntField, Vector3IntField, RectField and RectIntField: a FloatField or IntegerField per part (named unity-x-input and so on, labelled X, Y, Z, W…
UI Toolkit numeric fields
TextValueField and IntegerField, LongField, UnsignedIntegerField, UnsignedLongField, FloatField and DoubleField: Unity's structure (their own input elements, the label's dragger class), defaults (maxLength 1000; format…
The executable’s icon
The player's executable carries the Tassix icon: apps/player/tassix.ico (16 to 256 pixels; written by tassix_player --export-icon with no game) becomes a compiled resource file in the player's build…
CompositeCollider2D.offsetDistance
After its operations, a composite grows by offsetDistance, shrinks by twice it and grows by it again, each time with square corners (cut across the bisector at the…
UI Toolkit transforms and transitions
Transform styles: translate, rotate, scale and transform-origin from scripts (Translate, Rotate, Angle, Scale, TransformOrigin and their Style wrappers) and USS (lengths and percentages, deg, grad, rad and turn…
UI Toolkit input controls
Keyboard: this frame's key events (without taking them from IMGUI) go to the focused element as KeyDownEvents; unless stopped, Tab and Shift+Tab move the focus in tab order,…
The window icon
A windowed player's title bar and taskbar show an icon: a Unity project's own (ProjectSettings.asset's m_BuildTargetIcons: the largest icon for Standalone, else the default one, decoded by the…
Composite operations
CompositeCollider2D combines its members in composite order (equal orders keep hierarchy order), each by its Collider2D.compositeOperation on what the ones before made: Merge (union), Intersect, Difference and Flip…
2D effector forces
AreaEffector2D, PointEffector2D, SurfaceEffector2D and BuoyancyEffector2D act after each 2D step on the dynamic bodies touching their colliders (the step's own contacts, triggers included through a new native list…
Addressables (UI Toolkit stage 3); UnityChess plays
Unity.ResourceManager and Unity.Addressables as provided packages (com.unity.addressables): the catalog is the project's addressable groups (Assets/AddressableAssetsData/AssetGroups: addresses, labels, asset GUIDs…