Skip to content

chore: Address last issues on NGO side (following on N4Ev7.0.0 release) - #4156

Closed
michalChrobot wants to merge 12 commits into
develop-3.x.xfrom
addressing-ngo-3-issues
Closed

michalChrobot wants to merge 12 commits into
develop-3.x.xfrom
addressing-ngo-3-issues

Conversation

@michalChrobot

@michalChrobot michalChrobot commented Sep 8, 2026

Copy link
Copy Markdown
Member

Purpose of this PR

Fixes three issues that surface when NGO (unified) builds against Netcode for Entities (N4E) 7.0.0.

N4E 7.0.0 dependency + editor

  • Add com.unity.netcode@7.0.0 hard dependency and bump com.unity.transport to 6.5.0 to match N4E dependency on it (as this is the core transport version that would be used anyway) .
  • CI update to temporarily use trunk only (which doesn't have N4E as core package anymore) in contrast to officialy released editors that do. I'm keeping validation_editors.all as a reminder to correct this once next editor is released

Removed API: GhostObject.ApplyPostTransformMatrixScale

  • N4E removed this in its 6.7.0 non-uniform (3D) scale rework, where the GameObject↔entity transform sync now owns PostTransformMatrix. Re-added as a temporary internal extension over the new model (with a uniform-scale fallback), the three call sites are unchanged. Adds a Unity.Transforms asmdef reference. To be replaced once N4E exposes a supported scale API or other solution is worked on

Netcode type shadows the Unity.Netcode namespace

  • N4E 7.0.0 introduces a Netcode facade type in the shared Unity.Netcode root, so Netcode. inside NGO now binds to the type instead of the namespace. Dropped the redundant Netcode. qualifier at the one code site (was CS0117) and ~22 XML doc crefs. A proper N4E-side rename is tracked separately (the facade is experimental, so no breaking-change process will be required as this is behind experimental define).

Correct NetCode capital C casing
@NoelStephensUnity I'm not sure if you planned to do it in a separate PR but I fixed it here to see if CI will pass otherwise. Feel free to correct those in separate PR and then merge it to this one if you prefer

Disabled more tests for CoreCLR
Previously when trying to update editor manifest with previous NGO release we failed CoreCLR job which was cause by our tests which we need to fix. I disabled them here so we will avoid being ejected from a batch

Jira ticket

N/A

Documentation

N/A

Testing & QA (How your changes can be verified during release Playtest)

Green CI + I will also open projects with latest built editor (trunk) to see if everything works (which will work as a minimal playtest validation before 3.X release)

Up-port

N/A

Backports

N/A

@michalChrobot michalChrobot self-assigned this Sep 8, 2026
…ved N4E core package gets released) + added hard dependency on N4E
@michalChrobot michalChrobot changed the title Added temporary ApplyPostTransformMatrixScale replacement Address latest issues on NGO side (from where N4Ev7.0.0 was released) Sep 8, 2026
@michalChrobot
michalChrobot marked this pull request as ready for review September 8, 2026 09:41
@michalChrobot michalChrobot changed the title Address latest issues on NGO side (from where N4Ev7.0.0 was released) chore: Address latest issues on NGO side (from where N4Ev7.0.0 was released) Sep 8, 2026

@u-pr u-pr Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Harness Review

Needs changes

The compatibility update fixes the namespace references and introduces a replacement scale bridge, but the bridge loses valid non-uniform parent scale and the unified validation configuration remains pinned to the prior Netcode version.

Reviewed commit 62718d8

🤖 Helpful? 👍/👎

Comment thread com.unity.netcode.gameobjects/package.json
@michalChrobot michalChrobot changed the title chore: Address latest issues on NGO side (from where N4Ev7.0.0 was released) chore: Address last issues on NGO side (following on N4Ev7.0.0 release) Sep 8, 2026
@michalChrobot

Copy link
Copy Markdown
Member Author

/review

