I’ve been an excited DOTS devotee since the day it was announced. Unfortunately, after 8+ years, it’s still unclear in what parts of Unity are compatible with DOTS. And it’s unclear how to find out.
Here are a list of major Unity features. It’s unclear if - or how much - of their APIs can be called from a Bursted Job:
- Cinemachine
- Animation State Machines
- Audio Features/Sources/Listeners
- TextMesh Pro
- Landscape Features
- Speedtree
- Sky & Weather Features
- Misc. Material/Shader features
- Postprocessing Effects
- Advanced lighting (GI or Raytracing)
- UI Toolkit
- Navmesh Agents
- ML features
- Unity Analytics
- Unity Ads
- VR/MR Features
Consider someone trying to figure out if it’s safe to use ECS for the core logic of their next project. If they plan to use MonoBehaviors, they’ll know all of these features will be available to them. If they write DOTS based code? How can they know? Will they run into any unforeseen compatibility gotchas, 3 years down the line? Will they find out a year before shipping that the solution Unity suggests for a problem will only work for MonoBehavior code? How can they find out what will be safely available to them, before they invest?
For some features like Rendering, Physics, Networking, or Skinned Animation, DOTS-specific versions of them had to be written from the ground up. Is that how we are meant to know if a Unity feature is ready for DOTS? Should we be waiting for new DOTS versions of the above list? Where’s the communication?
Joachim’s original sell for DOTS was always that it could be used for the main gameplay logic of a game - not just grass, or side features. But the way things have evolved, it feels like isolated side features of a game is the only safe way to plan to use DOTS in a project. And that also seems to be the only way almost all released projects (ones that use a variate of Unity features) have used it: “Let us tell you where we were able to incorporate DOTS.”
(Cont.)