Skip to content

Commit f47f3d4

Browse files
committed
Most review comments addressed
1 parent e8a661c commit f47f3d4

File tree

4 files changed

+21
-19
lines changed

4 files changed

+21
-19
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3244,6 +3244,8 @@ internal static NetworkObject AddSceneObject(in SceneObject sceneObject, FastBuf
32443244
//Attempt to create a local NetworkObject
32453245
var networkObject = networkManager.SpawnManager.CreateLocalNetworkObject(sceneObject, instantiationDataReader);
32463246

3247+
instantiationDataReader.Dispose();
3248+
32473249
if (networkObject == null)
32483250
{
32493251
// Log the error that the NetworkObject failed to construct

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

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public bool AddHandler(uint globalObjectIdHash, INetworkPrefabInstanceHandler in
120120
public void SetInstantiationData<T>(GameObject gameObject, T instantiationData) where T : struct, INetworkSerializable
121121
{
122122
if (gameObject.TryGetComponent<NetworkObject>(out var networkObject))
123-
SetInstantiationData(networkObject,instantiationData);
123+
SetInstantiationData(networkObject, instantiationData);
124124
}
125125
public void SetInstantiationData<T>(NetworkObject networkObject, T data) where T : struct, INetworkSerializable
126126
{
@@ -238,7 +238,7 @@ public bool RemoveHandler(uint globalObjectIdHash)
238238
m_PrefabInstanceToPrefabAsset.Remove(networkPrefabHashKey);
239239
}
240240

241-
if(m_PrefabAssetToPrefabHandlerWithData.TryGetValue(globalObjectIdHash, out var handlerWithData))
241+
if (m_PrefabAssetToPrefabHandlerWithData.TryGetValue(globalObjectIdHash, out var handlerWithData))
242242
{
243243
m_PrefabAssetToPrefabHandlerWithData.Remove(globalObjectIdHash);
244244
}
@@ -296,11 +296,7 @@ internal FastBufferReader GetInstantiationDataReader(uint objectHash, FastBuffer
296296

297297
fastBufferReader.ReadValueSafe(out int dataSize);
298298
int dataStartPos = fastBufferReader.Position;
299-
unsafe
300-
{
301-
byte* ptr = fastBufferReader.GetUnsafePtr() + dataStartPos;
302-
return new FastBufferReader(ptr, Collections.Allocator.None, dataSize);
303-
}
299+
return new FastBufferReader(fastBufferReader, Collections.Allocator.Temp, dataSize, dataStartPos);
304300
}
305301

306302
/// <summary>
@@ -343,21 +339,15 @@ internal NetworkObject HandleNetworkPrefabSpawn(uint networkPrefabAssetHash, ulo
343339
else
344340
{
345341
if (m_PrefabAssetToPrefabHandler.TryGetValue(networkPrefabAssetHash, out var prefabInstanceHandler))
346-
networkObjectInstance = prefabInstanceHandler.Instantiate(ownerClientId, position, rotation);
342+
networkObjectInstance = prefabInstanceHandler.Instantiate(ownerClientId, position, rotation);
347343
}
348344
//Now we must make sure this alternate PrefabAsset spawned in place of the prefab asset with the networkPrefabAssetHash (GlobalObjectIdHash)
349345
//is registered and linked to the networkPrefabAssetHash so during the HandleNetworkPrefabDestroy process we can identify the alternate prefab asset.
350-
if (networkObjectInstance != null)
351-
RegisterPrefabInstance(networkObjectInstance, networkPrefabAssetHash);
352-
return networkObjectInstance;
353-
}
354-
355-
private void RegisterPrefabInstance(NetworkObject networkObjectInstance, uint networkPrefabAssetHash)
356-
{
357346
if (networkObjectInstance != null && !m_PrefabInstanceToPrefabAsset.ContainsKey(networkObjectInstance.GlobalObjectIdHash))
358347
{
359348
m_PrefabInstanceToPrefabAsset.Add(networkObjectInstance.GlobalObjectIdHash, networkPrefabAssetHash);
360349
}
350+
return networkObjectInstance;
361351
}
362352

363353
/// <summary>
@@ -403,9 +393,9 @@ public GameObject GetNetworkPrefabOverride(GameObject gameObject)
403393
{
404394
case NetworkPrefabOverride.Hash:
405395
case NetworkPrefabOverride.Prefab:
406-
{
407-
return m_NetworkManager.NetworkConfig.Prefabs.NetworkPrefabOverrideLinks[networkObject.GlobalObjectIdHash].OverridingTargetPrefab;
408-
}
396+
{
397+
return m_NetworkManager.NetworkConfig.Prefabs.NetworkPrefabOverrideLinks[networkObject.GlobalObjectIdHash].OverridingTargetPrefab;
398+
}
409399
}
410400
}
411401
}
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@ public abstract class NetworkPrefabInstanceHandlerWithData<T> : INetworkPrefabIn
1919

2020
NetworkObject INetworkPrefabInstanceHandlerWithData.Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, FastBufferReader reader)
2121
{
22+
var startPosition = reader.Position;
2223
reader.ReadValueSafe(out T _payload);
23-
return Instantiate(ownerClientId, position, rotation, _payload);
24+
var length = reader.Position - startPosition;
25+
26+
NetworkObject networkObject = Instantiate(ownerClientId, position, rotation, _payload);
27+
reader.Seek(startPosition);
28+
if (networkObject.InstantiationData == null || networkObject.InstantiationData.Length != length)
29+
{
30+
networkObject.InstantiationData = new byte[length];
31+
}
32+
reader.ReadBytesSafe(ref networkObject.InstantiationData, length);
33+
return networkObject;
2434
}
2535

2636
NetworkObject INetworkPrefabInstanceHandler.Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation) => Instantiate(ownerClientId, position, rotation, default);

0 commit comments

Comments
 (0)