Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,11 @@ private static void ScenesInBuildActiveSceneCheck()
var scenesList = EditorBuildSettings.scenes.ToList();
var activeScene = SceneManager.GetActiveScene();
var isSceneInBuildSettings = scenesList.Count((c) => c.path == activeScene.path) == 1;
#if USE_FINDOBJECTSBYTYPE
Comment thread
NoelStephensUnity marked this conversation as resolved.
Outdated
var networkManager = Object.FindFirstObjectByType<NetworkManager>();
#else
var networkManager = Object.FindObjectOfType<NetworkManager>();
#endif
if (!isSceneInBuildSettings && networkManager != null)
{
if (networkManager.NetworkConfig != null && networkManager.NetworkConfig.EnableSceneManagement)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.multiplayer.tools",
Expand All @@ -33,6 +39,12 @@
"name": "com.unity.modules.physics2d",
"expression": "",
"define": "COM_UNITY_MODULES_PHYSICS2D"
},
{
"name": "Unity",
"expression": "2023.1.0a21",
"define": "USE_FINDOBJECTSBYTYPE"
}
]
}
],
"noEngineReferences": false
}
Original file line number Diff line number Diff line change
Expand Up @@ -2018,7 +2018,11 @@ internal void PopulateScenePlacedObjects(Scene sceneToFilterBy, bool clearSceneP
ScenePlacedObjects.Clear();
}

#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>();
#endif

// Just add every NetworkObject found that isn't already in the list
// With additive scenes, we can have multiple in-scene placed NetworkObjects with the same GlobalObjectIdHash value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,12 @@ internal void AddDespawnedInSceneNetworkObjects()
{
m_DespawnedInSceneObjectsSync.Clear();
// Find all active and non-active in-scene placed NetworkObjects
#if USE_FINDOBJECTSBYTYPE
var inSceneNetworkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(UnityEngine.FindObjectsInactive.Include, UnityEngine.FindObjectsSortMode.None).Where((c) => c.NetworkManager == m_NetworkManager);
#else
var inSceneNetworkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>(includeInactive: true).Where((c) => c.NetworkManager == m_NetworkManager);

#endif
foreach (var sobj in inSceneNetworkObjects)
{
if (sobj.IsSceneObject.HasValue && sobj.IsSceneObject.Value && !sobj.IsSpawned)
Expand Down Expand Up @@ -657,7 +662,11 @@ internal void ReadClientReSynchronizationData(FastBufferReader reader)

if (networkObjectsToRemove.Length > 0)
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(UnityEngine.FindObjectsSortMode.None);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>();
#endif
var networkObjectIdToNetworkObject = new Dictionary<ulong, NetworkObject>();
foreach (var networkObject in networkObjects)
{
Expand Down Expand Up @@ -785,8 +794,14 @@ private void DeserializeDespawnedInScenePlacedNetworkObjects()
var objectRelativeScene = m_NetworkManager.SceneManager.ScenesLoaded[localSceneHandle];

// Find all active and non-active in-scene placed NetworkObjects
#if USE_FINDOBJECTSBYTYPE
var inSceneNetworkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(UnityEngine.FindObjectsInactive.Include, UnityEngine.FindObjectsSortMode.None).Where((c) =>
c.GetSceneOriginHandle() == localSceneHandle && (c.IsSceneObject != false)).ToList();
#else
var inSceneNetworkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>(includeInactive: true).Where((c) =>
c.GetSceneOriginHandle() == localSceneHandle && (c.IsSceneObject != false)).ToList();
#endif


foreach (var inSceneObject in inSceneNetworkObjects)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,11 @@ internal void DespawnObject(NetworkObject networkObject, bool destroyObject = fa
// Makes scene objects ready to be reused
internal void ServerResetShudownStateForSceneObjects()
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsSceneObject != null && c.IsSceneObject == true);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsSceneObject != null && c.IsSceneObject == true);
#endif
foreach (var sobj in networkObjects)
{
sobj.IsSpawned = false;
Expand Down Expand Up @@ -689,7 +693,11 @@ internal void ServerDestroySpawnedSceneObjects()

internal void DespawnAndDestroyNetworkObjects()
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>();
#endif

for (int i = 0; i < networkObjects.Length; i++)
{
Expand Down Expand Up @@ -719,7 +727,11 @@ internal void DespawnAndDestroyNetworkObjects()

internal void DestroySceneObjects()
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>();
#endif

for (int i = 0; i < networkObjects.Length; i++)
{
Expand All @@ -746,7 +758,11 @@ internal void DestroySceneObjects()

internal void ServerSpawnSceneObjectsOnStartSweep()
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = UnityEngine.Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None);
#else
var networkObjects = UnityEngine.Object.FindObjectsOfType<NetworkObject>();
#endif
var networkObjectsToSpawn = new List<NetworkObject>();

for (int i = 0; i < networkObjects.Length; i++)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@
"Unity.Collections",
"Unity.Burst"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": true,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.multiplayer.tools",
Expand All @@ -35,6 +41,12 @@
"name": "com.unity.transport",
"expression": "2.0.0-exp",
"define": "UTP_TRANSPORT_2_0_ABOVE"
},
{
"name": "Unity",
"expression": "2023.1.0a21",
"define": "USE_FINDOBJECTSBYTYPE"
}
]
}
],
"noEngineReferences": false
}
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,12 @@ private static void SceneManager_sceneLoaded(Scene scene, LoadSceneMode loadScen
private static void ProcessInSceneObjects(Scene scene, NetworkManager networkManager)
{
// Get all in-scene placed NeworkObjects that were instantiated when this scene loaded
#if USE_FINDOBJECTSBYTYPE
var inSceneNetworkObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsSceneObject != false && c.GetSceneOriginHandle() == scene.handle);
#else
var inSceneNetworkObjects = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsSceneObject != false && c.GetSceneOriginHandle() == scene.handle);
#endif

