Skip to content

Commit e696fa8

Browse files
authored
fix: Conditional compilation for new NativeList APIs (#2578)
1 parent 3054af6 commit e696fa8

15 files changed

+320
-12
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Additional documentation and release notes are available at [Multiplayer Documen
1010

1111
### Added
1212

13-
- Added support for serializing `NativeArray<>` and `NativeList<>` in `FastBufferReader`/`FastBufferWriter`, `BufferSerializer`, `NetworkVariable`, and RPCs. (#2375)
13+
- Added support for serializing `NativeArray<>` and `NativeList<>` in `FastBufferReader`/`FastBufferWriter`, `BufferSerializer`, `NetworkVariable`, and RPCs. (To use `NativeList<>`, add `UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT` to your Scripting Define Symbols in `Project Settings > Player`) (#2375)
1414
- The location of the automatically-created default network prefab list can now be configured (#2544)
1515
- Added: Message size limits (max single message and max fragmented message) can now be set using NetworkManager.SetMaxSingleMessageSize() and NetworkManager.SetMaxFragmentedMessageSize() for transports that don't work with the default values (#2530)
1616
- Added `NetworkObject.SpawnWithObservers` property (default is true) that when set to false will spawn a `NetworkObject` with no observers and will not be spawned on any client until `NetworkObject.NetworkShow` is invoked. (#2568)

com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ private void CreateNetworkVariableTypeInitializers(AssemblyDefinition assembly)
216216
}
217217
equalityMethod.GenericArguments.Add(wrappedType);
218218
}
219+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
219220
else if (type.Resolve().FullName == "Unity.Collections.NativeList`1")
220221
{
221222
var wrappedType = ((GenericInstanceType)type).GenericArguments[0];
@@ -247,6 +248,7 @@ private void CreateNetworkVariableTypeInitializers(AssemblyDefinition assembly)
247248
}
248249
equalityMethod.GenericArguments.Add(wrappedType);
249250
}
251+
#endif
250252
else if (type.IsValueType)
251253
{
252254
if (type.HasInterface(typeof(INetworkSerializeByMemcpy).FullName) || type.Resolve().IsEnum || IsMemcpyableType(type))
@@ -367,21 +369,31 @@ private void CreateNetworkVariableTypeInitializers(AssemblyDefinition assembly)
367369
private TypeReference m_ClientRpcParams_TypeRef;
368370
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedByMemcpy_MethodRef;
369371
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedByMemcpyArray_MethodRef;
372+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
370373
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedByMemcpyList_MethodRef;
374+
#endif
371375
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializable_MethodRef;
372376
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializableArray_MethodRef;
377+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
373378
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializableList_MethodRef;
379+
#endif
374380
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_ManagedINetworkSerializable_MethodRef;
375381
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_FixedString_MethodRef;
376382
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_FixedStringArray_MethodRef;
383+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
377384
private MethodReference m_NetworkVariableSerializationTypes_InitializeSerializer_FixedStringList_MethodRef;
385+
#endif
378386
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_ManagedIEquatable_MethodRef;
379387
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedIEquatable_MethodRef;
380388
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedIEquatableArray_MethodRef;
389+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
381390
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedIEquatableList_MethodRef;
391+
#endif
382392
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEquals_MethodRef;
383393
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEqualsArray_MethodRef;
394+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
384395
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEqualsList_MethodRef;
396+
#endif
385397
private MethodReference m_NetworkVariableSerializationTypes_InitializeEqualityChecker_ManagedClassEquals_MethodRef;
386398

387399
private MethodReference m_ExceptionCtorMethodReference;
@@ -836,18 +848,24 @@ private bool ImportReferences(ModuleDefinition moduleDefinition)
836848
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpyArray):
837849
m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedByMemcpyArray_MethodRef = method;
838850
break;
851+
852+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
839853
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpyList):
840854
m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedByMemcpyList_MethodRef = method;
841855
break;
856+
#endif
842857
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializable):
843858
m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializable_MethodRef = method;
844859
break;
845860
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializableArray):
846861
m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializableArray_MethodRef = method;
847862
break;
863+
864+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
848865
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializableList):
849866
m_NetworkVariableSerializationTypes_InitializeSerializer_UnmanagedINetworkSerializableList_MethodRef = method;
850867
break;
868+
#endif
851869
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_ManagedINetworkSerializable):
852870
m_NetworkVariableSerializationTypes_InitializeSerializer_ManagedINetworkSerializable_MethodRef = method;
853871
break;
@@ -857,9 +875,13 @@ private bool ImportReferences(ModuleDefinition moduleDefinition)
857875
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_FixedStringArray):
858876
m_NetworkVariableSerializationTypes_InitializeSerializer_FixedStringArray_MethodRef = method;
859877
break;
878+
879+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
860880
case nameof(NetworkVariableSerializationTypes.InitializeSerializer_FixedStringList):
861881
m_NetworkVariableSerializationTypes_InitializeSerializer_FixedStringList_MethodRef = method;
862882
break;
883+
#endif
884+
863885
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_ManagedIEquatable):
864886
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_ManagedIEquatable_MethodRef = method;
865887
break;
@@ -869,18 +891,23 @@ private bool ImportReferences(ModuleDefinition moduleDefinition)
869891
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatableArray):
870892
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedIEquatableArray_MethodRef = method;
871893
break;
894+
895+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
872896
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatableList):
873897
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedIEquatableList_MethodRef = method;
874898
break;
899+
#endif
875900
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals):
876901
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEquals_MethodRef = method;
877902
break;
878903
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEqualsArray):
879904
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEqualsArray_MethodRef = method;
880905
break;
906+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
881907
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEqualsList):
882908
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_UnmanagedValueEqualsList_MethodRef = method;
883909
break;
910+
#endif
884911
case nameof(NetworkVariableSerializationTypes.InitializeEqualityChecker_ManagedClassEquals):
885912
m_NetworkVariableSerializationTypes_InitializeEqualityChecker_ManagedClassEquals_MethodRef = method;
886913
break;
@@ -1366,7 +1393,11 @@ private MethodReference GetFastBufferWriterWriteMethod(string name, TypeReferenc
13661393
}
13671394
if (method.GenericParameters[0].HasConstraints)
13681395
{
1369-
if (paramType.IsGenericInstance && (paramType.Resolve().FullName == "Unity.Collections.NativeList`1" || paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
1396+
if (paramType.IsGenericInstance && (
1397+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
1398+
paramType.Resolve().FullName == "Unity.Collections.NativeList`1" ||
1399+
#endif
1400+
paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
13701401
{
13711402
if (method.Parameters[0].ParameterType.Resolve() != paramType.Resolve())
13721403
{
@@ -1408,7 +1439,11 @@ private MethodReference GetFastBufferWriterWriteMethod(string name, TypeReferenc
14081439
{
14091440
var instanceMethod = new GenericInstanceMethod(method);
14101441

1411-
if (paramType.IsGenericInstance && (paramType.Resolve().FullName == "Unity.Collections.NativeList`1" || paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
1442+
if (paramType.IsGenericInstance && (
1443+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
1444+
paramType.Resolve().FullName == "Unity.Collections.NativeList`1" ||
1445+
#endif
1446+
paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
14121447
{
14131448
var wrappedType = ((GenericInstanceType)paramType).GenericArguments[0];
14141449
instanceMethod.GenericArguments.Add(wrappedType);
@@ -1559,7 +1594,11 @@ private MethodReference GetFastBufferReaderReadMethod(string name, TypeReference
15591594
{
15601595
continue;
15611596
}
1562-
if (paramType.IsGenericInstance && (paramType.Resolve().FullName == "Unity.Collections.NativeList`1" || paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
1597+
if (paramType.IsGenericInstance && (
1598+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
1599+
paramType.Resolve().FullName == "Unity.Collections.NativeList`1" ||
1600+
#endif
1601+
paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
15631602
{
15641603
if (method.Name == "OnSendGlobalCounterClientRpc")
15651604
{
@@ -1616,7 +1655,11 @@ private MethodReference GetFastBufferReaderReadMethod(string name, TypeReference
16161655
if (meetsConstraints)
16171656
{
16181657
var instanceMethod = new GenericInstanceMethod(method);
1619-
if (paramType.IsGenericInstance && (paramType.Resolve().FullName == "Unity.Collections.NativeList`1" || paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
1658+
if (paramType.IsGenericInstance && (
1659+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
1660+
paramType.Resolve().FullName == "Unity.Collections.NativeList`1" ||
1661+
#endif
1662+
paramType.Resolve().FullName == "Unity.Collections.NativeArray`1"))
16201663
{
16211664
var wrappedType = ((GenericInstanceType)paramType).GenericArguments[0];
16221665
instanceMethod.GenericArguments.Add(wrappedType);
@@ -1691,11 +1734,14 @@ private bool GetReadMethodForParameter(TypeReference paramType, out MethodRefere
16911734
}
16921735

16931736
MethodReference typeMethod;
1737+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
16941738
if (paramType.Resolve().FullName == "Unity.Collections.NativeList`1")
16951739
{
16961740
typeMethod = GetFastBufferReaderReadMethod(k_ReadValueInPlaceMethodName, paramType);
16971741
}
1698-
else if (paramType.Resolve().FullName == "Unity.Collections.NativeArray`1")
1742+
else
1743+
#endif
1744+
if (paramType.Resolve().FullName == "Unity.Collections.NativeArray`1")
16991745
{
17001746
typeMethod = GetFastBufferReaderReadMethod(k_ReadValueTempMethodName, paramType);
17011747
}
@@ -2430,6 +2476,7 @@ private MethodDefinition GenerateStaticHandler(MethodDefinition methodDefinition
24302476
processor.Emit(OpCodes.Brfalse, jumpInstruction);
24312477
}
24322478

2479+
#if UNITY_NETCODE_NATIVE_COLLECTION_SUPPORT
24332480
if (paramType.IsGenericInstance && paramType.Resolve().FullName == "Unity.Collections.NativeList`1")
24342481
{
24352482
// var list = NetworkBehaviour.__createNativeList<T>();
@@ -2449,6 +2496,7 @@ private MethodDefinition GenerateStaticHandler(MethodDefinition methodDefinition
24492496
processor.Emit(OpCodes.Call, method);
24502497
processor.Emit(OpCodes.Stloc, localIndex);
24512498
}
2499+
#endif
24522500

24532501
var foundMethodRef = GetReadMethodForParameter(paramType, out var methodRef);
24542502
if (foundMethodRef)

0 commit comments

Comments
 (0)