Skip to content

Commit 8c8354e

Browse files
fix: OwnedObjects not being added to when using ChangeOwnership (backport) (#1731)
* fix: OwnedObjects not being added to when using ChangeOwnership * update `CHANGELOG.md` Co-authored-by: Noel Stephens <noel.stephens@unity3d.com>
1 parent 6c83b4c commit 8c8354e

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Additional documentation and release notes are available at [Multiplayer Documen
2525
- Fixed error when serializing ConnectionApprovalMessage with scene management disabled when one or more objects is hidden via the CheckObjectVisibility delegate (#1720)
2626
- Fixed CheckObjectVisibility delegate not being properly invoked for connecting clients when Scene Management is enabled. (#1680)
2727
- Fixed NetworkList to properly call INetworkSerializable's NetworkSerialize() method (#1682)
28+
- Fixed OwnedObjects not being properly modified when using ChangeOwnership (#1731)
2829

2930
## [1.0.0-pre.5] - 2022-01-26
3031

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,10 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId)
280280

281281
networkObject.OwnerClientId = clientId;
282282

283+
if (TryGetNetworkClient(clientId, out NetworkClient newNetworkClient))
284+
{
285+
newNetworkClient.OwnedObjects.Add(networkObject);
286+
}
283287

284288
var message = new ChangeOwnershipMessage
285289
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using System.Collections;
2+
using System.Linq;
3+
using NUnit.Framework;
4+
using UnityEngine;
5+
using UnityEngine.TestTools;
6+
7+
namespace Unity.Netcode.RuntimeTests
8+
{
9+
public class NetworkObjectNetworkClientOwnedObjectsTests
10+
{
11+
[UnityTest]
12+
public IEnumerator ChangeOwnershipOwnedObjectsAddTest()
13+
{
14+
// create server and client instances
15+
MultiInstanceHelpers.Create(1, out NetworkManager server, out NetworkManager[] clients);
16+
17+
// create prefab
18+
var gameObject = new GameObject("ClientOwnedObject");
19+
var networkObject = gameObject.AddComponent<NetworkObject>();
20+
MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject);
21+
22+
server.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab()
23+
{
24+
Prefab = gameObject
25+
});
26+
27+
for (int i = 0; i < clients.Length; i++)
28+
{
29+
clients[i].NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab()
30+
{
31+
Prefab = gameObject
32+
});
33+
}
34+
35+
// start server and connect clients
36+
MultiInstanceHelpers.Start(false, server, clients);
37+
38+
// wait for connection on client side
39+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientsConnected(clients));
40+
41+
// wait for connection on server side
42+
yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientConnectedToServer(server));
43+
44+
NetworkObject serverObject = Object.Instantiate(gameObject).GetComponent<NetworkObject>();
45+
serverObject.NetworkManagerOwner = server;
46+
serverObject.Spawn();
47+
48+
// The object is owned by server
49+
Assert.False(server.ConnectedClients[clients[0].LocalClientId].OwnedObjects.Any(x => x.NetworkObjectId == serverObject.NetworkObjectId));
50+
51+
// Change the ownership
52+
serverObject.ChangeOwnership(clients[0].LocalClientId);
53+
54+
// Ensure it's now added to the list
55+
Assert.True(server.ConnectedClients[clients[0].LocalClientId].OwnedObjects.Any(x => x.NetworkObjectId == serverObject.NetworkObjectId));
56+
57+
MultiInstanceHelpers.Destroy();
58+
}
59+
}
60+
}

com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectNetworkClientOwnedObjectsTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)