forked from Unity-Technologies/com.unity.netcode.gameobjects
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExitButtonScript.cs
More file actions
91 lines (78 loc) · 2.56 KB
/
ExitButtonScript.cs
File metadata and controls
91 lines (78 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ExitButtonScript : MonoBehaviour
{
[SerializeField]
private MenuReference m_SceneMenuToLoad;
[SerializeField]
private bool m_DestroyNetworkManagerOnExit = true;
private void Start()
{
if (!NetworkManager.Singleton)
{
return;
}
NetworkManager.Singleton.OnServerStopped += OnNetworkManagerStopped;
NetworkManager.Singleton.OnClientStopped += OnNetworkManagerStopped;
NetworkManager.Singleton.OnServerStarted += OnNetworkManagerStarted;
NetworkManager.Singleton.OnClientStarted += OnNetworkManagerStarted;
}
private void OnNetworkManagerStarted()
{
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectCallback;
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectCallback;
}
private void OnClientDisconnectCallback(ulong clientId)
{
var disconnectedReason = "Disconnected from session.";
if (NetworkManager.Singleton && !string.IsNullOrEmpty(NetworkManager.Singleton.DisconnectReason))
{
disconnectedReason = $"{NetworkManager.Singleton.DisconnectReason}";
}
Debug.Log($"[Client-{clientId}] {disconnectedReason}");
}
/// <summary>
/// A very basic way to exit back to the first scene in the build settings
/// </summary>
public void OnExitScene()
{
if (!NetworkManager.Singleton)
{
LoadExitScene();
return;
}
if (NetworkManager.Singleton.IsListening)
{
if (!NetworkManager.Singleton.ShutdownInProgress)
{
NetworkManager.Singleton.Shutdown();
}
}
else
{
LoadExitScene();
}
}
private void LoadExitScene()
{
if (m_DestroyNetworkManagerOnExit)
{
Destroy(NetworkManager.Singleton.gameObject);
}
if (m_SceneMenuToLoad != null && m_SceneMenuToLoad.GetReferencedScenes()[0] != string.Empty)
{
SceneManager.LoadSceneAsync(m_SceneMenuToLoad.GetReferencedScenes()[0], LoadSceneMode.Single);
}
else
{
SceneManager.LoadSceneAsync(0, LoadSceneMode.Single);
}
}
private void OnNetworkManagerStopped(bool obj)
{
NetworkManager.Singleton.OnServerStopped -= OnNetworkManagerStopped;
NetworkManager.Singleton.OnClientStopped -= OnNetworkManagerStopped;
LoadExitScene();
}
}