foreach (var sobj in inSceneNetworkObjects)
{
if (sobj.NetworkManagerOwner != networkManager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,8 +437,13 @@ private void ClientNetworkManagerPostStart(NetworkManager networkManager)
m_PlayerNetworkObjects.Add(networkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
}

#if USE_FINDOBJECTSBYTYPE
// Get all player instances for the current client NetworkManager instance
var clientPlayerClones = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsPlayerObject && c.OwnerClientId == networkManager.LocalClientId).ToList();
#else
// Get all player instances for the current client NetworkManager instance
var clientPlayerClones = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsPlayerObject && c.OwnerClientId == networkManager.LocalClientId).ToList();
#endif
// Add this player instance to each client player entry
foreach (var playerNetworkObject in clientPlayerClones)
{
Expand All @@ -452,9 +457,13 @@ private void ClientNetworkManagerPostStart(NetworkManager networkManager)
m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].Add(networkManager.LocalClientId, playerNetworkObject);
}
}

// For late joining clients, add the remaining (if any) cloned versions of each client's player
#if USE_FINDOBJECTSBYTYPE
// Get all player instances for the current client NetworkManager instance
clientPlayerClones = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsPlayerObject && c.NetworkManager == networkManager).ToList();
#else
// Get all player instances for the current client NetworkManager instance
clientPlayerClones = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsPlayerObject && c.NetworkManager == networkManager).ToList();
#endif
foreach (var playerNetworkObject in clientPlayerClones)
{
if (!m_PlayerNetworkObjects[networkManager.LocalClientId].ContainsKey(playerNetworkObject.OwnerClientId))
Expand All @@ -474,7 +483,12 @@ protected void ClientNetworkManagerPostStartInit()
}
if (m_UseHost)
{
#if USE_FINDOBJECTSBYTYPE
var clientSideServerPlayerClones = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsPlayerObject && c.OwnerClientId == m_ServerNetworkManager.LocalClientId);
#else
var clientSideServerPlayerClones = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsPlayerObject && c.OwnerClientId == m_ServerNetworkManager.LocalClientId);
#endif

