@@ -13,6 +13,7 @@ public class ShowHideObject : NetworkBehaviour
1313 public static List < ShowHideObject > ClientTargetedNetworkObjects = new List < ShowHideObject > ( ) ;
1414 public static ulong ClientIdToTarget ;
1515 public static bool Silent ;
16+ public static int ValueAfterOwnershipChange = 0 ;
1617
1718 public static NetworkObject GetNetworkObjectById ( ulong networkObjectId )
1819 {
@@ -57,13 +58,35 @@ public override void OnNetworkDespawn()
5758
5859 public NetworkVariable < int > MyNetworkVariable ;
5960 public NetworkList < int > MyListSetOnSpawn ;
61+ public NetworkVariable < int > MyOwnerReadNetworkVariable ;
62+ static public NetworkManager NetworkManagerOfInterest ;
63+
64+ internal static int GainOwnershipCount = 0 ;
6065
6166 private void Awake ( )
6267 {
68+ // Debug.Log($"Awake {NetworkManager.LocalClientId}");
6369 MyNetworkVariable = new NetworkVariable < int > ( ) ;
6470 MyNetworkVariable . OnValueChanged += Changed ;
6571
6672 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+ }
6790 }
6891
6992 public void Changed ( int before , int after )
@@ -328,5 +351,48 @@ public IEnumerator NetworkHideChangeOwnership()
328351
329352 Assert . True ( ShowHideObject . ClientTargetedNetworkObjects [ 0 ] . OwnerClientId == m_ClientNetworkManagers [ 0 ] . LocalClientId ) ;
330353 }
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+
331397 }
332398}
0 commit comments