Releases: lucas-martinic/polyfork-unity-connector
Release list
v0.15.2 — the slider actually drives the model now
The model still only updated when the slider stopped. 0.15.1 fixed one half of this and it wasn't enough, because both halves were wrong.
The scheduler was a debounce: every knob change assigned _rebuildAt = now + delay, pushing the deadline forward with the input. A deadline that moves every time you move the slider never arrives until you stop — which is the symptom exactly.
It now keeps the earliest pending deadline, making the same 250 ms a cap on how often a metered rebuild fires rather than a wait for silence. The local path is unaffected; its delay was already zero.
v0.15.1 — the model follows the slider
The model only rebuilt when you let go of the slider. The rebuild was kicked from EditorApplication.update, and dragging an IMGUI control runs a drag loop that starves the editor tick — so nothing started until the drag ended. The bake was never the problem: it measures 20–140 ms end to end. It just wasn't being asked for until too late. OnGUI now kicks a pending rebuild too.
Camera damping was frame-rate dependent, and the editor isn't 60fps. A fixed fraction per editor tick made a glide that ran for as long as the ticks took, which read as the whole preview having got slower. Now exponential smoothing against real elapsed time, settling in about a sixth of a second whatever the tick rate.
v0.15.0 — rigged assets cast shadows, website camera feel
Fixed
- Rigged assets cast no shadow. The shark had none, the sea anemone did, and the difference was the rig: the planar shadow walked
MeshRenderer, and a rigged asset draws through aSkinnedMeshRenderer— aRenderer, but not aMeshRenderer. Every character and fish was skipped. - The same blind spot leaked a mesh per rebuild on those assets.
Changed
- The preview camera moves like the one on polyfork.dev.
viewer.jsruns OrbitControls withenableDamping; this moved instantly and stopped dead. Input now sets a target the camera eases towards, repainting only while it glides. A drag of the preview's full height is one revolution, as OrbitControls does it. Zoom clamps to 0.35x–2.5x the framing distance, matchingminDistance/maxDistanceinviewer.js.
v0.14.3 — shader fallback no longer picks a destroyed shader
Shader.Find(a) ?? Shader.Find(b) is the Unity fake-null trap: Unity overloads == so a destroyed object reports as null, but ?? doesn't use that overload. A destroyed-but-not-null result won the chain and gave a material whose shader has no ShadowCaster pass — an object that renders and casts nothing.
Each candidate is now tested with ==, and falling back off the package's own vertex-colour shader logs a warning, since it costs the colours and the shadow together.
v0.14.2 — empty gallery on first open, honest bake timing
Fixes the gallery opening empty until you press Refresh, and makes the bake timing measure what you actually wait for.
- Empty until Refresh.
OnEnablestarts the catalogue load, and a window Unity creates then immediately re-parents runsOnDisablein between, cancelling that request. The window now retries while the catalogue has never been answered, and treats a real failure as settled so a down network doesn't loop. - "21 ms" was a tenth of the wait. That figure covers running the module and decoding its payload. Building the meshes, swapping the preview and freeing the old ones were unmeasured. Now reported end to end, with the split in the tooltip.
v0.14.1 — compiles clean, dependency check fixed
Same package id as 0.14.0 (dev.polyfork.unity-connector), so no re-install dance — this is the build to submit.
Fixed
- A false "missing required packages" error on a perfectly good install. The check compared AppDomain assembly names against the names our asmdefs reference, and those are different questions:
com.unity.nuget.newtonsoft-jsonships its code as a precompiledNewtonsoft.Jsonassembly, so the asmdef referenceUnity.Nuget.Newtonsoft-Jsonresolves at compile time while no assembly by that name is ever loaded. It asks the package manager now.
Changed
- Compiles with no warnings, which the Asset Store expects of a submission.
- The two from vendored PuerTS (unused catch variable in
JsEnv, unused field inPathHelper) are silenced by acsc.rspbeside the vendored asmdef — that assembly only, so our own code keeps every warning it had. - The two
JsEnvobsolete warnings are suppressed at the two lines that raise them.ScriptEnvis not a rename:JsEnv's constructor checks the native papi version and callsPuertsNative.SetLogCallback, which is what puts a JSconsole.logor exception into Unity's Console. Constructing aScriptEnvdirectly would trade a warning for silent JS errors.
- The two from vendored PuerTS (unused catch variable in
v0.14.0 — package id is dev.polyfork.unity-connector
Important
The package id is now dev.polyfork.unity-connector, matching the product namespace claimed in the Publisher Portal.
Already installed? Remove the package and add the git URL again, from com.polyfork.connector (0.12.x and earlier) or dev.polyfork.connector (0.13.0). Unity keys a manifest entry by the package's own name, so neither resolves this one and Polyfork ▸ Update Package cannot cross a rename.
Assembly names, C# namespaces and every asset GUID are untouched, so scenes, prefabs and script references survive it. The repository keeps its name, so the git URL is unchanged.
On the namespace
dev.polyfork is derived from the verified polyfork.dev domain and is not a choice. The bare segment dev.polyfork.unity is refused with "This namespace is already in use by another product" — impossible under a publisher-scoped namespace, so it is a reserved word rather than a collision. unity-connector is accepted, so the reservation is on the exact segment, not on any segment containing the word.
Artifacts
| File | For |
|---|---|
Polyfork-UPM.zip |
The Asset Store submission. Unzip into <project>/Packages/, then Validator (type: UPM) and Uploader ▸ UPM Packages. |
Polyfork.unitypackage |
Outside the store. Install glTFast and Newtonsoft first. |
Polyfork-AssetStore-source.zip |
The Assets/ folder layout. |
| Git URL | https://github.com/lucas-martinic/polyfork-unity-connector.git |
v0.13.0 — package id is now dev.polyfork.connector
Important
The package id changed: com.polyfork.connector → dev.polyfork.connector.
If you already have it installed, remove the package and add the git URL again. Unity keys a manifest entry by the package's own name, so an old entry cannot resolve the renamed package and Polyfork ▸ Update Package cannot carry you across it.
Nothing else moves: assembly names, C# namespaces and every asset GUID are untouched, so scenes, prefabs and script references survive the rename.
Why
Asset Store UPM publishing derives the publisher namespace from the domain you verify, so polyfork.dev gives dev.polyfork, and the uploader rejects a package whose name does not match the reserved technical name. com.polyfork.* was a small lie anyway; it claims a domain we don't own.
Renamed everywhere rather than only in the store build, because a store build that differs from the normal one in something load-bearing has already cost this project two review cycles.
Artifacts
| File | For |
|---|---|
Polyfork-UPM.zip |
The Asset Store submission. Unzip into <project>/Packages/, then Validator (type: UPM) and Uploader ▸ UPM Packages. |
Polyfork.unitypackage |
Distribution outside the store. Install glTFast and Newtonsoft first. |
Polyfork-AssetStore-source.zip |
The Assets/ folder layout. |
| Git URL | https://github.com/lucas-martinic/polyfork-unity-connector.git |
v0.12.3 — Asset Store submission build
The Asset Store submission is a UPM package, not a .unitypackage. Same code; the difference is that package.json declares glTFast and Newtonsoft JSON and Package Manager installs them for the buyer. A .unitypackage carries no dependency information at all, so that route makes every buyer install two packages by hand before anything compiles.
For the submission
Polyfork-UPM.zip unzips into <project>/Packages/ so the manifest lands at Packages/com.polyfork.connector/package.json. Then Window ▸ Tools ▸ Asset Store ▸ Validator (Validation Type: UPM), and Uploader ▸ UPM Packages.
It is the store build: Polyfork ▸ Update Package is stripped, because re-adding this package from its git URL is programmatic package manipulation under 2.5.1.e.
Fixed
- The test assembly compiled in consumer projects.
Polyfork.Connector.TestsreferencesUnityEngine.TestRunner,UnityEditor.TestRunnerandnunit.framework.dll, all fromcom.unity.test-framework, with no define constraint — so a project without Test Framework got unresolved references out of a package it never asked to test. Now gated onUNITY_INCLUDE_TESTS, which Unity sets only for a package in the project'stestables. This never reached the.unitypackage, which excludesTests/, so it was specific to UPM and git installs, which is now the format being shipped. - The store build no longer carries
.githubor.gitignore.
Other artifacts
| File | For |
|---|---|
Polyfork.unitypackage |
Distribution outside the store. Install glTFast and Newtonsoft first. |
Polyfork-AssetStore-source.zip |
The Assets/ folder layout, if you ever need Unity to export a .unitypackage. |
| Git URL | https://github.com/lucas-martinic/polyfork-unity-connector.git, resolves dependencies on its own. |
v0.12.2 — dependency guidance
Installing from Package Manager needs nothing extra
The git URL — and an Asset Store UPM purchase — reads package.json and installs glTFast and Newtonsoft JSON for you.
https://github.com/lucas-martinic/polyfork-unity-connector.git
Installing from a .unitypackage needs both first
That format carries no dependency information at all; it is a bag of files, not a manifest. Add these two before importing, with Window ▸ Package Manager ▸ + ▸ Install package by name. Both are free and come from Unity's own registry.
com.unity.cloud.gltfast
com.unity.nuget.newtonsoft-json
Forget, and the Console now tells you exactly which one is missing and why, instead of showing a wall of unresolved-reference errors. That check lives in an assembly that references nothing, so it is the one part of the connector that still compiles when the dependencies are absent.
Still applies
- Remove
com.tencent.puerts.coreandcom.tencent.puerts.quickjswhen upgrading from 0.11 or earlier. - Install one way, not two: matching GUIDs mean a project with both gets two copies of every assembly.