Planned breaking changes in Unity 6.4

Hi everyone,

As we did with Unity 6.3, this thread is where we’ll share some early information about breaking changes we plan to make in Unity 6.4.

While our goal is for every release in the 6.x series to be a completely seamless upgrade experience, we also need to balance that goal against the need to evolve the product, both in response to external changes in our platforms and ecosystem, and as part of our long-term product roadmap. So, we’re making a few changes that may require a little bit of upgrade work on your part.

We’re communicating these changes now so that you can plan any needed work around them, and to give you the opportunity to let us know if there is some aspect of the change we haven’t considered. There may be further breaking changes in 6.4 that are not captured on this list, but we aim to be as comprehensive as we can be, and will update this thread with new information through to the beginning of the 6.4 beta period.


Narrowing of artifact dependencies

We are changing the way dependencies between assets in the AssetDatabase are handled in 6.4, which unlocks some great performance improvements when importing, but may cause some bad behaviour with your AssetPostprocessor or ScriptedImporter types if your dependencies are under-specified.

The details of this change are quite long to explain, so we made a dedicated topic for it - please discuss there.


The following items were added before October 20th


Removal of HoloLens 2 support

As we announced back in July, we have deprecated our dedicated support for HoloLens 2 as a platform, and the HoloLens 2 package/plugin will not be supported on Unity 6.4. Projects targeting HoloLens 2 should either migrate to our OpenXR plugin (which can target HoloLens 2), or remain on Unity 6.3.

Changes to runtime libraries on Apple platforms

On iOS, iPadOS, tvOS and visionOS, the Unity runtime libraries for device builds (libiPhone-lib.a, libVisionOS-lib.a) will be wrapped into a framework. This means the library path will change from XcodeFolder/Libraries/<Unity Runtime Lib> to XcodeFolder/Frameworks/UnityRuntime.framework/UnityRuntime.

Similarly, the Unity runtime framework for iOS, iPadOS, tvOS and visionOS simulator builds at XcodeFolder/Frameworks/UnityRuntime.framework/UnityRuntime will be changed from dynamic to static.

We’re making these changes so that the libraries are of the same type and at the same path (XcodeFolder/Frameworks/UnityRuntime.framework/UnityRuntime) regardless of whether you’re targeting the simulator or a device. We expect the vast majority of users will not be affected by these changes, but if you are relying on these details - for example, in a post-processing script that is part of your build pipeline - then you may need to update your script to accommodate the change.


The following items were added before October 15th


Removal of UxmlFactory/UxmlTraits

This change was originally planned for Unity 6.4, but ultimately did not land before our internal cutoff, so it won’t be in this release. We still plan to do it in a future release of Unity and still recommend taking any appropriate steps to migrate your projects as soon as you can.

In Unity 6.0, UI Toolkit introduced a modern UI element authoring system based on UxmlElement and UxmlAttribute, powered by Unity serialization. This new system replaces the legacy UXML Factory/Traits workflow, which has been deprecated and will now be removed.

While the legacy system was supported for backwards compatibility, maintaining dual workflows has created bugs, confusion, and long-term costs. The new system offers a cleaner, more robust, and consistent UI experience, so we’re moving forward with it exclusively.

The Unity Manual contains a migration guide. Further documentation and examples can be found in the manual and API reference.

Scriptable Render Pipeline volumes

The SRP Core package - and by extension, the URP and HDRP packages - have previously had a hard dependency on the Physics module, as part of the Local Volumes feature. We are changing this hard dependency into a soft dependency, so that projects using SRPs but not Physics may now be able to strip the Physics module from builds, reducing build size on some platforms.

Explicitly disabling the Physics module (via the ‘Builtins’ section of the Package Manager) will cause the Local Volumes feature to no longer be available in your project.

Packages that use Physics and have a dependency on SRP Core will now need to explicitly declare their own dependency on com.unity.modules.physics, instead of relying on SRP Core providing it transitively. Note that even without this dependency, the physics module is enabled by default for all Unity projects, so a package that does not declare the dependency will usually still work - but existing or future tools that use package dependencies to reason about the project may draw incorrect conclusions without the dependency.

As part of this change, the IVolume interface has been removed. If you have your own custom volume types, you should implement volume visualization instead using the new VolumeGizmoDrawer class.

