69 lines
1.9 KiB
C#
Raw Permalink Normal View History

2024-02-19 21:00:36 +03:00
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();
}
}
}