@@ -13,6 +13,7 @@ public class ShowHideObject : NetworkBehaviour
13
13
public static List < ShowHideObject > ClientTargetedNetworkObjects = new List < ShowHideObject > ( ) ;
14
14
public static ulong ClientIdToTarget ;
15
15
public static bool Silent ;
16
+ public static int ValueAfterOwnershipChange = 0 ;
16
17
17
18
public static NetworkObject GetNetworkObjectById ( ulong networkObjectId )
18
19
{
@@ -57,13 +58,35 @@ public override void OnNetworkDespawn()
57
58
58
59
public NetworkVariable < int > MyNetworkVariable ;
59
60
public NetworkList < int > MyListSetOnSpawn ;
61
+ public NetworkVariable < int > MyOwnerReadNetworkVariable ;
62
+ static public NetworkManager NetworkManagerOfInterest ;
63
+
64
+ internal static int GainOwnershipCount = 0 ;
60
65
61
66
private void Awake ( )
62
67
{
68
+ // Debug.Log($"Awake {NetworkManager.LocalClientId}");
63
69
MyNetworkVariable = new NetworkVariable < int > ( ) ;
64
70
MyNetworkVariable . OnValueChanged += Changed ;
65
71
66
72
MyListSetOnSpawn = new NetworkList < int > ( ) ;
73
+
74
+ MyOwnerReadNetworkVariable = new NetworkVariable < int > ( readPerm : NetworkVariableReadPermission . Owner ) ;
75
+ MyOwnerReadNetworkVariable . OnValueChanged += OwnerReadChanged ;
76
+ }
77
+
78
+ public override void OnGainedOwnership ( )
79
+ {
80
+ GainOwnershipCount ++ ;
81
+ base . OnGainedOwnership ( ) ;
82
+ }
83
+
84
+ public void OwnerReadChanged ( int before , int after )
85
+ {
86
+ if ( NetworkManager == NetworkManagerOfInterest )
87
+ {
88
+ ValueAfterOwnershipChange = after ;
89
+ }
67
90
}
68
91
69
92
public void Changed ( int before , int after )
@@ -328,5 +351,48 @@ public IEnumerator NetworkHideChangeOwnership()
328
351
329
352
Assert . True ( ShowHideObject . ClientTargetedNetworkObjects [ 0 ] . OwnerClientId == m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
330
353
}
354
+
355
+ [ UnityTest ]
356
+ public IEnumerator NetworkHideChangeOwnershipNotHidden ( )
357
+ {
358
+ ShowHideObject . ClientTargetedNetworkObjects . Clear ( ) ;
359
+ ShowHideObject . ClientIdToTarget = m_ClientNetworkManagers [ 1 ] . LocalClientId ;
360
+ ShowHideObject . Silent = true ;
361
+
362
+ var spawnedObject1 = SpawnObject ( m_PrefabToSpawn , m_ServerNetworkManager ) ;
363
+ m_NetSpawnedObject1 = spawnedObject1 . GetComponent < NetworkObject > ( ) ;
364
+
365
+ // wait for host to have spawned and gained ownership
366
+ while ( ShowHideObject . GainOwnershipCount == 0 )
367
+ {
368
+ yield return new WaitForSeconds ( 0.0f ) ;
369
+ }
370
+
371
+ // change the value
372
+ m_NetSpawnedObject1 . GetComponent < ShowHideObject > ( ) . MyOwnerReadNetworkVariable . Value ++ ;
373
+
374
+ // wait for three ticks
375
+ yield return NetcodeIntegrationTestHelpers . WaitForTicks ( m_ServerNetworkManager , 3 ) ;
376
+
377
+ // check we'll actually be changing owners
378
+ Assert . False ( ShowHideObject . ClientTargetedNetworkObjects [ 0 ] . OwnerClientId == m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
379
+
380
+ // only check for value change on one specific client
381
+ ShowHideObject . NetworkManagerOfInterest = m_ClientNetworkManagers [ 0 ] ;
382
+
383
+ // change ownership
384
+ m_NetSpawnedObject1 . ChangeOwnership ( m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
385
+
386
+ // wait three ticks
387
+ yield return NetcodeIntegrationTestHelpers . WaitForTicks ( m_ServerNetworkManager , 3 ) ;
388
+ yield return NetcodeIntegrationTestHelpers . WaitForTicks ( m_ClientNetworkManagers [ 0 ] , 3 ) ;
389
+
390
+ // verify ownership changed
391
+ Assert . True ( ShowHideObject . ClientTargetedNetworkObjects [ 0 ] . OwnerClientId == m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
392
+
393
+ // verify the expected client got the OnValueChanged. (Only client 1 sets this value)
394
+ Assert . True ( ShowHideObject . ValueAfterOwnershipChange == 1 ) ;
395
+ }
396
+
331
397
}
332
398
}
0 commit comments