5
5
6
6
namespace Unity . Multiplayer . Samples . Utilities
7
7
{
8
- public class SceneLoaderWrapper : NetworkBehaviour
8
+ public class SceneLoaderWrapper : MonoBehaviour
9
9
{
10
10
/// <summary>
11
11
/// Manages a loading screen by wrapping around scene management APIs. It loads scene using the SceneManager,
@@ -16,6 +16,9 @@ public class SceneLoaderWrapper : NetworkBehaviour
16
16
[ SerializeField ]
17
17
ClientLoadingScreen m_ClientLoadingScreen ;
18
18
19
+ [ SerializeField ]
20
+ NetworkManager m_NetworkManager ;
21
+
19
22
public static SceneLoaderWrapper Instance { get ; private set ; }
20
23
21
24
public void Awake ( )
@@ -36,14 +39,13 @@ void Start()
36
39
SceneManager . sceneLoaded += OnSceneLoaded ;
37
40
}
38
41
39
- public override void OnDestroy ( )
42
+ public void OnDestroy ( )
40
43
{
41
- if ( NetworkManager != null && NetworkManager . SceneManager != null )
44
+ if ( m_NetworkManager != null && m_NetworkManager . SceneManager != null )
42
45
{
43
- NetworkManager . SceneManager . OnSceneEvent -= OnSceneEvent ;
46
+ m_NetworkManager . SceneManager . OnSceneEvent -= OnSceneEvent ;
44
47
}
45
48
SceneManager . sceneLoaded -= OnSceneLoaded ;
46
- base . OnDestroy ( ) ;
47
49
}
48
50
49
51
/// <summary>
@@ -52,9 +54,9 @@ public override void OnDestroy()
52
54
/// </summary>
53
55
public void AddOnSceneEventCallback ( )
54
56
{
55
- if ( NetworkManager != null && NetworkManager . SceneManager != null && NetworkManager . NetworkConfig . EnableSceneManagement )
57
+ if ( m_NetworkManager != null && m_NetworkManager . SceneManager != null && m_NetworkManager . NetworkConfig . EnableSceneManagement )
56
58
{
57
- NetworkManager . SceneManager . OnSceneEvent += OnSceneEvent ;
59
+ m_NetworkManager . SceneManager . OnSceneEvent += OnSceneEvent ;
58
60
}
59
61
}
60
62
@@ -67,12 +69,12 @@ public void AddOnSceneEventCallback()
67
69
/// <param name="loadSceneMode">If LoadSceneMode.Single then all current Scenes will be unloaded before loading.</param>
68
70
public void LoadScene ( string sceneName , LoadSceneMode loadSceneMode = LoadSceneMode . Single )
69
71
{
70
- if ( NetworkManager != null && NetworkManager . IsListening && NetworkManager . NetworkConfig . EnableSceneManagement )
72
+ if ( m_NetworkManager != null && m_NetworkManager . IsListening && m_NetworkManager . NetworkConfig . EnableSceneManagement )
71
73
{
72
- if ( NetworkManager . IsServer )
74
+ if ( m_NetworkManager . IsServer )
73
75
{
74
76
// If is active server and NetworkManager uses scene management, load scene using NetworkManager's SceneManager
75
- NetworkManager . SceneManager . LoadScene ( sceneName , loadSceneMode ) ;
77
+ m_NetworkManager . SceneManager . LoadScene ( sceneName , loadSceneMode ) ;
76
78
}
77
79
}
78
80
else
@@ -88,20 +90,20 @@ public void LoadScene(string sceneName, LoadSceneMode loadSceneMode = LoadSceneM
88
90
89
91
void OnSceneLoaded ( Scene scene , LoadSceneMode loadSceneMode )
90
92
{
91
- if ( NetworkManager == null || ! NetworkManager . IsListening || ! NetworkManager . NetworkConfig . EnableSceneManagement )
93
+ if ( m_NetworkManager == null || ! m_NetworkManager . IsListening || ! m_NetworkManager . NetworkConfig . EnableSceneManagement )
92
94
{
93
95
m_ClientLoadingScreen . StopLoadingScreen ( ) ;
94
96
}
95
97
}
96
98
97
99
void OnSceneEvent ( SceneEvent sceneEvent )
98
100
{
99
- switch ( sceneEvent . SceneEventType )
101
+ // Only executes on client
102
+ if ( m_NetworkManager . IsClient )
100
103
{
101
- case SceneEventType . Load : // Server told client to load a scene
102
- // Only executes on client
103
- if ( IsClient )
104
- {
104
+ switch ( sceneEvent . SceneEventType )
105
+ {
106
+ case SceneEventType . Load : // Server told client to load a scene
105
107
// Only start a new loading screen if scene loaded in Single mode, else simply update
106
108
if ( sceneEvent . LoadSceneMode == LoadSceneMode . Single )
107
109
{
@@ -111,30 +113,16 @@ void OnSceneEvent(SceneEvent sceneEvent)
111
113
{
112
114
m_ClientLoadingScreen . UpdateLoadingScreen ( sceneEvent . SceneName , sceneEvent . AsyncOperation ) ;
113
115
}
114
- }
115
- break ;
116
- case SceneEventType . LoadEventCompleted : // Server told client that all clients finished loading a scene
117
- // Only executes on client
118
- if ( IsClient )
119
- {
116
+ break ;
117
+ case SceneEventType . LoadEventCompleted : // Server told client that all clients finished loading a scene
120
118
m_ClientLoadingScreen . StopLoadingScreen ( ) ;
121
- }
122
- break ;
123
- case SceneEventType . SynchronizeComplete : // Client told server that they finished synchronizing
124
- // Only executes on server
125
- if ( IsServer )
126
- {
119
+ break ;
120
+ case SceneEventType . SynchronizeComplete : // Client told server that they finished synchronizing
127
121
// Send client RPC to make sure the client stops the loading screen after the server handles what it needs to after the client finished synchronizing
128
- StopLoadingScreenClientRpc ( new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new [ ] { sceneEvent . ClientId } } } ) ;
129
- }
130
- break ;
122
+ m_ClientLoadingScreen . StopLoadingScreen ( ) ;
123
+ break ;
124
+ }
131
125
}
132
126
}
133
-
134
- [ ClientRpc ]
135
- void StopLoadingScreenClientRpc ( ClientRpcParams clientRpcParams = default )
136
- {
137
- m_ClientLoadingScreen . StopLoadingScreen ( ) ;
138
- }
139
127
}
140
128
}
0 commit comments