OnDisable now invoked when destroying grandchild GameObjects

OnDisable() callbacks will now be correctly invoked on components of grandchildren when a GameObject is destroyed using Object.Destroy(). Before this change, only components on the GameObject itself and direct children would have OnDisable() invoked on them.

This change means that the behaviour will be more consistent between Object.Destroy() and Object.DestroyImmediate(); Object.DestroyImmediate() always invoked OnDisable() for the entire hierarchy, and now both methods will do that.

Removal of SRP Compatibility Mode

Following our change in 6.3 to make Compatiblity Mode only available when URP_COMPATIBILITY_MODE is defined, in 6.4 we plan to remove Compatibility Mode entirely, to reduce the maintenance burden on the team and allow them to move faster.

Going forward, all custom render passes will need to use the Render Graph interface instead. For more details, please refer to the Render Graph section in the manual.

59 Likes

Hi, you mean the image effects Volume will be removed ?

No, only the IVolume interface. The volume system in general is not being removed.

1 Like

Speaking of callback behavior consistency, I noticed that OnTriggerExit is not triggered when the object is destroyed inside the collider trigger. Will this problem be fixed as well?

4 Likes

Great, thanks for the clarification

Huh? Surprised that I never ran into this. Or I might have, just never understood. Wow. It’s like one of those things that are … truly unexpected.

Wait … how does OnDisable work if you don’t destroy but merely SetActive(false) the grandparent?

Btw it would help to clarify “grandchildren” as “children of children” (of the gameobject being destroyed). It confused me at first.

And … is 6.4 going to be the next LTS?

6 Likes

Somebody from Unity posted about this - I believe it was Melv? Anyway, as far as I remember it, the code that looks for stuff to call OnDisable on just iterates the direct children of the Destroyed object, and it’s been that way since forever.

This is a big difference between 2D and 3D physics, where 2D physics does call the OnTriggerExit2D calls on destroy, if you have the correct toggle turned on. Introducing the same toggle to 3D physics would be a big improvement.

5 Likes

No, 6.3 will be the next LTS.

2 Likes

As much as I love the way Unity is upgrading the engine, I really don’t undestrand this type of LTS and Supported versioning system😅, maybe it was just better to say: 6.0 is Long Term Supported (LTS), 6.1 and 6.2 are Short Term Support (STP) or Normal Term Support (NTP).

4 Likes

Hello. These changes actually sound great, and I’m really excited that Unity is continuing to shed its legacy baggage. The dependency removal looks great, but I’m wondering if there are any plans to address the URP’s dependency on the Unity UI package? Currently, we’re facing a situation where we can’t seem to get rid of the old Unity UI system.

3 Likes

Yes, I first spotted that behaviour in April where only direct children were getting the callback and reported it internally. For good reason, this change was deferred until 6.4 so we could evaluate and announce it as a breaking change. :slight_smile:

Also, yes 3D physics doesn’t bookend the callbacks if you destroy stuff. In 2D physics it does but it was a real challenge implementing that due to how the internals work so I’m not surprised the 3D team have not yet looked at that.

7 Likes

I also am wondering about if URP can have the old UI package removed if we are not using any UGUI features and purely UI Toolkit in a project.

5 Likes

Just wanted to show support for the decision to allow breaking changes.
Unity wasn’t receiving new features as quickly as other engines, so any steps that free developers from excessive maintenance are welcome.

5 Likes

Please Unity continue to remove legacy baggage ! Keep up the good work!

15 Likes

Not in 6.4, but yes, this is planned.

7 Likes

+1 to removing legacy garage, awesome direction. We stopped using OnDisable for clean ups because it seemed unreliable. Now I understand why. Glad this is being fixed.

2 Likes

If 6.3 is the next LTS, what is after 6.4?

I have yet to see any project using the new UI toolkit and especially people in jams etc as far as I know the vast majjority use the old UI system. Removing it would be confusing and would require extra steps.

2 Likes

They’re not saying that. They’re saying the URP package has a dependency on the UGUI package, so you can’t remove it if you’re using URP. I’ve also had the same issue where I’m stuck with the UGUI package in projects despite using only UI Toolkit these days.

9 Likes