From 8e19568e1982bddd19ff771bb764872a35eafb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= <2108U9@gmail.com> Date: Thu, 8 Mar 2018 21:05:11 +0100 Subject: [PATCH] Added Unity 5 support --- .../MonoBehaviours/Core/NetworkingManager.cs | 13 ++++++++++ .../NetworkSceneManager.cs | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index 578068f..00ce434 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -110,8 +110,10 @@ namespace MLAPI //Legacy channel. ReliableFragmentedSequenced doesn't exist in older Unity versions. if(NetworkConfig.UseLegacyChannel) NetworkConfig.Channels.Add("MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", QosType.ReliableSequenced); +#if !UNITY_5 //Unity 5.6 has confirmed to not have the ReliableFragmentedSequenced channel type. else NetworkConfig.Channels.Add("MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", QosType.ReliableFragmentedSequenced); +#endif NetworkConfig.Channels.Add("MLAPI_POSITION_UPDATE", QosType.StateUpdate); NetworkConfig.Channels.Add("MLAPI_ANIMATION_UPDATE", QosType.ReliableSequenced); @@ -177,6 +179,17 @@ namespace MLAPI return cConfig; } +#if UNITY_5 + internal IEnumerator WaitForSceneSwitch(AsyncOperation operation, Action callback) + { + while(!operation.isDone) + { + yield return null; + } + callback(); + } +#endif + public void StartServer(NetworkingConfiguration netConfig) { diff --git a/MLAPI/NetworkingManagerComponents/NetworkSceneManager.cs b/MLAPI/NetworkingManagerComponents/NetworkSceneManager.cs index 7f5943d..d75a3f4 100644 --- a/MLAPI/NetworkingManagerComponents/NetworkSceneManager.cs +++ b/MLAPI/NetworkingManagerComponents/NetworkSceneManager.cs @@ -47,7 +47,15 @@ namespace MLAPI.NetworkingManagerComponents isSwitching = true; lastScene = SceneManager.GetActiveScene(); AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); +#if !UNITY_5 sceneLoad.completed += OnSceneLoaded; +#else + NetworkingManager.singleton.StartCoroutine(NetworkingManager.singleton.WaitForSceneSwitch(sceneLoad, () => + { + //This block runs when scene switch is done. + OnSceneLoaded(sceneLoad); + })); +#endif using(MemoryStream stream = new MemoryStream(4)) { using (BinaryWriter writer = new BinaryWriter(stream)) @@ -72,7 +80,15 @@ namespace MLAPI.NetworkingManagerComponents } lastScene = SceneManager.GetActiveScene(); AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneIndexToString[sceneIndex], LoadSceneMode.Additive); +#if !UNITY_5 sceneLoad.completed += OnSceneLoaded; +#else + NetworkingManager.singleton.StartCoroutine(NetworkingManager.singleton.WaitForSceneSwitch(sceneLoad, () => + { + //This block runs when scene switch is done. + OnSceneLoaded(sceneLoad); + })); +#endif } private static void OnSceneLoaded(AsyncOperation operation) @@ -85,7 +101,15 @@ namespace MLAPI.NetworkingManagerComponents SceneManager.MoveGameObjectToScene(objectsToKeep[i].gameObject, nextScene); } AsyncOperation sceneLoad = SceneManager.UnloadSceneAsync(lastScene); +#if !UNITY_5 sceneLoad.completed += OnSceneUnload; +#else + NetworkingManager.singleton.StartCoroutine(NetworkingManager.singleton.WaitForSceneSwitch(sceneLoad, () => + { + //This block runs when scene switch is done. + OnSceneUnload(sceneLoad); + })); +#endif } private static void OnSceneUnload(AsyncOperation operation)