Unity-Technologies / com.unity.netcode.gameobjects

Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.
MIT License
2.1k stars 430 forks source link

Addressables (and Custom) Scene Loading #2868

Open JohnBaracuda opened 2 months ago

JohnBaracuda commented 2 months ago

Right now, NGO's NetworkSceneManager can't work with Unity's Addressable scenes. In my setup, I depend on data and event assets shared across the game, necessitating the use of addressable scenes to some extend. The current NGO framework limits us from switching to our preferred scene management method because the essential components, specifically the ISceneManagerHandler and its default assignment to DefaultSceneManagerHandler, are internal and not easily replaceable. The whole issue was previously discussed in a closed Issue #423, where a fork was used as a workaround which is a solution I'd prefer to avoid.

Integrating a custom scene provider into NetworkSceneManager might be a solution, enabling a more flexible approach to scene loading. Alternativlely allowing us to replace or extend the ISceneManagerHandler setup or the NetworkSceneManager itself, by making these components not internal, could solve the problem without needing to fork the NGO repository.

Avoiding Addressable Scenes isn't a practical option for me. It would require a significant overhaul of my systems that rely on asset-based events and data, which are accessed and modified by various systems such as UI, player interactions, and scenes.

I've also considered building my own system. However, creating a solution for Addressable scene management to function alongside NGO's existing framework feels like an unnecessary duplication of effort. Moreover, it seems this would require me to add features like auto scene migration support, addressing a problem which to me seems to be rooted at a different level, specifically syncing scene IDs and providing scenes. I'd prefer to see enhancements to the existing NetworkSceneManager to directly support Addressables or at least make it possible to replace the NetworkSceneManager with a custom implementation.

I am not an expert in these matters and I hope that my request is not too uneducated. I will continue to search for solutions.