foreach (var playerNetworkObject in clientSideServerPlayerClones)
{
// When the server is not the host this needs to be done
Expand Down Expand Up @@ -530,8 +544,13 @@ protected IEnumerator StartServerAndClients()

if (m_UseHost || m_ServerNetworkManager.IsHost)
{
#if USE_FINDOBJECTSBYTYPE
// Add the server player instance to all m_ClientSidePlayerNetworkObjects entries
var serverPlayerClones = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None).Where((c) => c.IsPlayerObject && c.OwnerClientId == m_ServerNetworkManager.LocalClientId);
#else
// Add the server player instance to all m_ClientSidePlayerNetworkObjects entries
var serverPlayerClones = Object.FindObjectsOfType<NetworkObject>().Where((c) => c.IsPlayerObject && c.OwnerClientId == m_ServerNetworkManager.LocalClientId);
#endif
foreach (var playerNetworkObject in serverPlayerClones)
{
if (!m_PlayerNetworkObjects.ContainsKey(playerNetworkObject.NetworkManager.LocalClientId))
Expand Down Expand Up @@ -721,7 +740,11 @@ protected virtual bool CanDestroyNetworkObject(NetworkObject networkObject)
/// </summary>
protected void DestroySceneNetworkObjects()
{
#if USE_FINDOBJECTSBYTYPE
var networkObjects = Object.FindObjectsByType<NetworkObject>(FindObjectsSortMode.None);
#else
var networkObjects = Object.FindObjectsOfType<NetworkObject>();
#endif
foreach (var networkObject in networkObjects)
{
// This can sometimes be null depending upon order of operations
Expand All @@ -738,7 +761,21 @@ protected void DestroySceneNetworkObjects()
}
if (CanDestroyNetworkObject(networkObject))
{
networkObject.NetworkManagerOwner = m_ServerNetworkManager;
// Note: All of this is for 2023.1.0a21 related timing issues (possibly related to the FindObjectsByType update to replace FindObjectsOfType)
if (m_ServerNetworkManager != null && !m_ServerNetworkManager.IsServer)
{
// Make sure the owner NetworkManager is considered to be
// the server to avoid errors in NetworkObject.OnDestroy
m_ServerNetworkManager.IsServer = true;
networkObject.NetworkManagerOwner = m_ServerNetworkManager;
} // Just in case we have a null m_ServerNetworkManager but the singleton is not null
else if (m_ServerNetworkManager == null && NetworkManager.Singleton != null)
{
// Make whatever the singleton is a server to avoid the NetworkObject "client is destroying a NetworkObject exception"
NetworkManager.Singleton.IsServer = true;
networkObject.NetworkManagerOwner = NetworkManager.Singleton;
}

// Destroy the GameObject that holds the NetworkObject component
Object.DestroyImmediate(networkObject.gameObject);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@
"Unity.Multiplayer.MetricTypes",
"Unity.Multiplayer.NetStats",
"Unity.Multiplayer.Tools.MetricTypes",
"Unity.Multiplayer.Tools.NetStats"
"Unity.Multiplayer.Tools.NetStats",
"UnityEngine.TestRunner",
"UnityEditor.TestRunner"
],
"optionalUnityReferences": [
"TestAssemblies"
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": true,
"precompiledReferences": [
"nunit.framework.dll"
],
"autoReferenced": false,
"defineConstraints": [
"UNITY_INCLUDE_TESTS"
],
Expand All @@ -24,6 +31,12 @@
"name": "com.unity.multiplayer.tools",
"expression": "1.0.0-pre.7",
"define": "MULTIPLAYER_TOOLS_1_0_0_PRE_7"
},
{
"name": "Unity",
"expression": "2023.1.0a21",
"define": "USE_FINDOBJECTSBYTYPE"
}
]
],
"noEngineReferences": false
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,12 @@ protected override void OnServerAndClientsCreated()

private EmptyComponent GetObjectForClient(ulong clientId)
{
foreach (var component in Object.FindObjectsOfType<EmptyComponent>())
#if USE_FINDOBJECTSBYTYPE
var emptyComponents = Object.FindObjectsByType<EmptyComponent>(FindObjectsSortMode.None);
#else
var emptyComponents = Object.FindObjectsOfType<EmptyComponent>();
#endif
foreach (var component in emptyComponents)
{
if (component.IsSpawned && component.NetworkManager.LocalClientId == clientId)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,13 @@ private IEnumerator SpawnClients(bool clearTestDeferredMessageManagerCallFlags =

private T GetComponentForClient<T>(ulong clientId) where T : NetworkBehaviour
{
foreach (var component in Object.FindObjectsOfType<T>())
#if USE_FINDOBJECTSBYTYPE
var componentsToFind = Object.FindObjectsByType<T>(FindObjectsSortMode.None);
#else
var componentsToFind = Object.FindObjectsOfType<T>();
#endif

foreach (var component in componentsToFind)
{
if (component.IsSpawned && component.NetworkManager.LocalClientId == clientId)
{
Expand Down Expand Up @@ -751,7 +757,13 @@ bool HaveAllClientsSpawned()
{
var found1 = false;
var found2 = false;
foreach (var component in Object.FindObjectsOfType<DeferredMessageTestRpcComponent>())
#if USE_FINDOBJECTSBYTYPE
var deferredMessageTestRpcComponents = Object.FindObjectsByType<DeferredMessageTestRpcComponent>(FindObjectsSortMode.None);
#else
var deferredMessageTestRpcComponents = Object.FindObjectsOfType<DeferredMessageTestRpcComponent>();
#endif

foreach (var component in deferredMessageTestRpcComponents)
{
if (component.IsSpawned && component.NetworkManager.LocalClientId == client.LocalClientId)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,15 @@ public IEnumerator MyFirstIntegationTest()
{
// Check the condition for this test and automatically handle varying processing
// environments and conditions
#if USE_FINDOBJECTSBYTYPE
yield return WaitForConditionOrTimeOut(() =>
Object.FindObjectsByType<NetworkVisibilityComponent>(FindObjectsSortMode.None).Where(
(c) => c.IsSpawned).Count() == 2);
#else
yield return WaitForConditionOrTimeOut(() =>
Object.FindObjectsOfType<NetworkVisibilityComponent>().Where(
(c) => c.IsSpawned).Count() == 2);

#endif
Assert.False(s_GlobalTimeoutHelper.TimedOut, "Timed out waiting for instances " +
"to be detected!");
}
Expand Down Expand Up @@ -64,9 +69,15 @@ public IEnumerator MyFirstIntegationTest()
{
// Check the condition for this test and automatically handle varying processing
// environments and conditions
#if USE_FINDOBJECTSBYTYPE
yield return WaitForConditionOrTimeOut(() =>
Object.FindObjectsByType<NetworkVisibilityComponent>(FindObjectsSortMode.None).Where(
(c) => c.IsSpawned).Count() == 2);
#else
yield return WaitForConditionOrTimeOut(() =>
Object.FindObjectsOfType<NetworkVisibilityComponent>().Where(
(c) => c.IsSpawned).Count() == 2);
#endif

Assert.False(s_GlobalTimeoutHelper.TimedOut, "Timed out waiting for instances " +
"to be detected!");
Expand Down
Loading