Netcode for Entities package as part of 6000.5 editor

As we announced previously, the Netcode for Entities package became part of the editor (core package) from 6000.5 and now we wanted to make an announcement as this editor went out of beta phase.

To provide a recap, what we initially included in the editor was in parity with the 1.12.0 version of the standalone package and those have diverged since then. As N4E is now part of the editor in order to see Netcode changes refer to editor release notes but we also updated our Changelog in 6000.5 editor (6000.5.2f1 to be precise) to give you an easily accessible Netcode-focused summary

To help you get started with the core package version, we have updated our public NetcodeSamples repository. Please refer to the NetcodeSamples/6000.5 branch for compatible examples and updated implementation.

Note that if you use 6000.5 editor then you HAVE TO use the core package version but we remain committed to support our previously available N4E package for lower editors until the end of their official support period.
This means that we will backport any needed quality of life improvements and bug fixes (for example we just released 1.14.0 package version!) but if you want access to our latest features then we recommend to use latest editor as it’s often quite difficult if impossible to backport some stuff

Below please find a summary of what landed in 6000.5 editor that is not present in standalone package version (same list as we included in the Changelog I mentioned but without changes present in the standalone package):

Feature
  • Integrated the Netcode for Entities package as a core package which starts in parity with 1.12.0 version of standalone package.
Changes/Improvements
  • MaxSendRate is now bypassed when ArchetypeChunk structural changes (i.e. order changes) occur, so that ghost spawns and deletions are not delayed or rate-limited. Note that bandwidth consumption may increase marginally.
  • Improved the readability of byte values in the Ghost Snapshot Tab of the Netcode Profiler.
  • Removed the ‘must be a serialized component’ limitation from the GhostComponentVariation dropdown selection in the GhostAuthoringInspectionComponent, as non-serialized components already support things like PrefabType stripping, just not explicitly. Handling of invalid ComponentOverrides has also been improved.
Fixes
  • GhostRelevancyMode.SetIsIrrelevant now respects false values being written to PrioChunk.isRelevant from the batched importance function, which enables use of this relevancy fast-path when in this mode.
  • Fixed an issue in the netcode profiler where tick navigation was inconsistent when capturing more than two sessions without clearing the profiler.
  • Fixed an issue in the Netcode Profiler where an incorrect prediction tick value was displayed in the Prediction and Interpolation Tab.

Ultimately for Netcode case this editor works more as a transition so it shouldn’t be much different to previous standalone package (main difference being that it’s now a core package). Stay tuned for more features and improvements in future editors and as always let us know your thoughts :grin:

Current future ideas

We are also exploring the creation of a ‘mirror repo’ in a similar style as Netcode for Gameobjects repo to provide developers with continued visibility into development (especially Netcode unification) while allowing for more direct discussions/contributions options. Please let us know what you think about this and stay tuned for more updates on this initiative!

4 Likes

Hey, thanks for the update.

Could you please explain why some packages become part of the editor? What’s the idea behind it?

Mostly it’s to make it easier to evolve the package’s code along with the core engine code. For example right now there’s a lot of work ongoing to more tightly integrate Entities into the rest of the engine (“Entities for All”). With Entities as a separate package, we’d need to coordinate package releases with engine releases when doing large changes or moving APIs.

It doesn’t look like it, but coordinating releases like that can really kill velocity. As a core package, the package is automatically updated with new editor releases instead. We can make a single PR that changes both the engine and the package and not have to worry about what happens if say you install a version of the package in an editor that doesn’t have the corresponding core engine change.

For Netcode for Entities specifically, the reason was that Entities itself moved to a core package. Makes it easier to keep up with changes happening there.

11 Likes

Does it mean that source code of a package won’t be available for public once it’s a part of the Editor?

The C# source code for the core engine is available for reference online: GitHub - Unity-Technologies/UnityCsReference: Unity C# reference source code. ¡ GitHub

It went without updates for a long while though looks like it’s finally been updated to show Unity 6.6.

3 Likes

If the keyword is built-in package then it’s still available inside the installation directory. For example:

6000.5.0f1/Editor/Data/Resources/PackageManager/BuiltInPackages

When a built-in package is installed into your project, you can look for its source code inside Library/PackageCache.

On the other hand, if it’s built-in module then you can only look for reference source code at the UnityCsReference repository.

3 Likes

Exactly as @Laicasaane mentioned. Since we’re currently a core package, you can still view and modify the code for your specific needs.

The mirror repo idea came from our positive experience with community collaboration in the Netcode for GameObjects repo (which is public). Since most of our GameObject layer changes land in the latest alpha/beta editors, we don’t expect a large user base on those versions yet, so we’re still figuring out the best way to gather early feedback.

That said, this is just an idea at this stage, not a promise or commitment. We’re simply gauging whether the community would find it valuable!

6 Likes

Hi everyone,

I want to apologize for a mix-up in terminology in my original post (I updated it). I mistakenly used the term “built-in package” when describing how Netcode for Entities is distributed starting in Unity 6000.5. To clarify:

  • Netcode for Entities is a Core Package starting in 6000.5. As per the Unity Core Packages Documentation, its version is locked to your Editor installation and cannot be updated via the Package Manager registry. However, because it is a source-code-based Core Package, you can absolutely still modify it. It will automatically be imported into your project’s Library/PackageCache/ folder, and you can pull it directly from there into your local Packages/ folder to override it and edit the code.
  • It is NOT a “Built-in Package.” According to the Unity Built-in Packages Documentation, those are just toggles for native engine modules and cannot be pulled locally or edited.

Sorry for the confusion this caused. Let me know if you have any further questions.

7 Likes