@@ -18,6 +18,7 @@ public IEnumerator SetUp()
18
18
// Make sure these static values are reset
19
19
NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnClient = false ;
20
20
NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnServer = false ;
21
+ NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient = false ;
21
22
yield break ;
22
23
}
23
24
@@ -33,12 +34,11 @@ public IEnumerator Teardown()
33
34
}
34
35
NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnClient = false ;
35
36
NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnServer = false ;
37
+ NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient = false ;
36
38
yield break ;
37
39
}
38
40
39
- [ UnityTest ]
40
- [ Description ( "When a network variable is initialized in OnNetworkSpawn on the server, the spawned object's NetworkVariable on the client is initialized with the same value." ) ]
41
- public IEnumerator WhenANetworkVariableIsInitializedInOnNetworkSpawnOnTheServer_TheSpawnedObjectsNetworkVariableOnTheClientIsInitializedWithTheSameValue ( )
41
+ private IEnumerator RunTest ( )
42
42
{
43
43
const int numClients = 1 ;
44
44
Assert . True ( MultiInstanceHelpers . Create ( numClients , out NetworkManager server , out NetworkManager [ ] clients ) ) ;
@@ -95,8 +95,88 @@ public IEnumerator WhenANetworkVariableIsInitializedInOnNetworkSpawnOnTheServer_
95
95
var nextFrameNumber = Time . frameCount + 1 ;
96
96
yield return new WaitUntil ( ( ) => Time . frameCount >= nextFrameNumber ) ;
97
97
}
98
+ }
99
+
100
+ [ UnityTest ]
101
+ [ Description ( "When a network variable is initialized in OnNetworkSpawn on the server, the spawned object's NetworkVariable on the client is initialized with the same value." ) ]
102
+ public IEnumerator WhenANetworkVariableIsInitializedInOnNetworkSpawnOnTheServer_TheSpawnedObjectsNetworkVariableOnTheClientIsInitializedWithTheSameValue ( )
103
+ {
104
+ yield return RunTest ( ) ;
98
105
Assert . IsTrue ( NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnServer ) ;
99
106
Assert . IsTrue ( NetworkVariableInitOnNetworkSpawn . NetworkSpawnCalledOnClient ) ;
100
107
}
108
+
109
+ [ UnityTest ]
110
+ [ Description ( "When a network variable is initialized in OnNetworkSpawn on the server, OnValueChanged is not called" ) ]
111
+ public IEnumerator WhenANetworkVariableIsInitializedInOnNetworkSpawnOnTheServer_OnValueChangedIsNotCalled ( )
112
+ {
113
+ yield return RunTest ( ) ;
114
+ Assert . IsFalse ( NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient ) ;
115
+ }
116
+
117
+ [ UnityTest ]
118
+ [ Description ( "When a network variable is changed just after OnNetworkSpawn on the server, OnValueChanged is called after OnNetworkSpawn" ) ]
119
+ public IEnumerator WhenANetworkVariableIsInitializedJustAfterOnNetworkSpawnOnTheServer_OnValueChangedIsCalledAfterOnNetworkSpawn ( )
120
+ {
121
+ const int numClients = 1 ;
122
+ Assert . True ( MultiInstanceHelpers . Create ( numClients , out NetworkManager server , out NetworkManager [ ] clients ) ) ;
123
+ m_Prefab = new GameObject ( "Object" ) ;
124
+ var networkObject = m_Prefab . AddComponent < NetworkObject > ( ) ;
125
+ m_Prefab . AddComponent < NetworkVariableInitOnNetworkSpawn > ( ) ;
126
+
127
+ // Make it a prefab
128
+ MultiInstanceHelpers . MakeNetworkObjectTestPrefab ( networkObject ) ;
129
+
130
+ var validNetworkPrefab = new NetworkPrefab ( ) ;
131
+ validNetworkPrefab . Prefab = m_Prefab ;
132
+ server . NetworkConfig . NetworkPrefabs . Add ( validNetworkPrefab ) ;
133
+ foreach ( var client in clients )
134
+ {
135
+ client . NetworkConfig . NetworkPrefabs . Add ( validNetworkPrefab ) ;
136
+ }
137
+
138
+ // Start the instances
139
+ if ( ! MultiInstanceHelpers . Start ( true , server , clients ) )
140
+ {
141
+ Debug . LogError ( "Failed to start instances" ) ;
142
+ Assert . Fail ( "Failed to start instances" ) ;
143
+ }
144
+
145
+ // [Client-Side] Wait for a connection to the server
146
+ yield return MultiInstanceHelpers . Run ( MultiInstanceHelpers . WaitForClientsConnected ( clients , null , 512 ) ) ;
147
+
148
+ // [Host-Side] Check to make sure all clients are connected
149
+ yield return MultiInstanceHelpers . Run (
150
+ MultiInstanceHelpers . WaitForClientsConnectedToServer ( server , clients . Length + 1 , null , 512 ) ) ;
151
+
152
+ var serverObject = Object . Instantiate ( m_Prefab , Vector3 . zero , Quaternion . identity ) ;
153
+ NetworkObject serverNetworkObject = serverObject . GetComponent < NetworkObject > ( ) ;
154
+ serverNetworkObject . NetworkManagerOwner = server ;
155
+ serverNetworkObject . Spawn ( ) ;
156
+ serverNetworkObject . GetComponent < NetworkVariableInitOnNetworkSpawn > ( ) . Variable . Value = 10 ;
157
+ Assert . IsFalse ( NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient ) ;
158
+
159
+ // Wait until all objects have spawned.
160
+ //const int expectedNetworkObjects = numClients + 2; // +2 = one for prefab, one for server.
161
+ const int maxFrames = 240 ;
162
+ var doubleCheckTime = Time . realtimeSinceStartup + 5.0f ;
163
+ while ( ! NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient )
164
+ {
165
+ if ( Time . frameCount > maxFrames )
166
+ {
167
+ // This is here in the event a platform is running at a higher
168
+ // frame rate than expected
169
+ if ( doubleCheckTime < Time . realtimeSinceStartup )
170
+ {
171
+ Assert . Fail ( "Did not successfully spawn all expected NetworkObjects" ) ;
172
+ break ;
173
+ }
174
+ }
175
+ var nextFrameNumber = Time . frameCount + 1 ;
176
+ yield return new WaitUntil ( ( ) => Time . frameCount >= nextFrameNumber ) ;
177
+ }
178
+ // Test of ordering is handled by an assert within OnNetworkSpawn
179
+ Assert . IsTrue ( NetworkVariableInitOnNetworkSpawn . OnValueChangedCalledOnClient ) ;
180
+ }
101
181
}
102
182
}
0 commit comments