chore: upgrade to Unity 6000.5.9f1 - #9871
Conversation
The 2.3.2 package regenerated 336 of 340 .meta GUIDs, breaking every project reference into it (AltId.cs, AltRunner, sprites, shader, panel prefab). Rebuilt the old->new map by matching relative paths between the two PackageCache folders and remapped the 24 GUIDs the project actually referenced. Sub-asset fileIDs are unchanged: 11500000 (MonoScript), 21300000 (single-sprite textures — the new metas carry an empty nameFileIdTable), 4800000 (shader), and 1422609480502334 for AltTester_Panel.prefab, which is byte-identical between versions. The four files 2.3.2 drops (Examples and Resources folder metas) were not referenced, so nothing is orphaned. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ports the API-migration subset of PR #9478 (chore/unity-6000.5.2f1-upgrade) onto this branch. Only the obsolete-API changes are taken; that PR's TMP fallback-loading refactor, the DCL.Plugins.asmdef GUID-to-name swap and the asset/ProjectSettings churn are deliberately left out. - Physics.BakeMesh(x.GetInstanceID(), ...) -> x.GetEntityId() (GLTFContainer Utils + ConfigureGltfContainerColliders, RoadAssetGenerator) - NativeArray<int> -> NativeArray<EntityId> for baked mesh ids (BakeColliderMeshes job, CollideTerrainSystem) - GetInstanceID() equality checks -> direct object comparison (AuthenticationScreenAudio, HomeMarkerController x3) SceneContentStatsSystem is not part of #9478: it used the obsolete EntityId -> int cast. The value is only XORed into a shader/keyword hash key, so it now uses GetEntityId().GetHashCode(), matching the pattern used by AVPro 3.4.2 and unity-explorer-packages#60. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GPU Instancer Pro 0.12.18 no longer ships the legacy Built-in and Shader
Graph shaders inside the package; they are now optional imports under
Editor/Extras/*.unitypackage. Three of them are still referenced by this
project, so they are imported here with their original GUIDs intact and
every existing reference resolves unchanged:
- Foliage_SG.shadergraph (78f1b5ae9238ef140869bdba4aef19db) -- used by
DefaultDetailMaterial.mat and DefaultDetailMaterialDesc.asset
- Standard_GPUIPro.shader (7835c6b3cbd1dd24bb8cf791f83b3ec9) -- an
addressable entry ("GPUInstancerPro/Standard") in the Landscape group
and a replacement shader in GPUIShaderBindings
The two billboard Shader Graph shaders come along because GPUI imports
the Shader Graph extras package as a unit for non-Built-in pipelines, so
this matches what the editor would generate on first launch anyway.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
com.unity.modules.xr is a real fix and should stay: AVPro's UpdateMultiPassStereo.cs uses UnityEngine.XR types (XRSettings, XRNode, InputDevice, InputDevices) which Unity 6000.5 forwards to UnityEngine.XRModule. AVProVideo.Runtime declares no assembly references and this project has never included the XR module -- the module list is identical on dev -- so those 33 CS1069 errors only appear on 6000.5. Adding the module pulls in jsonserialize and subsystems transitively. com.alttester.sdk is redirected from the OpenUPM registry to mikhail-dcl/AltTester-Unity-SDK#1983-unity-6000-5-getinstanceid-obsolete, which clears its 57 EntityId errors. WARNING -- the following are temporary local-validation wiring and MUST be rewired to git URLs before this branch merges anywhere: com.dcl.gpui-assets, com.gurbu.gpui-pro, com.gurbu.gpui-pro.terrain, com.renderheads.avpro.video-ultra, com.decentraland.filebrowserpro, decentraland.renderfeatures -> file:../../../unity-explorer-packages/... They point at the local unity-explorer-packages checkout (branch chore/unity-6-5), which is committed but not yet pushed. test.yml also needs its find-and-replace updated to match whatever these end up pointing at, or CI will fail resolving packages. This commit also carries pre-existing manifest work from this branch that was already uncommitted (softmask 3.6.4, collections 6.5, cinemachine 2.10.7, serializereference-extensions 1.7.0, UniTask pinned, and others). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Generated output, not hand-written: Unity regenerated this file during the batch reimport after the Input System package bump on this branch (header goes 1.19.0 -> 1.20.0, and every binding gains "priority": 0). Committed so it stops reappearing as a dirty file on every import. Drop this commit if you would rather regenerate it yourself. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaces the temporary local file: wiring from 33a241c now that decentraland/unity-explorer-packages#62 is open and the branch is pushed. All six entries are pinned to #chore/unity-6-5: com.dcl.gpui-assets, com.gurbu.gpui-pro, com.gurbu.gpui-pro.terrain, com.renderheads.avpro.video-ultra, com.decentraland.filebrowserpro, decentraland.renderfeatures The git@github.com: form is deliberate: test.yml rewrites those to HTTPS with REPOS_READ_ONLY_TOKEN, so CI resolves them directly. No workflow change is needed -- docs/working-with-explorer-packages.md still describes an older find-and-replace step that no longer exists. Verified with Unity 6000.5.9f1: packages resolve into Library/PackageCache from the remote branch (not the local checkout) and the project compiles with 0 errors. Still branch-pinned, so these must be repointed once #62 merges to main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # Explorer/Packages/manifest.json
Ports item 4 of decentraland/unity-shared-dependencies#95 into this repo, now that unity-shared-dependencies has been migrated here and that PR targets a repo whose contents moved. Unity 6000.5's URP added #include "LitInput.hlsl" to LitForwardPass.hlsl. DCL_Toon's ForwardLit pass is the one DCL translation unit that includes URP's real LitForwardPass, so that new self-include drags ShaderLibrary/SurfaceInput.hlsl in and collides with DCL_ToonInput.hlsl on _BaseMap, Alpha and UnityPerMaterial members: Shader error in 'DCL/DCL_Toon': redefinition of '_BaseMap' at .../universal/ShaderLibrary/SurfaceInput.hlsl(10) (on d3d11) Visible symptom is magenta avatars. Pre-claims URP's UNIVERSAL_LIT_INPUT_INCLUDED guard so the self-include no-ops -- the same guard-reuse pattern already used in Scene/URP/LitInput.hlsl -- and inlines the parameterless IsSurfaceTypeTransparent() that 6000.5's LitForwardPass calls, under the real file's own guard because Shaders/Utils/SurfaceType.hlsl does not exist in 6000.4's URP. _Surface is #define _Surface 0.0f in DCL_ToonVariables.hlsl, so it returns false and matches 6000.4 exactly. Only item 4 of #95 is ported here. Its other three fixes (the removed UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACRO in Scene/URP LitInput and UnlitInput, DCL_ToonHighlight/DCL_ToonOutline, and unity_ObjectToWorld -> GetObjectToWorldMatrix() in Avatar_CelShading_DepthNormalsPass) address DOTS-instancing variants that editor compiles skip, and are not ported. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fixes a TypeLoadException that took down application start on Unity 6000.5: Could not load type of field 'Nethereum.Web3.Accounts.ExternalAccountSignerTransactionManager+ <SignTransactionExternallyAsync>d__8:<transaction1559>5__2' due to: Could not resolve type with token 01000043 (expected class 'Nethereum.Signer.Transaction1559' in assembly 'Nethereum.Signer, Version=4.12.0.0') Root cause: the Nethereum plugin folder shipped a split version set. The 2023 auth-chain drop (780e04d) added Nethereum 4.12; the ThirdWeb email-OTP PR (18224ff, #6738) upgraded only the assemblies ThirdWeb needed to 5.0 and left the rest at 4.12. Nethereum.Accounts 4.12 references Nethereum.Signer 4.12, but the shipped Signer is 5.0 where Transaction1559 no longer lives in that assembly, so the typeref dangles. It surfaced only now because 6000.5's Mono resolves these eagerly where 6000.4 tolerated the dangling reference lazily. MetricsRegistry's static ctor reflects over every type in every loaded assembly and calls IsAssignableFrom, which forces full type loading -- so an unused broken type took out the whole request-metrics subsystem, and with it WebRequestsContainer and BootstrapContainer. Fix removes the 4.12 assemblies rather than papering over the scan. Reachability was computed from the actual roots -- the Nethereum namespaces DCL source imports, plus Thirdweb.dll's referenced assemblies -- and these ten are unreachable from both: Accounts, BlockchainProcessing, GnosisSafe, HdWallet, JsonRpc.RpcClient, KeyStore, Signer.EIP712, Unity, Unity.Metamask, Web3 None is referenced by DCL source, by any asmdef, by GUID anywhere in the project, or by a link.xml. What remains is a coherent 5.0 set plus Nethereum.Siwe.Core 4.12, which DCL uses and which only needs Nethereum.Util. NBitcoin is kept: it is unreachable from the Nethereum graph but two DCL files import it directly. Verified with Unity 6000.5.9f1: 0 compile errors, 0 shader errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Unity 6.5 makes the Advanced Text Generator the default UI Toolkit text system, and it cannot render static font assets. Both Inter font assets referenced from the CommonStyles.uss :root rule were Static, so every UITK text element logged "Advanced text system cannot render using static font asset Inter 18pt" on every frame. Switch both to Dynamic atlas population, wire the retained source font GUID back into m_SourceFontFile, and make the atlas textures readable so glyphs can be rasterized at runtime. These are the same three mutations Unity's own font asset inspector performs when switching the mode, and the configuration AzeretMono-Medium SDF in the same folder already used. This also lifts a latent limitation: each atlas held only 99 baked ASCII characters and both fallback tables were empty, so non-Latin text could not render in UI Toolkit at all. Guarded by UiToolkitFontAssetsMustNotBeStatic. It compares against Dynamic/DynamicOS rather than naming Static, which Unity 6.5 deprecated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
7c5b65b switched the two Inter font assets to Dynamic atlas population but left m_IsMultiAtlasTexturesEnabled at 0. A Static atlas never grew, so the flag never mattered; once Dynamic, the first character outside the baked set overflows the single atlas page and Unity logs "Atlas is full, consider enabling multi-atlas textures in the Font Asset". Both Inter atlases bake at 145pt and 140pt into 1024x1024 and already hold 99 glyphs, so they overflow on the first addition. AzeretMono-Medium SDF carried the same latent defect: already Dynamic with multi-atlas off, healthy-looking only because nothing had pushed it past its baked glyphs. It was the reference used for the earlier migration, which is how the incomplete recipe propagated. Extend UiToolkitFontAssetsMustNotBeStatic to assert atlas growth so the Dynamic contract is covered end to end: population mode, source font, readable atlas, and multi-atlas. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DebugUtilitiesStyle pointed -unity-font-definition at a font sub-asset in Assets/DCL/UIToolkit/UnityDefaultRuntimeTheme.tss, a file that does not exist in the project, so resolving the stylesheet logged "Missing font asset reference ... The font asset may have been deleted or moved" on every pass. The dead reference already resolved to nothing, leaving the element to inherit Inter Regular from the :root rule in CommonStyles.uss, so naming that font through --dcl-font-inter-regular keeps the rendered result identical while silencing the error. This is also how DebugMenu.uss selects its fonts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The provider awaited all five fallback fonts sequentially inside a single try block and assigned TMP_Settings.fallbackFontAssets only after the loop finished, so one unresolvable reference left TMP with no fallbacks at all rather than four out of five. Fonts that provided a null value were dropped with no log line, and OperationCanceledException was reported through the same handler as real errors, which made a genuine failure indistinguishable from a normal shutdown. Provide each font in its own try block, append it to the global fallback list as it arrives so it starts covering characters immediately, name the asset GUID when a font provides nothing or throws, and ignore cancellation separately as the project's async convention requires. This does not on its own explain CJK glyphs still missing from chat text. The handles cached on the shared serialized AssetReferences can outlive a release, and Dispose leaves released fonts registered in TMP's global list, so a chat re-initialisation can hand back a released handle. Those paths now surface in the log instead of failing silently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # Explorer/Packages/manifest.json # Explorer/Packages/packages-lock.json
🚦 CI StatusWindows and Mac built successfully in Unity Cloud.
Warnings count reduced: 12178 => 12162 Warnings/errors in files changed by this PR (205)…truncated; see the linked run for the full report. All Unity tests passed ✅
Tests time sums the test cases; Job time is the job's wall clock including checkout, licensing and asset import. Full report: run summary · results + editor logs: editmode · playmode 🏁 Bare-metal benchmark finished — run #33628499742. Full reportPR #9871, run #33628499742 Overall: ✅ no significant changes Builds: Windows change, Windows baseline, macOS change, macOS baseline How to read this table
Intel Core i5
Apple M1
|
This comment has been minimized.
This comment has been minimized.
The branch upgraded packages and code but never committed the engine bump
itself, so ProjectVersion.txt still read 6000.4.0f1 and anyone checking it
out would open the project in the old editor.
Engine:
- ProjectVersion.txt 6000.4.0f1 -> 6000.5.9f1
- VirtualProjectsConfig.json version string follows
Format migrations written by 6000.5:
- VFXManager m_RuntimeVersion 39 -> 40 (visualeffectgraph 17.5)
- EditorBuildSettings drops m_UseUCBPForAssetBundles, removed in 6.5
- ProjectAuditorSettings ProjectAuditor moved into the editor module;
m_Script -> m_EditorClassIdentifier, m_Rules -> rules
- PackageManagerSettings m_Registries -> m_MainRegistry/m_ScopedRegistries,
m_UserModificationsInstanceId -> ...EntityId
- URP global settings + ForwardRenderer High: URP 17.4 -> 17.5,
m_UseNativeRenderPass -> m_TileOnlyMode
New settings files 6000.5 generates:
- PhysicsCoreProjectSettings2D.asset
- TimelineSettings.asset
- Packages/com.unity.services.core/Settings.json
Package upgrades in this branch:
- UISoftMaskProjectSettings gains m_PreLoadSettingsInBuild and the
registered-shader list (SoftMask 3.5.0 -> 3.6.4)
- GPUIEditorSettings records 0.9.19 -> 0.12.18 and the new strip flags
Main.unity and the TextMesh Pro font assets are still dirty and are
deliberately not included here: the scene is stored as binary so its change
cannot be reviewed in a diff, and the two TMP atlases have been emptied
(m_Height 1024 -> 1), which needs confirming as intended rather than
batch-import churn.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
Avatar Preview Renderer — Vercel Preview is ready!
|
… hash) IL2CPP fails converting Sentry 4.0.0's aliased BCL shims. Sentry.System.Memory.dll defines its own System.Span<T> with the netstandard2.0 Pinnable/_byteOffset layout, and Sentry.dll, Sentry.System.Text.Json.dll and Sentry.System.Text.Encodings.Web.dll all bind to it. 6000.5's IntrinsicRemap.SpanGetItemArguments remaps Span<T>::get_Item by type name and then cannot find the field it expects, throwing "Sequence contains no matching element" 36 times and failing the player export. Sentry 4.6.0 stopped aliasing those assemblies and 4.7.0 dropped them entirely, so Span<T> resolves to mscorlib again. packages-lock.json also pinned com.alttester.sdk to the commit before the NLog ConfigurationItemFactory fix. UPM honours the locked hash over the branch tip, so cloud builds ran the pre-fix SDK and hit "IOException: The parameter is incorrect" from AltRunner's static constructor during BuildPlayer. The hash has to be refreshed whenever the fork branch moves. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Repoints the six unity-explorer-packages pins from ea81c43 to 4426b06, which gates the unused AVPro Extensions/VideoPlayer module behind DCL_AVPRO_VIDEOPLAYER_EXTENSION. Its editor script assigns to VideoPlayer_AVPro.audioOutputModeAVPro, whose setter is declared only for Android/OpenHarmony/WebGL/iOS/macOS/tvOS/visionOS and Windows. A Linux editor matches none of those, so the property is get-only there and the assignment fails with CS0200, aborting batchmode before any test runs. That took out Test (editmode), Test (playmode) and Lint, all of which run in the Linux GameCI container; the Windows and macOS build agents were never affected. Only AVPro's content changed between the two revisions, so the other five pins move with it purely to keep every pin on one revision of the repo. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Conflict: Explorer/Packages/packages-lock.json, decentraland.renderfeatures hash. dev (#9869) pinned renderfeatures to packages 1691b33 — PR #63's skybox cubemap regeneration gate, one commit on top of packages main, pinned deliberately for testing. This branch needs the packages chore/unity-6-5 branch instead, which carries the RenderFeatures EntityId migration required to compile on 6000.5, so the pin stays at 4426b06. Consequence: the SkyboxToCubemapRendererFeature regeneration gate is NOT on this branch — regenerationInterval does not exist at 4426b06, and 1691b33 is not an ancestor of it. The skybox pass runs every frame here, as it did before #9869. It returns once packages #63 lands on packages main and chore/unity-6-5 merges main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
Unity 6000.5 ships a serialization-rules analyzer that did not exist in 6000.4, so this branch added 85 warnings over dev's InspectCode baseline (12608 vs 12546, and the ratchet requires strictly less). Diffing the two SARIF reports by content fingerprint shows the delta is 83 UAC1001/UAC1002/UAC1009 plus one CS0618 and one redundant using; 23 warnings also disappeared, mostly CS0618 from the obsolete-API migration. Root causes, in order of leverage: - ComponentReference<TComponent> was missing [Serializable], which UAC1002 reported at all 49 of its derived XxxRef declarations. Its siblings in the same folder (AssetReferenceComputeShader, AssetReferenceMaterial, AssetReferenceTextAsset) all already carry it, and its own doc comment says a concrete child is required for serialization to work. The class declares no fields, so this changes nothing about what Unity serializes - no asset format change. - AvatarAttachmentDTO<T> and TrimmedAvatarAttachmentDTO<T> likewise. These do declare a `metadata` field, so Unity would now include it - verified that no Unity-serialized root reaches those four DTOs, so the runtime effect is nil today. - Sentry 4.9.0 deprecated DisableAnrIntegration(); its message names the replacement. EnableAppHangTracking = false preserves the intent (DclAnrIntegration does this job). - The remaining UAC1001/UAC1009 sit on Newtonsoft-only wire DTOs where Unity serialization never runs, so Nullable<T>/object/Dictionary<,> fields are correct as written. Each is suppressed with a #pragma scoped to the field, naming the serializer actually in use. RenderParamsArray gets [NonSerialized] instead, matching the [field: NonSerialized] idiom already used in SceneMetadataScene.cs, since it holds a live Camera and MaterialPropertyBlock and must never round-trip through the asset. SceneMetadata's 8 warnings are deliberately NOT suppressed. That type is deserialized twice onto the same object - Newtonsoft first, then JsonUtility.FromJsonOverwrite from scene.json on every scene load - and SpawnPoint.Position.Coordinate has no [Serializable] and stores only in auto-properties, so the Unity pass cannot populate what Newtonsoft parsed. Suppressing would bury that; it is tracked separately and is pre-existing rather than upgrade fallout. The ratchet clears without those 8: 77 warnings cleared puts the count at 12531. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The previous commit added `using System;` so the class could carry [Serializable], which made the unqualified `Object` in the ValidateAsset override ambiguous with System.Object — CS0104, aborting batchmode before any test ran. The sibling AssetReference* files take the same using without trouble because none of them names Object unqualified. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Brings the renderer onto the same editor as Explorer. Validated with a 6000.5.9f1 batch compile: exit 0, "Exiting batchmode successfully now!", 0 error CS, 0 shader errors. - com.unity.modules.vr no longer exists in 6000.5 (the editor ships only com.unity.modules.xr, which the renderer already had). Leaving it in makes package resolution fail outright, so the editor terminates before compiling anything. - Cinemachine 3.1.4 does not compile on 6000.5 - CinemachineSettings.cs uses EditorApplication.hierarchyWindowItemOnGUI and EditorUtility.InstanceIDToObject(int), neither of which carries an (UnityUpgradable) hint, so the API Updater cannot rewrite them. 3.1.7 has the EntityId migration. - decentraland.renderfeatures had no branch ref, so it resolved packages main, which lacks the EntityId migration 6.5 needs. Pinned to #chore/unity-6-5 at 4426b06, the same revision Explorer uses. - URP and VFX Graph 17.4.0 -> 17.5.0, Input System 1.19.0 -> 1.20.0, test-framework 1.6.0 -> 1.7.0. Unity resolved the rest transitively and rewrote packages-lock, pulling in com.unity.modules.physicscore2d and mathematics 1.4.0. - URP_GlobalSettings and EditorBuildSettings carry 6.5 format migrations. The two previously untracked ProjectSettings files are added to match Explorer, which tracks both; their contents are stock defaults. The renderer's own 63 .cs files needed no changes, and it has no #if UNITY_WEBGL blocks, so the standalone-target compile covers its whole C# surface. The WebGL link step and GLES shader variants remain unverified locally - no WebGL module is installed for 6000.5.9f1 here - so CI is the first real test of those. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Ludmilafantaniella
left a comment
There was a problem hiding this comment.
✅ QA Approved
Platforms tested: Windows & macOS
Verified:
- Account creation via metaforge (fresh account) — wallet/identity/profile deploy all completed correctly.
- Email OTP authentication flow — completed successfully.
- Livestream via OBS in a scene — stream displayed correctly, including after reloading the scene (no freeze/black texture).
- Backpack — working correctly.
- Teleport in Genesis City and in Worlds — working correctly.
- Multiplayer — working correctly, no issues observed.
✅Smoke test performed: - ✔️ Log In/Log Out
- ✔️ Backpack and wearables in world
- ✔️ Emotes in world and in backpack
- ✔️ Teleport with map/coordinates/Jump In
- ✔️ Chat and multiplayer
- ✔️ Profile card
- ✔️ Camera
- ✔️ Skybox
- ✔️ Settings
Result: No blockers found across the above. Approving from QA side.
newOTPaccount.mp4
newaccount.mp4
homeEvi.mp4
Unity 6000.5 makes the Advanced Text Generator the default UI Toolkit text system,
and ATG cannot render static font assets. Every label re-logged "Advanced text system
cannot render using static font asset Inter 18pt" from
UITKTextHandle.ConvertUssToNativeTextGenerationSettings on each layout pass, so the
web console filled with thousands of identical errors. AtlasPopulationMode.Static is
[Obsolete] in the engine, so migrating is the only forward path - the Enable Advanced
Text opt-out exists but Unity says it will be removed.
Converting an asset by hand touches four serialized fields, not one:
- m_AtlasPopulationMode 0 -> 1, the Static -> Dynamic switch itself.
- m_SourceFontFile, which Static left at {fileID: 0}; Dynamic needs the source face to
rasterize from. The guid was already retained in m_SourceFontFileGUID.
- the atlas Texture2D's m_IsReadable 0 -> 1. Easy to miss, and without it dynamic glyph
population has nowhere to write.
- m_IsMultiAtlasTexturesEnabled 0 -> 1. A static atlas never grew, so this never
mattered; once dynamic, the first glyph outside the baked set overflows the single
page and logs "Atlas is full".
All four assets are converted, not just the two the console named - the other two are
equally static and would spam identically once a label used them. Preconditions hold:
every m_SourceFontFileGUID resolves to a font file in the same folder, and all four
importers have forceTextureCase -2 and includeFontData 1, which is what Unity's own
converter requires for Font.dynamic.
Verified with a 6000.5.9f1 batch import: exit 0, 0 compile errors, and zero static-font
or atlas-full messages. The assets stay Dynamic across re-import, and the edits are
byte-exact so the diff is 4 lines per file rather than a full reserialization.
ConfiguratorPanelSettings still has m_ICUDataAsset {fileID: 0}, matching all five
Explorer PanelSettings. ATG wants ICU data for line-breaking and bidi, but nothing warns
about it in this run, so it is left alone.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
M4, Genesis City, 5120x2880, vsync and fps-cap off, dev builds
Two independent effects, cleanly separated:
Against what main actually runs:
So the cherry-pick removes 3.6 ms of the 6.3 ms. Where that leaves things
|
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Claude finished @mikhail-dcl's task in 3m 40s —— View job Security-focused dependency review —
|
| entry | locked commit |
|---|---|
com.dcl.gpui-assets, com.decentraland.filebrowserpro, com.gurbu.gpui-pro, com.gurbu.gpui-pro.terrain, com.renderheads.avpro.video-ultra, decentraland.renderfeatures |
04b022e9 |
decentraland.grassshader (packages-lock.json:511) |
c35c10aa |
superscrollview (:557) |
8e1478ec |
All eight declare no git ref, so all eight resolve main; the lock merely records when each was last resolved. grassshader and superscrollview are therefore pinned behind their own default branch and will jump silently — no manifest.json diff — the next time anyone deletes the lockfile, resolves a merge conflict in it, or lets the editor re-resolve. Cheap to close while already in these files.
17 ✅ mechanically resolved, substantively still open
Enforce QA and DEV Approvals is success on this head (dalkia approved 11:22Z). The check no longer blocks. The underlying gap does: Ludmilafantaniella's QA pass (2026-08-28) ran against a build of 9422309e5; bb8584835 then merged 14 dev commits / 171 files on top (StaticContainer.cs, DynamicWorldContainer.cs, CharacterEmoteSystem.cs, EmotePlayer.cs, AvatarBase.cs, LoadGLTFSystem.cs, the GltFast*DownloadProvider set), and the last two pushes changed six resolved package commits — which no compile-time check covers. The three findings I closed on QA evidence (item 7 Nethereum, magenta avatars, AVPro 3.4.2) remain the best evidence available but are evidence about an ancestor. One scoped smoke re-run on this head — avatar rendering, emotes, glTF loading, terrain/GPUI, video — is the ask, and item 20 makes GPUI and AVPro the priority within it.
Also still open from last run: Unity Performance Test is skipped on this head, so the branch's only published number is @eordano's pre-fix 🔴 one plus the a82cdcb13 bot run (M1 CPU average +8%). The post-fix figure the merge decision needs — expected ~20.7 ms vs main's 18.0 ms, +2.7 ms / +15 % on Apple silicon, the residual engine cost — has still not been measured on a head carrying the fix.
Findings carried over (all re-verified on this head)
1. HIGH — com.alttester.sdk resolves from a personal fork on a branch ref. Unchanged; this is the blocker. Explorer/Packages/manifest.json:4 → github.com/mikhail-dcl/AltTester-Unity-SDK.git?path=/Assets/AltTester#1983-unity-6000-5-getinstanceid-obsolete, lock 3c644489…. A runtime-instrumentation SDK with in-process RPC, reflection-driven method invocation and component read/write, resolving from an account outside the decentraland org. Mutability is demonstrated, not hypothetical — the branch moved mid-PR (4cd550ae… → 3c644489…). The gated surface grew during this PR via merged dev commit efb8a2e1e (#9899: AltTesterViewProbe.cs, ViewBase.AltTester.cs, ViewBase.cs:14) — all correctly #if ALTTESTER-gated, so not a defect in dev's commit, but every new call site raises the cost of the swap-back. ALTTESTER is in the default Standalone define set (ProjectSettings.asset:931), removed only by CloudBuild.cs:69 on the release path, so every metaforge/QA build compiles the fork in, and [Inference] a UPM package's editor-side code also executes on CI machines holding build secrets, before any runtime gate applies. Mitigation, re-confirmed: DeepLinkAllowlist.cs:48 places alttester in the "Never permitted" tier — the flag is not remotely triggerable, which narrows runtime exposure, not supply-chain exposure. Author states "Must not reach dev as-is" — still true. Fix: wait for alttester/AltTester-Unity-SDK#1984 and return to a registry version, or fork into decentraland/ and pin to a 40-char SHA. Note that with 55bb9ac25 this is now the only branch-ref pin left in the Explorer manifest — the cleanup made it the sole outlier.
15. MEDIUM — com.atteneder.gltfast unpinned in both projects, and the locks already disagree. No git ref at Explorer/Packages/manifest.json:7 and avatar-preview-renderer/Packages/manifest.json:3; locks resolve b9f9f75c… vs a different commit. The desktop client and the auth-adjacent WebGL preview deserialize the same user-uploaded wearable and avatar glTF through two different builds of the same parser, and neither is declared. Strongest case in the graph for pinning — binary deserialization of third-party content. Not introduced by this PR. [UNKNOWN] whether the divergence is intentional.
3. MEDIUM — Sentry ANR migration not proven equivalent. SentryBuildTimeConfiguration.cs:29-33 replaces DisableAnrIntegration() with EnableAppHangTracking = false. Those coincide only if AnrIntegration consults the flag; if it gates native app-hang tracking, Sentry's managed watchdog now runs alongside DclAnrIntegration. SentryOptions.asset:60-61 still serializes <AnrDetectionEnabled>k__BackingField: 1. Incoherent either way — one source lookup or one ANR repro closes it.
4. MEDIUM — io.sentry.unity 4.0.0 → 4.9.0. Official upstream (getsentry/unity.git#4.9.0, lock ef9830bd…), tag-pinned, provenance fine. Ships native crash handlers (Windows/Macos/LinuxNativeSupportEnabled all 1). Privacy flags that existed at 4.0.0 stay correctly off (AttachScreenshot: 0, SendDefaultPii: 0), but anything introduced between 4.1 and 4.9 is absent from the asset and deserializes to a compiled default, unreviewed. Open SentryOptions in the 6000.5 editor once and diff.
8. MEDIUM — com.brunomikoski.animationsequencer removed without mention, plus two stale scopedRegistries scopes (manifest.json:85-91 still scopes com.brunomikoski and com.alttester.sdk). The git URL wins today, so no live ambiguity; the hazard is that reverting the AltTester manifest line alone silently re-resolves it from OpenUPM rather than failing loudly — and item 1's fix is exactly that revert. Residual risk of the removal is a prefab holding a bare m_Script GUID, which fails silently.
9. MEDIUM — FallbackFontsProvider handle leak + dangling global fallbacks. Lines 47-48 append to the live static TMP_Settings.fallbackFontAssets; Dispose() (78-82) releases handles without removing entries. Log out during chat font load → log back in → TMP resolves against destroyed assets. Separately, lines 37-43 continue without provided.Dispose(), and 53-54 should use ReportHub.LogException per CLAUDE.md §9.
10. MEDIUM — Main.unity + TMP atlases deliberately uncommitted. Right call for reviewability, but the tree is not the tree the author validated, and the "0 errors / 226 assemblies" figure was measured against a working copy that differs from HEAD.
11. LOW–MED — BillboardHDRP_GPUIPro.shadergraph has no referrer. GUID 268a2d2b… matches only its own .meta. URP-only project; 2 733 droppable lines.
12. LOW–MED — DCL_Toon.shader:375 uncommented. Pre-claiming UNIVERSAL_LIT_INPUT_INCLUDED suppresses all of URP's LitInput.hlsl. Hard dependency on a URP-internal guard name — if URP renames it, magenta avatars return with no compile error. Add a comment naming the URP version and unity-shared-dependencies#95 item 4.
16. LOW — renderer font Dynamic-atlas invariant unguarded. UiToolkitFontAssetsMustNotBeStatic (ValidationTests.cs:169) is hardcoded to Assets/DCL/UIToolkit/Fonts and lives in the Explorer project; the renderer has no .asmdef, no test assembly and no test job, so its four assets can regress to Static on any re-import with nothing catching it. Worth an issue, not a blocker.
7. LOW — Nethereum removal. Source side re-confirmed on the merged tree: every using Nethereum.* resolves to a retained assembly (Signer, ABI, Hex, Siwe.Core, Util); no source file references any of the 10 removed ones; all 13 EIP712/Eip712 hits in Explorer/Assets/DCL are string literals, JSON keys, config constants or comments. QA's fresh-account + OTP run is the runtime evidence, now three pushes stale. SIWE and the Thirdweb in-app-wallet path (Nethereum.KeyStore / Nethereum.HdWallet) remain the two removals reachable only by reflection and are still unnamed in the QA list. NethereumMetamask.jslib remains orphaned.
13. LOW ✅ — previously verified, unchanged. ComponentReference CS0104 fix; d67dd0064's attribute/pragma-only sweep (no auth-chain wire field added, removed, renamed or retyped); DCLInput.cs diffed key-by-key — 217/109 lines are exactly 108 × "priority" + 108 × "initialStateCheck" reordered, no action, binding, map, composite or control scheme changed; GetInstanceID() → GetEntityId() migrations mechanical and Burst-valid; AVPro VideoPlayer extension compiled out (surface reduction); two nits on the new validation test (undisposed SerializedObject at line 213, NRE-on-rename at FindProperty).
Also carried: [PR] com.mackysoft.serializereference-extensions 1.3.1 → 1.7.0 — third-party, single-maintainer, OpenUPM, four-minor jump; registry-pinned so immutable, and OpenUPM forbids republishing a version, so provenance is adequate; [UNKNOWN] license, advisories, popularity, last-published. LOW. [PR] com.unity.modules.physicscore2d added, com.unity.modules.vr removed, com.unity.modules.xr added — all first-party, all forced by 6.5's module split. LOW. Credit where due: com.cysharp.unitask went from an unpinned git URL to #2.5.11, and com.coffee.softmask-for-ugui 3.5.0 → #3.6.4 — the treatment items 6 and 15 are still asking for.
Also carried (lead, not a finding). Explorer/Assets/Rendering/ForwardRenderer - High.asset lost m_UseNativeRenderPass: 0 and gained m_TileOnlyMode: 0 in the URP 17.5 re-serialization. [Inference] a serialized field disappearing means the field no longer exists on the type — URP 17.5 removed the native-render-pass opt-out this project had explicitly turned off. Both fields are squarely about tile-based GPUs, which Apple silicon is and the Intel i5 (⚪ on every metric) is not — consistent with the asymmetry in the perf table. [UNKNOWN] whether either is causal. Investigate →
Summary
| # | item | risk | conf. |
|---|---|---|---|
| 1 | com.alttester.sdk → personal fork, branch ref; now the only branch-ref pin left in the Explorer manifest |
HIGH | HIGH (PR) / UNKNOWN (fork contents) |
| 19 | renderer still on #chore/unity-6-5 @ 4426b066 after that branch merged and Explorer moved off it — auto-release + Vercel production deploy on merge; branch deletion or a squash-merge orphans the pin |
HIGH (new) | HIGH (PR) / INFERENCE (branch fate) |
| 20 | 5 packages (GPUI ×3, AVPro, FileBrowserPro) moved 4426b066 → 04b022e9 in the repoint; content delta undiffed |
MEDIUM (new) | HIGH (PR) / UNKNOWN (delta) |
| 15 | com.atteneder.gltfast unpinned in both projects — locks resolve to different commits of a parser fed untrusted glTF |
MEDIUM | HIGH |
| 6 | 8 entries from one repo, all resolving main, locked at 3 different commits; grassshader + superscrollview will jump silently |
MEDIUM | HIGH |
| 17 | approvals check now green; QA evidence still covers 9422309e5, 3 pushes and 171 files back — and 6 package commits moved since |
MEDIUM | HIGH |
| 3 | Sentry ANR migration not proven equivalent; asset still holds AnrDetectionEnabled: 1 |
MEDIUM | MEDIUM |
| 4 | io.sentry.unity 4.0.0 → 4.9.0 — shipped native crash handlers, asset not re-serialized |
MEDIUM | HIGH (PR) / UNKNOWN (package) |
| 8 | animationsequencer removed undocumented; two stale scopedRegistries scopes — reverting item 1 re-resolves AltTester from OpenUPM |
MEDIUM | MEDIUM |
| 9 | FallbackFontsProvider handle leak + dangling global fallbacks |
MEDIUM | HIGH |
| 10 | Main.unity + TMP atlases uncommitted |
MEDIUM | HIGH |
| 11 | BillboardHDRP_GPUIPro.shadergraph unreferenced |
LOW–MED | HIGH |
| 12 | DCL_Toon.shader URP-guard hack, uncommented |
LOW–MED | HIGH |
| 16 | renderer font Dynamic-atlas invariant unguarded — no asmdef, no test assembly, no test job | LOW | HIGH |
| 7 | Nethereum removal — source side re-confirmed; SIWE / Thirdweb wallet path still unnamed | LOW | MEDIUM |
| — | serializereference-extensions 1.3.1 → 1.7.0; physicscore2d / xr added, vr removed |
LOW | HIGH (PR) / UNKNOWN (registry) |
| 13 | Unity first-party bumps, module churn, settings migrations, code migrations, DCLInput.cs, AVPro gate-out, font-asset migration |
LOW | HIGH |
| 5 / 18 | ✅ resolved for Explorer — 6 branch refs removed, 6 entries now agree on 04b022e9 |
— | HIGH |
| — | (unverifiable) contents of 04b022e9 and the 4426b066..04b022e9 delta — SSH-only repo, WebFetch/gh api denied |
n/a | UNKNOWN |
| — | (lead) m_UseNativeRenderPass dropped / m_TileOnlyMode added — tile-GPU-specific, matches the Apple-silicon-only regression |
n/a | INFERENCE |
| — | (mitigation) alttester deny-listed for deep links (DeepLinkAllowlist.cs:48) — flag not remotely triggerable |
n/a | HIGH |
| — | (op flag) Unity Performance Test skipped on this head; no post-fix number exists yet. UCB editor version lives outside the repo — set the renderer target to 6000.5.9f1 in lockstep |
n/a | HIGH |
Step W raises nothing — 0 files under .github/. This push adds no dependency declaration, no binary, no .asmdef and no auto-executing script; its only supply-chain effect is the repoint itself.
Bottom line. 55bb9ac25 is a genuine improvement and closes the item I have been raising for ten runs — the Explorer manifest is now free of branch refs. It is also half a pass: the renderer was left on the branch that was just merged away, which turns a reviewability concern into a plausible build break on the auto-deploying release path (item 19), and it moved five packages' content without a diff (item 20). Both are minutes of work in the same files. The verdict itself is unchanged and rests where the author put it: com.alttester.sdk on a personal-account branch, on a PR targeting dev. While in the manifests, pin gltfast, grassshader and superscrollview too.
DEPENDENCY_REVIEW: BLOCK
· branch chore/unity-6-5
…ration (#9942) The Unity 6.5 upgrade (#9871) bumped io.sentry.unity 4.0.0 -> 4.9.0, which deprecated DisableAnrIntegration(). That call was replaced with EnableAppHangTracking = false on the strength of the deprecation message, but the two are not equivalent: - DisableAnrIntegration() was literally options.RemoveIntegration<AnrIntegration>() - it removed Sentry's managed C# watchdog. - EnableAppHangTracking only feeds NativeAppHangTrackingEnabled, i.e. the NATIVE app-hang detector in sentry-native / sentry-cocoa. It does nothing to the managed integration. ScriptableSentryUnityOptions adds AnrIntegration when AnrDetectionEnabled is set, and it does so before OptionsConfiguration runs - so Configure() never had a chance to prevent it, only to remove it after the fact. With the removal gone, Sentry's watchdog has been running alongside DclAnrIntegration: two watchdog threads and duplicate ANR events. EnableAppHangTracking is also not serialized in SentryOptions.asset, so it was already false by compiled default - the replacement line was a no-op as well as the wrong lever. Fix at the source instead: clear AnrDetectionEnabled so the integration is never added. This avoids re-introducing the obsolete API (the property is [Obsolete] in code, but setting the serialized field raises no CS0618), and PersistIntoAssetFile only writes Enabled/Release/Dsn/Environment, so it will not silently revert the flag. EnableAppHangTracking = false is kept deliberately - we do not want Sentry's native app-hang detector either, since DclAnrIntegration already reports ANRs with minidumps and callstacks - and the comment now says what the property actually gates. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Pull Request Description
What does this PR change?
Upgrades the project to Unity 6000.5.9f1. Compile errors on this branch: 207 -> 0. Shader errors: 0. Assemblies built: 226.
6000.5 raises
Object.GetInstanceID()from deprecation to a compile error, forwardsUnityEngine.XRtypes to a module this project never shipped, and adds#include "LitInput.hlsl"to URP'sLitForwardPass.hlsl.Merge together with decentraland/unity-explorer-packages#62 —
manifest.jsonpins six packages to itschore/unity-6-5branch.Packages
TypeLoadExceptioncom.unity.modules.xradded — AVPro'sUpdateMultiPassStereo.csneedsUnityEngine.XRModuleProject code
Physics.BakeMesh(x.GetInstanceID())->GetEntityId();NativeArray<int>->NativeArray<EntityId>for baked mesh ids;GetInstanceID()equality -> object comparison.SceneContentStatsSystem: obsoleteEntityId->intcast replaced withGetEntityId().GetHashCode()(value only feeds a hash key).DCL_Toon.shader: pre-claims URP'sUNIVERSAL_LIT_INPUT_INCLUDEDso 6000.5's new self-include no-ops, fixing_BaseMapredefinition. Symptom was magenta avatars. Ported from fix: restore DOTS-instanced material props and Unity 6000.5 shader compat unity-shared-dependencies#95 item 4.Nethereum.Accounts4.12 referencedNethereum.Signer4.12 but the shipped Signer is 5.0, whereTransaction1559moved out. 6000.5's Mono resolves eagerly, soMetricsRegistry's reflection scan threwTypeLoadExceptionand killed app start. Removed set is unreachable from both DCL source andThirdweb.dll;NBitcoinandNethereum.Siwe.Corekept (imported directly).Editor/Extraspackages, 3 are still referenced here.DCLInput.csregenerated for Input System 1.20.0 (generated output).Avatar Preview Renderer
Upgraded to the same editor.
com.unity.modules.vrdoes not exist in 6000.5 and blocked package resolution outright; Cinemachine 3.1.4 -> 3.1.7 for theEntityIdmigration; URP + VFX Graph 17.4 -> 17.5; Input System 1.19 -> 1.20;renderfeaturesrepointed from packagesmainto the samechore/unity-6-5revision Explorer uses. Its own 63 scripts needed no changes.Test Instructions
Steps (standard run):
metaforge explorer run XXXX # ← replace with this PR numberExpected result: client starts, reaches the login screen, authenticates and loads Genesis City. Avatars are toon-shaded (not magenta), terrain shows grass/trees/detail, and you do not fall through the ground.
Steps (fresh account):
metaforge account create --clear metaforge explorer run XXXX # ← replace with this PR numberExpected result: account creation and wallet signing both complete. This is the run that exercises the Nethereum removal.
Automation (if applicable):
metaforge explorer test XXXXSteps (Avatar Preview Renderer): open the Preview URL from the
Avatar Preview Renderer — Vercel Preview is ready!comment on this PR.Expected result: the avatar renders toon-shaded (not magenta) in every mode.
Prerequisites
--clearrunTest Steps
metaforge explorer run <PR>— client reaches the login screen with no error toasts.metaforge account create --clear).metaforge explorer test <PR>.<preview>/?profile=default5— the avatar loads toon-shaded, not magenta or untextured.?mode=marketplace,?mode=authentication,?mode=profile,?mode=builder,?mode=configurator&username=test.?profile=default3&emote=dance— the emote plays and loops.?profile=default2&urn=<wearable urn>&type=avatar, then the same with&type=wearable— the wearable loads in both views. Add&background=ff00ffand&skinColor=b8814cand confirm both apply.Additional Testing Notes
QA focus — changed code paths, by risk:
TypeLoadExceptionat signing time, not at startupDCL_Toon.shaderinclude orderBakeColliderMeshes+CollideTerrainSystemnowNativeArray<EntityId>BakeMeshcalls inGLTFContainer/Utils.cs,ConfigureGltfContainerColliders.csDCLInput.csregenerated (Input System 1.20.0)DestinationMarker(map destination pin),SidebarUI.UpperLayout,SceneLoadingScreen, both Authentication screens — missing visuals, layout shiftsHomeMarkerControlleridentity comparisonsAuthenticationScreenAudioidentity comparisonSceneContentStatsSystemhash key changedDCL_Toonand Scene shaders with the client, but renders through WebGPU; the shader fix was validated only against d3d11projection=orthographicvsperspective, emote playback, wearable switcherNot covered by pre-merge verification:
UNITY_ACCESS_DOTS_INSTANCED_PROP_FROM_MACROinScene/URP/LitInput.hlsl+UnlitInput.hlsl,DCL_ToonHighlight/DCL_ToonOutline,unity_ObjectToWorld->GetObjectToWorldMatrix()). Those variants are compiled only for player builds, so nothing so far has exercised them, and that PR calls the first a live bug onmaintoday. If instanced materials or avatar shading show artefacts in a build, port those next.devas-is.#chore/unity-6-5entries once packages#62 merges tomain.Quality Checklist
Code Review Reference
Please review our Branch & PR Standards before submitting.