@u-pr u-pr Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Harness Review

Needs changes

The unified dependency and compatibility updates are largely coherent, including the replacement scale path and the updated unified test manifest. The CI editor selection, however, still leaves scheduled coverage on the editor versions this change explicitly cannot support.

Reviewed commit 65dc4e4

🤖 Helpful? 👍/👎

Comment thread .yamato/project.metafile
validation_editors:
default:
- 6000.7
- trunk

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1

Changing only default and minimal does not make CI trunk-only: the weekly workflow expands validation_editors.all for package, project, player, and other tests, and that list still contains 6000.7.0a6 and 6000.7. Those released editors retain Netcode for Entities as a core package, the incompatibility this change is avoiding by adding the direct 7.0.0 dependency, so the weekly jobs will either fail resolving the package set or no longer validate the intended dependency. Temporarily make all trunk-only as well (or exclude all-dependent jobs) until the compatible editor release is available.

🤖 Helpful? 👍/👎

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

known thing and this is temporary

@michalChrobot

Copy link
Copy Markdown
Member Author

Last correction is due to
image

@michalChrobot

Copy link
Copy Markdown
Member Author

Closing as those changes are covered in #4158

@michalChrobot
michalChrobot deleted the addressing-ngo-3-issues branch September 9, 2026 08:12
michalChrobot added a commit that referenced this pull request Sep 14, 2026
* chore: netcode for entities 7.0.0 as a dependency, unified api behind a define

N4E becomes a hard dependency at 7.0.0, and com.unity.transport moves to 6.5.0 to match it.

N4E 7.0.0 ships its unified API - GhostObject, GhostBehaviour, GhostField - behind
NETCODE_GAMEOBJECT_BRIDGE_EXPERIMENTAL, which leaves those types internal in the configuration
NGO ships. A public type cannot derive from an internal one, so the unified path can no longer key
off the package being present: the UNIFIED_NETCODE versionDefine is removed from the four assembly
definitions and the symbol is set by the project instead, alongside N4E's own define.
NetworkObjectBridge is internal for the same reason, and UnifiedBootstrap raises an #error when
only one of the two defines is set.

With N4E present the two packages share the Unity.Netcode namespace, which breaks three things
outside the unified gates:

- N4E's Netcode facade type shadows the namespace, so 22 XML doc crefs and one nameof that
  qualified with Netcode. stopped resolving.
- N4E declares an INetworkStreamDriverConstructor in the shared root that the enclosing namespace
  finds ahead of NGO's, so the one implementation in the editor tests is fully qualified.
- N4E's source generator errors on an assembly that does not reference N4E, so the editor test
  assembly now references it.

Multiplayer Services 2.3.1 does not compile against N4E 7.0.0 and no fix is published, so it is
dropped from the test project manifests. Validation moves to trunk, the only editor that has
dropped N4E as a core package and can resolve the 7.0.0 request rather than its bundled 6.7.0.

The unified work is preserved and still compiles with both defines set: the N4E 6.7.0 spellings are
updated, and GhostObject.ApplyPostTransformMatrixScale, which N4E removed in its scale rework, is
reimplemented over the new PostTransformMatrix model. The unified CI job sets the defines itself
and is no longer a PR check.

Also disables the serialization tests that fail under CoreCLR so the package is not ejected from
the editor manifest batch.

Parts of this are taken from #4156.

* chore: fix the standards check for the n4e 7.0.0 dependency

Three things the standards job caught, since it opens the project, runs the formatter with --fix and
then fails on any diff at all:

- The fully qualified INetworkStreamDriverConstructor is simplified by the formatter (IDE0001), so
  write it the way the formatter wants. It still resolves to NGO's, since the lookup walks out to
  Unity.Netcode.Transports before reaching the shared root.
- N4E 7.0.0 renamed the serialized GlobalNetCodeConfig field to GlobalNetcodeConfig, which the editor
  rewrites in the test project's settings asset the first time it loads it.
