Skip to content

Commit 0729744

Browse files
Merge branch 'develop-2.0.0' into renovate/develop-2.0.0-package-ci-ubuntu-22.04-4.x
2 parents ce9e6e5 + 6f48d4f commit 0729744

File tree

7 files changed

+391
-404
lines changed

7 files changed

+391
-404
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

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

1111
### Added
1212

13+
- Added stricter checks on `InSpawned` within `NetworkObject`. (#3831)
14+
- Added a new `InvalidOperation` status to `OwnershipRequestStatus`. (#3831)
1315

1416
### Changed
1517

16-
- Improve performance of `NetworkObject`. (#3820)
18+
- Ensure logs in `NetworkObject` log the `NetworkObject.name` wherever possible. (#3831)
19+
- Improved performance of NetworkBehaviour ILPostProcessor by omitting unnecessary type and assembly resolutions. (#3827)
20+
- Improve performance of `NetworkObject`. (#3820, #3831)
1721
- If the Unity Transport Disconnect Timeout is set to 0 in the Editor, the timeout will be entirely disabled. (#3810)
1822

1923
### Deprecated

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

Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -985,18 +985,60 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
985985

986986
foreach (var method in type.Methods)
987987
{
988+
// to reduce unnecessary type resolution, we first check if it can be a serialization extension without type resolution
989+
988990
if (!method.IsStatic)
989991
{
990992
continue;
991993
}
992994

995+
if (method.Name is not (k_WriteValueMethodName or k_ReadValueMethodName))
996+
{
997+
continue;
998+
}
999+
1000+
var mayHaveExtensionAttr = false;
1001+
1002+
foreach (var attr in method.CustomAttributes)
1003+
{
1004+
if (attr.Constructor.DeclaringType.FullName == extensionConstructor.DeclaringType.FullName)
1005+
{
1006+
mayHaveExtensionAttr = true;
1007+
break;
1008+
}
1009+
}
1010+
1011+
if (!mayHaveExtensionAttr)
1012+
{
1013+
continue;
1014+
}
1015+
1016+
var parameters = method.Parameters;
1017+
1018+
if (parameters.Count != 2)
1019+
{
1020+
continue;
1021+
}
1022+
1023+
var firstParameterType = parameters[0].ParameterType;
1024+
1025+
// ReadValueSafe() and WriteValueSafe() can use both by-ref and non-by-ref type for the first parameter type
1026+
var firstParameterElementType = firstParameterType is ByReferenceType byRefType ? byRefType.ElementType : firstParameterType;
1027+
1028+
if (firstParameterElementType.FullName != m_FastBufferWriter_TypeRef.FullName && firstParameterElementType.FullName != m_FastBufferReader_TypeRef.FullName)
1029+
{
1030+
continue;
1031+
}
1032+
9931033
var isExtension = false;
9941034

9951035
foreach (var attr in method.CustomAttributes)
9961036
{
997-
if (attr.Constructor.Resolve() == extensionConstructor.Resolve())
1037+
if (attr.Constructor.DeclaringType.FullName == extensionConstructor.DeclaringType.FullName &&
1038+
attr.Constructor.Resolve() == extensionConstructor.Resolve())
9981039
{
9991040
isExtension = true;
1041+
break;
10001042
}
10011043
}
10021044

@@ -1005,13 +1047,11 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
10051047
continue;
10061048
}
10071049

1008-
var parameters = method.Parameters;
1009-
1010-
if (parameters.Count == 2 && parameters[0].ParameterType.Resolve() == m_FastBufferWriter_TypeRef.MakeByReferenceType().Resolve())
1050+
if (method.Name == k_WriteValueMethodName && firstParameterType.Resolve() == m_FastBufferWriter_TypeRef.MakeByReferenceType().Resolve())
10111051
{
10121052
m_FastBufferWriter_ExtensionMethodRefs.Add(m_MainModule.ImportReference(method));
10131053
}
1014-
else if (parameters.Count == 2 && parameters[0].ParameterType.Resolve() == m_FastBufferReader_TypeRef.MakeByReferenceType().Resolve())
1054+
else if (method.Name == k_ReadValueMethodName && firstParameterType.Resolve() == m_FastBufferReader_TypeRef.MakeByReferenceType().Resolve())
10151055
{
10161056
m_FastBufferReader_ExtensionMethodRefs.Add(m_MainModule.ImportReference(method));
10171057
}
@@ -1861,27 +1901,24 @@ private bool GetWriteMethodForParameter(TypeReference paramType, out MethodRefer
18611901
{
18621902
var parameters = method.Resolve().Parameters;
18631903

1864-
if (method.Name == k_WriteValueMethodName)
1904+
if (parameters[1].IsIn)
18651905
{
1866-
if (parameters[1].IsIn)
1906+
if (((ByReferenceType)parameters[1].ParameterType).ElementType.FullName == paramType.FullName &&
1907+
((ByReferenceType)parameters[1].ParameterType).ElementType.IsArray == paramType.IsArray)
18671908
{
1868-
if (((ByReferenceType)parameters[1].ParameterType).ElementType.FullName == paramType.FullName &&
1869-
((ByReferenceType)parameters[1].ParameterType).ElementType.IsArray == paramType.IsArray)
1870-
{
1871-
methodRef = method;
1872-
m_FastBufferWriter_WriteValue_MethodRefs[assemblyQualifiedName] = methodRef;
1873-
return true;
1874-
}
1909+
methodRef = method;
1910+
m_FastBufferWriter_WriteValue_MethodRefs[assemblyQualifiedName] = methodRef;
1911+
return true;
18751912
}
1876-
else
1913+
}
1914+
else
1915+
{
1916+
if (parameters[1].ParameterType.FullName == paramType.FullName &&
1917+
parameters[1].ParameterType.IsArray == paramType.IsArray)
18771918
{
1878-
if (parameters[1].ParameterType.FullName == paramType.FullName &&
1879-
parameters[1].ParameterType.IsArray == paramType.IsArray)
1880-
{
1881-
methodRef = method;
1882-
m_FastBufferWriter_WriteValue_MethodRefs[assemblyQualifiedName] = methodRef;
1883-
return true;
1884-
}
1919+
methodRef = method;
1920+
m_FastBufferWriter_WriteValue_MethodRefs[assemblyQualifiedName] = methodRef;
1921+
return true;
18851922
}
18861923
}
18871924
}
@@ -2097,8 +2134,7 @@ private bool GetReadMethodForParameter(TypeReference paramType, out MethodRefere
20972134
foreach (var method in m_FastBufferReader_ExtensionMethodRefs)
20982135
{
20992136
var parameters = method.Resolve().Parameters;
2100-
if (method.Name == k_ReadValueMethodName &&
2101-
parameters[1].IsOut &&
2137+
if (parameters[1].IsOut &&
21022138
((ByReferenceType)parameters[1].ParameterType).ElementType.FullName == paramType.FullName &&
21032139
((ByReferenceType)parameters[1].ParameterType).ElementType.IsArray == paramType.IsArray)
21042140
{

com.unity.netcode.gameobjects/Runtime/Components/NetworkTransform.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3719,14 +3719,9 @@ private void InternalInitialization(bool isOwnershipChange = false)
37193719
{
37203720
if (CanCommitToTransform)
37213721
{
3722-
if (NetworkObject.HasParentNetworkObject(transform))
3723-
{
3724-
InLocalSpace = true;
3725-
}
3726-
else
3727-
{
3728-
InLocalSpace = false;
3729-
}
3722+
// If our NetworkObject has a parent NetworkObject, then we are in netcode local space.
3723+
// GetComponentsInParent will get the networkObject on cachedNetworkObject as well, so we have a parent if we have more than one returned NetworkObject.
3724+
InLocalSpace = m_CachedNetworkObject.transform.GetComponentsInParent<NetworkObject>().Length > 1;
37303725
}
37313726

37323727
// Always apply this if SwitchTransformSpaceWhenParented is set.

0 commit comments

Comments
 (0)