1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System.Collections;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- /*
- Documentation: https://mirror-networking.gitbook.io/docs/components/network-manager
- API Reference: https://mirror-networking.com/docs/api/Mirror.NetworkManager.html
- */
- namespace Mirror.Examples.AdditiveScenes
- {
- [AddComponentMenu("")]
- public class AdditiveNetworkManager : NetworkManager
- {
- [Tooltip("Trigger Zone Prefab")]
- public GameObject Zone;
- [Scene]
- [Tooltip("Add all sub-scenes to this list")]
- public string[] subScenes;
- public override void OnStartServer()
- {
- base.OnStartServer();
- // load all subscenes on the server only
- StartCoroutine(LoadSubScenes());
- // Instantiate Zone Handler on server only
- Instantiate(Zone);
- }
- public override void OnStopServer()
- {
- StartCoroutine(UnloadScenes());
- }
- public override void OnStopClient()
- {
- StartCoroutine(UnloadScenes());
- }
- IEnumerator LoadSubScenes()
- {
- Debug.Log("Loading Scenes");
- foreach (string sceneName in subScenes)
- {
- yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
- // Debug.Log($"Loaded {sceneName}");
- }
- }
- IEnumerator UnloadScenes()
- {
- Debug.Log("Unloading Subscenes");
- foreach (string sceneName in subScenes)
- if (SceneManager.GetSceneByName(sceneName).IsValid() || SceneManager.GetSceneByPath(sceneName).IsValid())
- {
- yield return SceneManager.UnloadSceneAsync(sceneName);
- // Debug.Log($"Unloaded {sceneName}");
- }
- yield return Resources.UnloadUnusedAssets();
- }
- }
- }
|