AdditiveNetworkManager.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Collections;
  2. using UnityEngine;
  3. using UnityEngine.SceneManagement;
  4. /*
  5. Documentation: https://mirror-networking.gitbook.io/docs/components/network-manager
  6. API Reference: https://mirror-networking.com/docs/api/Mirror.NetworkManager.html
  7. */
  8. namespace Mirror.Examples.AdditiveScenes
  9. {
  10. [AddComponentMenu("")]
  11. public class AdditiveNetworkManager : NetworkManager
  12. {
  13. [Tooltip("Trigger Zone Prefab")]
  14. public GameObject Zone;
  15. [Scene]
  16. [Tooltip("Add all sub-scenes to this list")]
  17. public string[] subScenes;
  18. public override void OnStartServer()
  19. {
  20. base.OnStartServer();
  21. // load all subscenes on the server only
  22. StartCoroutine(LoadSubScenes());
  23. // Instantiate Zone Handler on server only
  24. Instantiate(Zone);
  25. }
  26. public override void OnStopServer()
  27. {
  28. StartCoroutine(UnloadScenes());
  29. }
  30. public override void OnStopClient()
  31. {
  32. StartCoroutine(UnloadScenes());
  33. }
  34. IEnumerator LoadSubScenes()
  35. {
  36. Debug.Log("Loading Scenes");
  37. foreach (string sceneName in subScenes)
  38. {
  39. yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
  40. // Debug.Log($"Loaded {sceneName}");
  41. }
  42. }
  43. IEnumerator UnloadScenes()
  44. {
  45. Debug.Log("Unloading Subscenes");
  46. foreach (string sceneName in subScenes)
  47. if (SceneManager.GetSceneByName(sceneName).IsValid() || SceneManager.GetSceneByPath(sceneName).IsValid())
  48. {
  49. yield return SceneManager.UnloadSceneAsync(sceneName);
  50. // Debug.Log($"Unloaded {sceneName}");
  51. }
  52. yield return Resources.UnloadUnusedAssets();
  53. }
  54. }
  55. }