- validation_editors.minimal is back on a released editor. The standards job opens the project with
  it, and trunk rewrites ProjectVersion.txt out from under the cleanliness check. Nothing there needs
  N4E present: a released editor bundles 6.7.0 as a built-in package, so the 7.0.0 request is dropped
  silently and the project builds with no N4E at all - verified on 6000.7.0a6, which resolves and
  compiles clean with N4E absent from packages-lock, PackageCache and ScriptAssemblies alike.

* chore: alias n4e's clashing driver constructor instead of qualifying it

The formatter and the compiler want opposite things here. With N4E present the bare
INetworkStreamDriverConstructor binds to N4E's copy in the shared Unity.Netcode root, which the
enclosing namespace reaches before the using directive, and the class then fails to implement it.
With N4E absent - which is what the standards job's editor resolves - any qualification is redundant
and IDE0001 strips it back off, so the last two attempts each traded one failure for the other.

A file-scope using alias satisfies both. Its target cannot be shortened, since at file scope there is
no enclosing namespace to shorten it against; the use site is a single identifier with no qualified
form; and IDE0005 cannot drop the alias because removing it stops the name resolving at all.

* chore: depend on n4e 6.7.0 and compile the unified path against either version

The 7.0.0 dependency could not be satisfied anywhere. Every editor available today - 6000.7.0a6 and
current trunk alike - lists com.unity.netcode 6.7.0 as mustBeBundled in its manifest, so UPM drops a
7.0.0 request silently: no assemblies, no packages-lock entry, no warning. upm-pvp then fails hard
with "depends on com.unity.netcode, which is not in the lock file", which is what took out Validate
on all three platforms and Package Test on both editors.

Dependency versions are minimums, so asking for 6.7.0 resolves the bundled package today and picks up
7.0.0 by itself once an editor manifest carries it. The transport bump goes back to 2.6.0: 6.5.0 was
never published (the 6.x line is editor-bundled only, latest published is 2.7.4), so it fails
PVP-160-1, which the Validate job explicitly requires - and N4E asks for 6.5.0 itself, so resolution
is unaffected either way. With the dependency resolving everywhere, nothing needs a trunk editor and
validation_editors goes back to what develop had.

Since either version can now be what resolves, the unified path compiles against both, gated on a
UNIFIED_NETCODE_7_0_0 versionDefine keyed to the resolved package version. The 6.7.0 spellings are
aliased to the 7.0.0 names so the use sites read the same either way, except N4E's Netcode class:
inside namespace Unity.Netcode that name binds to the enclosing namespace before any file-scope alias
is considered, so it is aliased as EntitiesNetcode in both. GhostObjectScaleExtensions is 7.0.0-only,
since 6.7.0 still has the method it stands in for.

That also makes the dependency real rather than dropped, which has consequences worth knowing: N4E's
assemblies now build in every project, its ClientServerBootstrap becomes the Entities bootstrap with a
non-zero AutoConnectPort, and it writes a NetcodeConfig into the project when its settings asset does
not resolve one - which is why the GlobalNetCodeConfig field goes back to the 6.7.0 spelling here.

Verified on 6000.7.0a6 against both versions: shipping (unified off), unified against bundled 6.7.0,
and unified against 7.0.0 all compile with zero errors, and the standards check is clean.

* Update com.unity.netcode.gameobjects/CHANGELOG.md

* Updated editor used after 0b1 got released and package dependencies

* Updated testproject and minimalproject to 6000.7.0b1

* Fix for CI issues (will file a ticket)

* correction of previous fix

* re-added services.multiplayer package as compatible version was released

* Disabled tests

* reverted re-adding of services as that version is still not compatible with N4E

---------

Co-authored-by: Michał Chrobot <124174716+michalChrobot@users.noreply.github.com>
Co-authored-by: Michał Chrobot <michal.chrobot@unity3d.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant