Skip to content

chore: upgrade to Unity 6000.5.4f1#9478

Open
eordano wants to merge 12 commits into
devfrom
chore/unity-6000.5.2f1-upgrade
Open

chore: upgrade to Unity 6000.5.4f1#9478
eordano wants to merge 12 commits into
devfrom
chore/unity-6000.5.2f1-upgrade

Conversation

@eordano

@eordano eordano commented Jul 24, 2026

Copy link
Copy Markdown
Member

Upgrades the Explorer to Unity 6000.5.4f1 (from 6000.4.0f1). Replaces #9392 (same content, re-pushed in-repo with signed commits).

API migration (compile-blocking on 6000.5)

  • 6000.5.3 escalated the InstanceID deprecations to hard errors: EntityId replaces the obsolete int instance-id APIs. Physics.BakeMesh now takes an EntityId (GLTF container colliders, road generator, terrain collider bake), and the collider-bake job array is typed NativeArray<EntityId>. Object identity comparisons use == instead of GetInstanceID().
  • com.unity.modules.xr added (XR types moved behind the XR module; the removed vr module no longer supplies it).
  • Third-party packages with no upstream 6000.5 support are vendored at their current versions on unity-explorer-packages#fix/unity-6000.5.4-api-compat (AltTester 2.3.2, AnimationSequencer, SerializeReferenceExtensions) alongside the already-vendored AVPro / GPUI Pro / FileBrowserPro / RenderFeatures pins. unity-shared-dependencies#fix/unity-6000.5-shader-compat resolves the URP 17.5 LitInput.hlsl self-include collision with DCL_Toon. SoftMask → 3.6.2 and Sentry → 4.7.0 (4.0.0 crashes 6000.5's IL2CPP Span-intrinsic remapper); URP/VFX → 17.5.0 plus editor-recommended package bumps.

Runtime fixes for 6000.5 behavior changes

  • UI Toolkit Inter fonts migrated static → dynamic atlas (Advanced Text Generator rejects static font assets, which blanked all UI Toolkit text).
  • CJK fallback fonts are awaited during chat init, live TMP texts refresh once fallbacks land, and a small static UIDesignGlyphs SDF font bakes the three design glyphs (文 あ 中) used at boot before addressable fallbacks load — boot now logs zero missing-glyph warnings.
  • MetricsRegistry guards its type scan (IsAssignableFrom can throw TypeLoadException under 6000.5's Mono, which would kill request metrics from the static ctor).
  • _TerrainBounds declared float4 in MountainLit's DOTS-instancing block (6000.5 encodes the type into metadata symbols; player-build variants failed).

Cleanups surfaced by the upgrade

  • Six dead MonoBehaviours (deleted scripts, verified dangling) stripped from five prefabs — removes the per-boot "referenced script is missing" warnings.
  • ControlsPanel no longer hard-links the sprite its ContextualImage loads via AssetReference (fixed the "[UI] Image must not have a sprite" error on preallocation).
  • Deterministic 6000.5 migration artifacts committed (renderer/prefab resaves, VFX version stamp, PhysicsCoreProjectSettings2D, package-manager settings migration) so checkouts stay clean.

Verification

  • Player builds green on both editor lines and both platforms: 6000.5.4f1 macOS IL2CPP and Windows/DirectX (0 shader / 0 script / 0 IL2CPP errors), 6000.4.0f1 macOS Mono.
  • Dependency branches (unity-explorer-packages#60, unity-shared-dependencies#95) compile clean on current 6000.4 dev, so they can merge ahead of this PR; after they merge to main, drop the #fix/... refs from the manifest.
  • In-editor: full boot to interactive world, multi-session play-mode verification.

eordano added 12 commits July 24, 2026 18:43
Bump the editor and migrate the DCL code that hit APIs removed in 6000.5:

- EntityId replaces the obsolete int instance-id APIs. Physics.BakeMesh now
  takes an EntityId (Utils, BakeColliderMeshes, CollideTerrainSystem), and the
  collider-bake job array is typed NativeArray<EntityId>.
- MetricsRegistry guards its type scan: IsAssignableFrom can force-load a
  precompiled dependency type that 6000.5's Mono fails to resolve, which would
  otherwise throw from the static ctor and take request metrics down.

Verified compiling and running on 6000.5.2f1 (editor boots, enters play mode,
reaches interactive).

Vendored/third-party packages (SoftMask, GPUI Pro, AVPro, UniTask,
com.unity.localization, FileBrowserPro, renderfeatures) also need 6000.5 API
fixes; those live outside this repo and are tracked separately.
6000.5.3 escalated the InstanceID deprecations to hard errors and moved
UnityEngine.XR types behind the XR module, which broke every third-party
package. Changes on top of the 6000.5.2f1 migration:

- ProjectVersion 6000.5.4f1; add com.unity.modules.xr (XR types are no
  longer reachable without it).
- Point vendored packages (AVPro, GPUI Pro, RenderFeatures,
  FileBrowserPro) at unity-explorer-packages#fix/unity-6000.5.4-api-compat,
  which migrates them to the EntityId APIs.
- Vendor AltTester 2.3.2, SerializeReferenceExtensions and
  AnimationSequencer on the same branch: no upstream Unity 6000.5
  support exists yet. AltTester is now referenced by assembly name
  instead of the version-specific asmdef GUIDs.
- SoftMask 3.5.0 -> 3.6.2 and UniTask lock bump; both fixed 6000.5
  compatibility upstream.
- Migrate remaining DCL GetInstanceID call sites: Physics.BakeMesh
  takes EntityId; object identity checks use reference equality.
- Editor-migrated settings (PackageManager registry format, SoftMask
  shader registry, URP global settings, mppm version stamp).
Runtime fixes found by in-editor verification:
- unity-shared-dependencies pinned to fix/unity-6000.5-shader-compat:
  URP 17.5's LitForwardPass.hlsl now self-includes LitInput.hlsl, which
  collided with DCL_Toon's own input file and broke the avatar toon
  shader (magenta avatars). Fixed upstream with guard-reuse.
- Migrate the two UI Toolkit Inter font assets from static to dynamic
  atlas population (source .ttf restored): 6000.5's Advanced Text
  Generator cannot use static font assets, which blanked all UI Toolkit
  text. Baked atlases retained as the pre-populated starting set.
- Point DebugUtilitiesStyle.uss at the real Inter Regular font asset;
  its previous reference targeted a theme asset that no longer exists.

Audit cleanup (multi-agent review of the upgrade diff):
- unity-explorer-packages branch rebuilt to vendor the previously
  pinned AltTester 2.3.0 / SerializeReferenceExtensions 1.3.1 /
  AnimationSequencer 0.5.4 (no silent version bumps) and to keep
  AltTester's int-based wire protocol on legacy instance-id values.
- Revert the test-only localization table that the Localization 1.5.12
  sync auto-added to the shipped addressables group.
- Commit the deterministic 6000.5 migration artifacts (VFXManager
  version stamp, PhysicsCoreProjectSettings2D, ForwardRenderer hide
  flags, stopwatch meta normalization) so checkouts stay clean.
The Asian fallback fonts (NotoSans SC/JP/KR) load asynchronously via
addressables in ChatPlugin. Any text generated before that load lands —
e.g. chat channel names with CJK characters during boot — resolved the
missing glyphs to spaces ('character \u6587 was not found in the
Inter-Regular SDF font asset or any potential fallbacks') and never
regenerated. Force active TMP texts to rebuild their meshes against the
completed fallback chain, so text created during the loading window
self-heals instead of staying blank.
The CJK fallback fonts were loaded fire-and-forget while the rest of
chat setup raced ahead, so channel names and history rendered before
the load landed resolved missing glyphs to spaces and logged 'character
\u6587 was not found in the Inter-Regular SDF font asset or any
potential fallbacks'. Await the load inside ChatPlugin.InitializeAsync
so the fallback chain is complete before any chat text generates its
mesh; the failure path is unchanged (fonts stay optional, chat init
cannot be blocked by a load error). The live-text refresh remains as a
safety net for non-chat text rendered during boot.
ContextualImage on the Controls GameObject loads the same sprite
(guid 4974685691c1) through its AssetReference on enable; the Image
component also serialized it directly, hard-linking it into memory and
tripping the '[UI] Image must not have a sprite' error on every
ControlsPanelView preallocation. Clear the serialized sprite so only
the contextual load provides it.
The auto-translate indicator (文A / あA) and the language
dropdown's 中文 are CJK glyphs serialized directly in UI prefabs
and settings, so they render at boot — before the addressable CJK
fallback fonts can load — and TMP replaced them with spaces while
logging 'character 文 was not found' warnings.

Add UIDesignGlyphs SDF: a 256x256 static font asset holding exactly
those three glyphs (baked from NotoSansSC-SemiBold, source-font
reference stripped so the 8.5MB OTF is not a build dependency), wired
into Inter-Regular SDF's fallback table. Boot-time text now resolves
the glyphs immediately; the runtime-loaded NotoSans fallbacks continue
to cover arbitrary user content.

Also re-pins unity-explorer-packages to 1293099, which drops seven
Ocean material resaves (editor serialization churn) from the branch.

Verified: full boot to the authentication screen logs zero
missing-glyph warnings (previously eight).
Removes the 'The referenced script (Unknown) on this Behaviour is
missing!' warning logged on every boot. The six dead components were
corpses of deleted scripts, confirmed via git history:

- DestinationMarker.prefab: pre-repo script, no surviving reference
- FavoriteMarkerObject.prefab: navmap-era script dropped in the map
  discoverability refactor (#2734)
- VoiceChatMicrophoneAudioSource.prefab: leftover from a local getFps
  prototype (hand-crafted guid a1b2c3d4...)
- VoiceChatPlaybackAudioSource.prefab (x2): scripts removed in the
  communities voice chat audio-quality fix (#5402)
- RoomIndicator.prefab: reference from the reverted UI Toolkit nametag
  refactor (#5657)

Stripped with GameObjectUtility.RemoveMonoBehavioursWithMissingScript;
a project-wide scan of every m_Script guid in Main.unity and all
prefabs now resolves cleanly.
…ixes

unity-explorer-packages 6bc4241: version-guard the AdvancedDropdownItem
childList accessor (6000.5-only API) so the vendored packages compile on
the 6000.4 line. unity-shared-dependencies a1a8ecc: inline the
parameterless IsSurfaceTypeTransparent() under URP's own include guard
instead of including Shaders/Utils/SurfaceType.hlsl, which 6000.4's URP
does not ship.

Verified: current dev (6000.4.0f1) with both fix branches compiles with
zero errors, so the dependency branches can merge ahead of this PR.
…block

The property is float4 everywhere (cbuffer, sampled cache, access macro)
but the UNITY_DOTS_INSTANCED_PROP declaration said float. Unity 6000.4's
untyped metadata symbols tolerated the mismatch; 6000.5 encodes the type
into the generated metadata name, so the player-variant compile fails
with 'undeclared identifier unity_DOTSInstancingF16_Metadata_TerrainBounds'
(surfaces only in player builds — editor variants never hit it).
io.sentry.unity 4.0.0's repackaged System.Memory/System.Text.Json shims
crash Unity 6000.5's IL2CPP Span-intrinsic remapper ('Sequence contains
no matching element' in IntrinsicRemap.SpanGetItemArguments), failing
every player build with 9 conversion errors. 4.7.0 converts cleanly.

unity-shared-dependencies pinned to de4cce8: DOTS-instancing variant
fixes (legacy FROM_MACRO accessors, direct unity_ObjectToWorld uses,
missing instance-id transfer in the toon outline) that only surface in
player builds.

Verified: full macOS IL2CPP player build succeeds with zero script,
shader and IL2CPP errors; both dependency branches also compile clean
on 6000.4.0f1 dev for sequential landing.
Squashed the shader-compat branch to a single comment-free commit
(5261933); no functional change from de4cce8.
@eordano
eordano requested review from a team as code owners July 24, 2026 16:55
@github-actions
github-actions Bot requested a review from anicalbano July 24, 2026 16:55
@decentraland-bot decentraland-bot added the ext-contribution Identifies a contribution which was not initiated by a Unity Developer label Jul 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

badge

New build in progress, come back later!

@eordano eordano added the force-build Used to trigger a build on draft PR label Jul 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Slack notification sent to #explorer-ext-contributions for external review.
To re-send, delete this comment and re-add the ext-contribution label.

@github-actions

Copy link
Copy Markdown
Contributor

Test results not found — the test run likely crashed or timed out before producing results; check the Unity Tests checks.

@claude

claude Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Claude finished @eordano's task in 2m 49s —— View job


Security-focused dependency review

  • Identify all dependency changes (manifest, lockfile, asmdef, binaries)
  • Look up registry/source metadata for changed deps
  • Assess provenance, capabilities, shipping impact, transitive risk
  • Classify risk and emit verdict

Scope: this PR changes only dependency + project-settings files (no .github/workflows/ or .github/prompts/ changes), so Step W is skipped. No new binary files are introduced into this repo by the diff (the pre-computed binary list is empty). Web/registry pages could not be fetched (WebFetch/WebSearch not permitted in this run) — external metadata is marked [UNKNOWN] where it couldn't be confirmed from the diff/lockfile.


Summary table

Dependency / file Version change Source Type Scope Risk Confidence
com.alttester.sdk 2.3.0 (OpenUPM) → git branch fix/unity-6000.5.4-api-compat decentraland/unity-explorer-packages managed+native editor/test MEDIUM HIGH
com.brunomikoski.animationsequencer 0.5.4 (OpenUPM) → git branch decentraland/unity-explorer-packages source runtime MEDIUM HIGH
com.mackysoft.serializereference-extensions 1.3.1 (OpenUPM) → git branch decentraland/unity-explorer-packages source editor/runtime MEDIUM HIGH
com.dcl.gpui-assets, com.gurbu.gpui-pro, com.gurbu.gpui-pro.terrain git default → git branch decentraland/unity-explorer-packages managed+native runtime MEDIUM HIGH
com.decentraland.filebrowserpro git default → git branch decentraland/unity-explorer-packages managed+native runtime MEDIUM HIGH
com.renderheads.avpro.video-ultra git default → git branch decentraland/unity-explorer-packages native runtime MEDIUM HIGH
decentraland.renderfeatures git default → git branch decentraland/unity-explorer-packages source runtime MEDIUM HIGH
com.decentraland.unity-shared-dependencies git default → git branch fix/unity-6000.5-shader-compat decentraland/unity-shared-dependencies source runtime MEDIUM HIGH
io.sentry.unity #4.0.0#4.7.0 (immutable tag) github.com/getsentry/unity (official) managed+native runtime LOW HIGH
com.coffee.softmask-for-ugui #3.5.0#3.6.2 (immutable tag) github.com/mob-sakai (official) source runtime LOW HIGH
Unity registry/builtin bumps (URP/VFX/shadergraph 17.4→17.5, collections 6.4→6.5, mathematics 1.3.3→1.4.0, ugui 2.0→2.5, cinemachine, localization, timeline, test-framework, burst, editorcoroutines, ext.nunit, services.core, memoryprofiler, playmode, profile-analyzer) pinned semver packages.unity.com (official) managed runtime/editor LOW HIGH
module com.unity.modules.vr removed, com.unity.modules.xr added 1.0.0 Unity builtin module runtime LOW HIGH
DCL.Plugins.asmdef 2 GUID refs → named AltTester refs asmdef build LOW HIGH

Findings

Provenance is strong across the board. Every changed git source is either a Decentraland-org-owned repo (decentraland/unity-explorer-packages, decentraland/unity-shared-dependencies) or a well-known official upstream (getsentry/unity, mob-sakai/SoftMaskForUGUI, packages.unity.com). No new third-party publisher, no unknown registry, no new opaque binary added to this repo. [PR]

MEDIUM — the only real concern: mutable git branch refs replace immutable pins. Ten packages now resolve via #fix/unity-6000.5.4-api-compat / #fix/unity-6000.5-shader-compat instead of a tag or commit. Three of them (alttester, animationsequencer, serializereference-extensions) previously had immutable OpenUPM semver pins and are now on a branch. [PR]

  • Mitigating fact: packages-lock.json does pin the resolved commit — all unity-explorer-packages sub-packages currently lock to 6bc4241ce1314527226b60000734e7398fcf565c, and unity-shared-dependencies to 52619333d46173c4f8258fe25c7ca1cec1bfa2cc. As long as the lockfile is respected on restore, the exact tree is fixed. [PR]
  • Residual risk [Inference]: a branch ref is force-pushable, so any lockfile regeneration / clean re-resolve picks up whatever the branch tip is at that moment. This is a temporary supply-chain smell, not a stable pin.
  • The PR author already acknowledges this and states the plan: merge the dependency branches (unity-explorer-packages#60, unity-shared-dependencies#95) to main first, then drop the #fix/... refs from the manifest. That's the correct fix. Recommend this PR not merge to a shipping branch while the manifest still carries branch refs — either land the dep branches and repin to tags/commits here, or (interim) confirm the lockfile hash is authoritative in CI/build.

AltTester capability note (informational, pre-existing). com.alttester.sdk is a UI-test-automation SDK that can expose a TCP control server allowing external drivers to inspect/drive the running app — a meaningful runtime capability if it ships enabled in retail. This dependency is not new (it was already present at 2.3.0); this PR only moves its source and bumps to 2.3.2. Worth a one-time confirmation that AltTester remains stripped/disabled in retail player builds and is not initialized in the shipping client. [Inference / partly UNKNOWN] The asmdef edit (lines 574–577) merely swaps two GUID references for name-based AltTester.* references — a mechanical consequence of the registry→git source move, not an assembly-visibility or InternalsVisibleTo change. [PR]

LOW — version bumps from trusted sources. Sentry 4.0.0→4.7.0 and SoftMask 3.5.0→3.6.2 both use immutable tag refs on official repos. All Unity package bumps are pinned semver from packages.unity.com. The vrxr module swap is a standard Unity 6000.5 module reorganization (matches PR description). No transitive dependency in the lockfile diff introduces a new obscure/native/low-trust package — the transitive sets are unchanged Unity modules. [PR]

UNKNOWN / manual follow-up.

  • Contents of the fix/unity-6000.5.4-api-compat and fix/unity-6000.5-shader-compat branches were not diffed here — only the ref change is visible. The actual vendored code delta (AltTester 2.3.2 / AnimationSequencer / SerializeReferenceExtensions being newly vendored, and the API-compat edits to AVPro/GPUI/FileBrowser/RenderFeatures) lives in those PRs and should be reviewed there. [UNKNOWN]
  • External registry pages (NuGet/OpenUPM/GitHub metadata, CVEs, publish dates) could not be fetched in this run. [UNKNOWN]

Recommendation

No HIGH-risk / blocking issue: sources are org-owned or official, and the lockfile pins concrete commits. The one item needing human tracking is the temporary mutable branch refs in manifest.json, which the author has already committed to repinning once the dependency PRs merge. Land the dependency branches first and drop the #fix/... refs (or repin to a tag/commit) before this reaches a release branch.

DEPENDENCY_REVIEW: NEEDS_ATTENTION

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ext-contribution Identifies a contribution which was not initiated by a Unity Developer force-build Used to trigger a build on draft PR new-dependency

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants