diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index fd4ae80745..22bef68281 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -10,8 +10,11 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Added +- Added `NetworkTransport.OnEarlyUpdate` and `NetworkTransport.OnPostLateUpdate` methods to provide more control over handling transport related events at the start and end of each frame. (#3113) + ### Fixed +- Fixed issue where queued UnitTransport (NetworkTransport) message batches were being sent on the next frame. They are now sent at the end of the frame during `PostLateUpdate`. (#3113) - Fixed issue where `NotOwnerRpcTarget` or `OwnerRpcTarget` were not using their replacements `NotAuthorityRpcTarget` and `AuthorityRpcTarget` which would invoke a warning. (#3111) - Fixed issue where client is removed as an observer from spawned objects when their player instance is despawned. (#3110) - Fixed issue where `NetworkAnimator` would statically allocate write buffer space for `Animator` parameters that could cause a write error if the number of parameters exceeded the space allocated. (#3108) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index de08ae0ebf..56a82bc33f 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -291,6 +291,10 @@ public void NetworkUpdate(NetworkUpdateStage updateStage) case NetworkUpdateStage.EarlyUpdate: { UpdateTopology(); + + // Handle processing any new connections or transport events + NetworkConfig.NetworkTransport.EarlyUpdate(); + ConnectionManager.ProcessPendingApprovals(); ConnectionManager.PollAndHandleNetworkEvents(); @@ -298,6 +302,7 @@ public void NetworkUpdate(NetworkUpdateStage updateStage) AnticipationSystem.SetupForUpdate(); MessageManager.ProcessIncomingMessageQueue(); + MessageManager.CleanupDisconnectedClients(); AnticipationSystem.ProcessReanticipation(); } @@ -379,6 +384,9 @@ public void NetworkUpdate(NetworkUpdateStage updateStage) // Metrics update needs to be driven by NetworkConnectionManager's update to assure metrics are dispatched after the send queue is processed. MetricsManager.UpdateMetrics(); + // Handle sending any pending transport messages + NetworkConfig.NetworkTransport.PostLateUpdate(); + // TODO: Determine a better way to handle this NetworkObject.VerifyParentingStatus(); diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs index b624120269..d647aeab17 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/NetworkTransport.cs @@ -107,6 +107,45 @@ protected void InvokeOnTransportEvent(NetworkEvent eventType, ulong clientId, Ar /// /// optionally pass in NetworkManager public abstract void Initialize(NetworkManager networkManager = null); + /// + /// Invoked by NetworkManager at the beginning of its EarlyUpdate. + /// For order of operations see: + /// + /// Useful to handle processing any transport-layer events such as processing inbound messages or changes in connection state(s). + /// + protected virtual void OnEarlyUpdate() + { + + } + + /// + /// Invoked by NetworkManager at the beginning of its EarlyUpdate + /// + internal void EarlyUpdate() + { + OnEarlyUpdate(); + } + + /// + /// Invoked by NetworkManager towards the end of the PostLateUpdate. + /// For order of operations see: + /// + /// + /// Useful to handle any end of frame transport tasks such as sending queued transport messages. + /// + protected virtual void OnPostLateUpdate() + { + + } + + /// + /// Invoked by NetworkManager towards the end of the PostLateUpdate + /// + internal void PostLateUpdate() + { + OnPostLateUpdate(); + } + protected virtual NetworkTopologyTypes OnCurrentTopology() { return NetworkTopologyTypes.ClientServer; diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs index 0237517f01..60e49d0479 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs @@ -944,17 +944,13 @@ private bool ProcessEvent() return false; } - private void Update() + /// + /// Handles accepting new connections and processing transport events. + /// + protected override void OnEarlyUpdate() { if (m_Driver.IsCreated) { - foreach (var kvp in m_SendQueue) - { - SendBatchedMessages(kvp.Key, kvp.Value); - } - - m_Driver.ScheduleUpdate().Complete(); - if (m_ProtocolType == ProtocolType.RelayUnityTransport && m_Driver.GetRelayConnectionStatus() == RelayConnectionStatus.AllocationInvalid) { Debug.LogError("Transport failure! Relay allocation needs to be recreated, and NetworkManager restarted. " + @@ -964,15 +960,38 @@ private void Update() return; } + m_Driver.ScheduleUpdate().Complete(); + + // Process any new connections while (AcceptConnection() && m_Driver.IsCreated) { ; } + // Process any transport events (i.e. connect, disconnect, data, etc) while (ProcessEvent() && m_Driver.IsCreated) { ; } + } + base.OnEarlyUpdate(); + } + + /// + /// Handles sending any queued batched messages. + /// + protected override void OnPostLateUpdate() + { + if (m_Driver.IsCreated) + { + foreach (var kvp in m_SendQueue) + { + SendBatchedMessages(kvp.Key, kvp.Value); + } + + // Schedule a flush send as the last transport action for the + // current frame. + m_Driver.ScheduleFlushSend(default).Complete(); #if MULTIPLAYER_TOOLS_1_0_0_PRE_7 if (m_NetworkManager) @@ -981,6 +1000,7 @@ private void Update() } #endif } + base.OnPostLateUpdate(); } private void OnDestroy() @@ -1452,6 +1472,11 @@ public override void Shutdown() { if (m_Driver.IsCreated) { + while (ProcessEvent() && m_Driver.IsCreated) + { + ; + } + // Flush all send queues to the network. NGO can be configured to flush its message // queue on shutdown. But this only calls the Send() method, which doesn't actually // get anything to the network. diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs index 31105efadd..ca402c6095 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs @@ -36,13 +36,25 @@ protected override void OnServerAndClientsCreated() { VerifyObjectIsSpawnedOnClient.ResetObjectTable(); m_ClientNetworkTransformPrefab = CreateNetworkObjectPrefab("OwnerAuthorityTest"); + var clientNetworkObject = m_ClientNetworkTransformPrefab.GetComponent(); + // When running in distributed authority mode, make the NetworkObject transferable + clientNetworkObject.SetOwnershipStatus(m_DistributedAuthority ? NetworkObject.OwnershipStatus.Transferable : NetworkObject.OwnershipStatus.None); var clientNetworkTransform = m_ClientNetworkTransformPrefab.AddComponent(); + clientNetworkTransform.AuthorityMode = NetworkTransform.AuthorityModes.Owner; clientNetworkTransform.Interpolate = false; clientNetworkTransform.UseHalfFloatPrecision = false; var rigidBody = m_ClientNetworkTransformPrefab.AddComponent(); rigidBody.useGravity = false; + rigidBody.maxDepenetrationVelocity = 0; + rigidBody.mass = 100; + rigidBody.linearDamping = 100; rigidBody.interpolation = RigidbodyInterpolation.None; rigidBody.maxLinearVelocity = 0; + rigidBody.detectCollisions = false; + rigidBody.position = Vector3.zero; + rigidBody.rotation = Quaternion.identity; + rigidBody.transform.position = Vector3.zero; + rigidBody.transform.rotation = Quaternion.identity; // NOTE: We don't use a sphere collider for this integration test because by the time we can // assure they don't collide and skew the results the NetworkObjects are already synchronized // with skewed results @@ -51,11 +63,22 @@ protected override void OnServerAndClientsCreated() m_ClientNetworkTransformPrefab.AddComponent(); m_NetworkTransformPrefab = CreateNetworkObjectPrefab("ServerAuthorityTest"); - var networkTransform = m_NetworkTransformPrefab.AddComponent(); + var networkObject = m_ClientNetworkTransformPrefab.GetComponent(); + // When running in distributed authority mode, make the NetworkObject transferable + networkObject.SetOwnershipStatus(m_DistributedAuthority ? NetworkObject.OwnershipStatus.Transferable : NetworkObject.OwnershipStatus.None); + var networkTransform = m_NetworkTransformPrefab.AddComponent(); rigidBody = m_NetworkTransformPrefab.AddComponent(); rigidBody.useGravity = false; + rigidBody.maxDepenetrationVelocity = 0; + rigidBody.linearDamping = 100; + rigidBody.mass = 100; rigidBody.interpolation = RigidbodyInterpolation.None; rigidBody.maxLinearVelocity = 0; + rigidBody.detectCollisions = false; + rigidBody.position = Vector3.zero; + rigidBody.rotation = Quaternion.identity; + rigidBody.transform.position = Vector3.zero; + rigidBody.transform.rotation = Quaternion.identity; // NOTE: We don't use a sphere collider for this integration test because by the time we can // assure they don't collide and skew the results the NetworkObjects are already synchronized // with skewed results @@ -276,10 +299,12 @@ void LogOwnerRigidBody(int stage) }; if (m_MotionModel == MotionModels.UseRigidbody) { + TestClientNetworkTransform.EnableLogState(m_EnableVerboseDebug); var ownerRigidbody = ownerInstance.GetComponent(); ownerRigidbody.Move(valueSetByOwner, rotation); + yield return new WaitForFixedUpdate(); ownerRigidbody.linearVelocity = Vector3.zero; - yield return s_DefaultWaitForTick; + yield return new WaitForFixedUpdate(); ownerInstance.transform.localScale = valueSetByOwner; } else @@ -312,15 +337,22 @@ void LogOwnerRigidBody(int stage) VerifyObjectIsSpawnedOnClient.ResetObjectTable(); if (m_DistributedAuthority) { - ownerInstance.NetworkObject.ChangeOwnership(networkManagerNonOwner.LocalClientId); + Assert.True(nonOwnerInstance.OwnerClientId != networkManagerNonOwner.LocalClientId, $"Non-Owner Client-{networkManagerNonOwner.LocalClientId} was already the owner prior to changing ownership!"); + nonOwnerInstance.NetworkObject.ChangeOwnership(networkManagerNonOwner.LocalClientId); + nonOwnerInstance.GetComponent().linearVelocity = Vector3.zero; + Assert.True(nonOwnerInstance.OwnerClientId == networkManagerNonOwner.LocalClientId, $"Client-{networkManagerNonOwner.LocalClientId} failed to change ownership!"); + + LogNonOwnerRigidBody(3); + yield return WaitForConditionOrTimeOut(() => ownerInstance.GetComponent().OwnerClientId == networkManagerNonOwner.LocalClientId); + Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for original owner {networkManagerOwner.name}'s object instance {nonOwnerInstance.name} to change ownership!"); } else { m_ServerNetworkManager.SpawnManager.ChangeOwnership(serverSideInstance.GetComponent(), networkManagerNonOwner.LocalClientId, true); + LogNonOwnerRigidBody(3); + yield return WaitForConditionOrTimeOut(() => nonOwnerInstance.GetComponent().OwnerClientId == networkManagerNonOwner.LocalClientId); + Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for {networkManagerNonOwner.name}'s object instance {nonOwnerInstance.name} to change ownership!"); } - LogNonOwnerRigidBody(3); - yield return WaitForConditionOrTimeOut(() => nonOwnerInstance.GetComponent().OwnerClientId == networkManagerNonOwner.LocalClientId); - Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for {networkManagerNonOwner.name}'s object instance {nonOwnerInstance.name} to change ownership!"); LogNonOwnerRigidBody(4); // Re-assign the ownership references and wait for the non-owner instance to be notified of ownership change @@ -331,6 +363,7 @@ void LogOwnerRigidBody(int stage) yield return WaitForConditionOrTimeOut(() => VerifyObjectIsSpawnedOnClient.GetClientInstance(networkManagerNonOwner.LocalClientId) != null); nonOwnerInstance = VerifyObjectIsSpawnedOnClient.GetClientInstance(networkManagerNonOwner.LocalClientId); Assert.NotNull(nonOwnerInstance); + Assert.True(!nonOwnerInstance.IsOwner, $"Ownership failed to change on Client-{networkManagerNonOwner.LocalClientId} side! Expected owner to be {networkManagerOwner.LocalClientId} but owner is still {networkManagerNonOwner.LocalClientId}!"); // Make sure the owner is not kinematic and the non-owner(s) are kinematic Assert.False(ownerInstance.GetComponent().isKinematic, $"{networkManagerOwner.name}'s object instance {ownerInstance.name} is kinematic when it should not be!"); @@ -344,7 +377,7 @@ void LogOwnerRigidBody(int stage) Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for {networkManagerNonOwner.name}'s object instance {nonOwnerInstance.name} to change its transform!\n" + $"Expected Position: {valueSetByOwner} | Current Position: {transformToTest.position}\n" + $"Expected Rotation: {valueSetByOwner} | Current Rotation: {transformToTest.rotation.eulerAngles}\n" + - $"Expected Scale: {valueSetByOwner} | Current Scale: {transformToTest.localScale}"); + $"Expected Scale: {valueSetByOwner} | Current Scale: {transformToTest.localScale}\n {nonOwnerInstance.GetComponent().LogInfoBuilder}"); LogNonOwnerRigidBody(5); // Have the new owner change transform values and wait for those values to be applied on the non-owner side. @@ -358,6 +391,7 @@ void LogOwnerRigidBody(int stage) var ownerRigidbody = ownerInstance.GetComponent(); ownerRigidbody.Move(valueSetByOwner, rotation); LogOwnerRigidBody(2); + yield return new WaitForFixedUpdate(); ownerInstance.GetComponent().LogMotion = m_EnableVerboseDebug; nonOwnerInstance.GetComponent().LogMotion = m_EnableVerboseDebug; ownerRigidbody.linearVelocity = Vector3.zero; @@ -377,10 +411,11 @@ void LogOwnerRigidBody(int stage) LogOwnerRigidBody(4); LogNonOwnerRigidBody(7); } + Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for {networkManagerNonOwner.name}'s object instance {nonOwnerInstance.name} to change its transform!\n" + $"Expected Position: {valueSetByOwner} | Current Position: {transformToTest.position}\n" + $"Expected Rotation: {valueSetByOwner} | Current Rotation: {transformToTest.rotation.eulerAngles}\n" + - $"Expected Scale: {valueSetByOwner} | Current Scale: {transformToTest.localScale}"); + $"Expected Scale: {valueSetByOwner} | Current Scale: {transformToTest.localScale}\n {nonOwnerInstance.GetComponent().LogInfoBuilder}"); // The last check is to verify non-owners cannot change transform values after ownership has changed nonOwnerInstance.transform.position = Vector3.zero; @@ -445,6 +480,12 @@ public IEnumerator ServerAuthoritativeTest() Assert.True(nonOwnerInstance.transform.position == valueSetByOwner, $"{m_ClientNetworkManagers[0].name}'s object instance {nonOwnerInstance.name} was allowed to change its position! Expected: {Vector3.one} Is Currently:{nonOwnerInstance.transform.position}"); } + protected override IEnumerator OnTearDown() + { + TestClientNetworkTransform.EnableLogState(false); + return base.OnTearDown(); + } + /// /// NetworkTransformOwnershipTests helper behaviour /// @@ -457,6 +498,10 @@ public static void ResetObjectTable() NetworkManagerRelativeSpawnedObjects.Clear(); } + /// + /// For testing, just before changing ownership the table is cleared to assure that + /// ownership tansfer occurs. This will add the new owner to the table. + /// public override void OnGainedOwnership() { if (!NetworkManagerRelativeSpawnedObjects.ContainsKey(NetworkManager.LocalClientId)) @@ -466,6 +511,10 @@ public override void OnGainedOwnership() base.OnGainedOwnership(); } + /// + /// For testing, just before changing ownership the table is cleared to assure that + /// ownership tansfer occurs. This will add the previous owner to the table. + /// public override void OnLostOwnership() { if (!NetworkManagerRelativeSpawnedObjects.ContainsKey(NetworkManager.LocalClientId)) @@ -515,28 +564,57 @@ public override void OnNetworkDespawn() [DisallowMultipleComponent] internal class TestClientNetworkTransform : NetworkTransform { - //public override void OnNetworkSpawn() - //{ - // base.OnNetworkSpawn(); - // CanCommitToTransform = IsOwner; - //} - - //protected override void Update() - //{ - // CanCommitToTransform = IsOwner; - // base.Update(); - // if (NetworkManager.Singleton != null && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) - // { - // if (CanCommitToTransform) - // { - // TryCommitTransformToServer(transform, NetworkManager.LocalTime.Time); - // } - // } - //} - - protected override bool OnIsServerAuthoritative() + public static void EnableLogState(bool enable) { - return false; + s_LogStateEnabled = enable; + TrackByStateId = enable; + } + + private static bool s_LogStateEnabled; + + internal StringBuilder LogInfoBuilder = new StringBuilder(); + + private void LogInfo(NetworkTransformState state) + { + if (s_LogStateEnabled) + { + LogInfoBuilder.AppendLine($"N:{name} | CID:{NetworkManager.LocalClientId} | SID: {state.StateId} | NT:{NetworkManager.ServerTime.Tick} | Pos: {transform.position} | Sc: {transform.localScale}"); + } + } + + protected override void OnOwnershipChanged(ulong previous, ulong current) + { + + if (s_LogStateEnabled) + { + LogInfoBuilder.AppendLine($"Ownership Changed: {previous} --> {current} | Position: {transform.position}"); + } + LogInfo(LocalAuthoritativeNetworkState); + base.OnOwnershipChanged(previous, current); + + // Assure no velocity is set on this object for this particular test + if (current == NetworkManager.LocalClientId) + { + GetComponent().linearVelocity = Vector3.zero; + } + } + + protected override void OnAuthorityPushTransformState(ref NetworkTransformState networkTransformState) + { + LogInfo(networkTransformState); + base.OnAuthorityPushTransformState(ref networkTransformState); + } + + protected override void OnBeforeUpdateTransformState() + { + LogInfo(LocalAuthoritativeNetworkState); + base.OnBeforeUpdateTransformState(); + } + + protected override void OnNetworkTransformStateUpdated(ref NetworkTransformState oldState, ref NetworkTransformState newState) + { + LogInfo(newState); + base.OnNetworkTransformStateUpdated(ref oldState, ref newState); } } } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportConnectionTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportConnectionTests.cs index ac4c0891c2..3e2c746082 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportConnectionTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportConnectionTests.cs @@ -33,7 +33,7 @@ public IEnumerator Cleanup() if (transport) { transport.Shutdown(); - UnityEngine.Object.DestroyImmediate(transport); + UnityEngine.Object.DestroyImmediate(transport.gameObject); } } @@ -42,6 +42,7 @@ public IEnumerator Cleanup() transportEvents?.Clear(); } + UnityTransportTestComponent.CleanUp(); yield return null; } @@ -59,6 +60,7 @@ public void DetectInvalidEndpoint() Assert.False(m_Clients[0].StartClient(), "Client failed to detect invalid endpoint!"); netcodeLogAssert.LogWasReceived(LogType.Error, $"Network listen address ({m_Server.ConnectionData.Address}) is Invalid!"); netcodeLogAssert.LogWasReceived(LogType.Error, $"Target server network address ({m_Clients[0].ConnectionData.Address}) is Invalid!"); + UnityTransportTestComponent.CleanUp(); } // Check connection with a single client. @@ -161,8 +163,6 @@ public IEnumerator ServerDisconnectMultipleClients() // Check that all clients got a Disconnect event. Assert.True(m_ClientsEvents.All(evs => evs.Count == 2)); Assert.True(m_ClientsEvents.All(evs => evs[1].Type == NetworkEvent.Disconnect)); - - yield return null; } // Check client disconnection from a single client. @@ -188,13 +188,11 @@ public IEnumerator ClientDisconnectMultipleClients() { InitializeTransport(out m_Server, out m_ServerEvents); m_Server.StartServer(); - for (int i = 0; i < k_NumClients; i++) { InitializeTransport(out m_Clients[i], out m_ClientsEvents[i]); m_Clients[i].StartClient(); } - yield return WaitForNetworkEvent(NetworkEvent.Connect, m_ClientsEvents[k_NumClients - 1]); // Disconnect a single client. @@ -207,14 +205,11 @@ public IEnumerator ClientDisconnectMultipleClients() { m_Clients[i].DisconnectLocalClient(); } - yield return WaitForNetworkEvent(NetworkEvent.Disconnect, m_ServerEvents, 5); // Check that we got the correct number of Disconnect events on the server. Assert.AreEqual(k_NumClients * 2, m_ServerEvents.Count); Assert.AreEqual(k_NumClients, m_ServerEvents.Count(e => e.Type == NetworkEvent.Disconnect)); - - yield return null; } // Check that server re-disconnects are no-ops. @@ -244,8 +239,6 @@ public IEnumerator RepeatedServerDisconnectsNoop() // Check we haven't received anything else on the client or server. Assert.AreEqual(m_ServerEvents.Count, previousServerEventsCount); Assert.AreEqual(m_ClientsEvents[0].Count, previousClientEventsCount); - - yield return null; } // Check that client re-disconnects are no-ops. @@ -275,8 +268,6 @@ public IEnumerator RepeatedClientDisconnectsNoop() // Check we haven't received anything else on the client or server. Assert.AreEqual(m_ServerEvents.Count, previousServerEventsCount); Assert.AreEqual(m_ClientsEvents[0].Count, previousClientEventsCount); - - yield return null; } // Check connection with different server/listen addresses. diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTestHelpers.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTestHelpers.cs index 62ae2b561f..2523dd9257 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTestHelpers.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTestHelpers.cs @@ -43,7 +43,7 @@ public static void InitializeTransport(out UnityTransport transport, out List(); + transport = new GameObject().AddComponent(); transport.OnTransportEvent += logger.HandleEvent; transport.MaxPayloadSize = maxPayloadSize; @@ -91,5 +91,58 @@ public void HandleEvent(NetworkEvent type, ulong clientID, ArraySegment da }); } } + + internal class UnityTransportTestComponent : UnityTransport, INetworkUpdateSystem + { + private static List s_Instances = new List(); + + public static void CleanUp() + { + for (int i = s_Instances.Count - 1; i >= 0; i--) + { + var instance = s_Instances[i]; + instance.Shutdown(); + DestroyImmediate(instance.gameObject); + } + s_Instances.Clear(); + } + + /// + /// Simulate the being invoked so + /// and are invoked. + /// + public void NetworkUpdate(NetworkUpdateStage updateStage) + { + switch (updateStage) + { + case NetworkUpdateStage.EarlyUpdate: + { + EarlyUpdate(); + break; + } + case NetworkUpdateStage.PostLateUpdate: + { + PostLateUpdate(); + break; + } + } + } + + public override void Shutdown() + { + s_Instances.Remove(this); + base.Shutdown(); + this.UnregisterAllNetworkUpdates(); + } + + public override void Initialize(NetworkManager networkManager = null) + { + base.Initialize(networkManager); + this.RegisterNetworkUpdate(NetworkUpdateStage.EarlyUpdate); + this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate); + this.RegisterNetworkUpdate(NetworkUpdateStage.PostLateUpdate); + s_Instances.Add(this); + } + } } } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTests.cs index 4a14206e02..d5b720dada 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/UnityTransportTests.cs @@ -60,11 +60,11 @@ public IEnumerator Cleanup() // Need to destroy the GameObject (all assigned components will get destroyed too) UnityEngine.Object.DestroyImmediate(m_Client2.gameObject); } - m_ServerEvents?.Clear(); m_Client1Events?.Clear(); m_Client2Events?.Clear(); + UnityTransportTestComponent.CleanUp(); yield return null; } @@ -217,8 +217,6 @@ public IEnumerator MultipleSendsSingleFrame( Assert.AreEqual(33, m_ServerEvents[3].Data.First()); Assert.AreEqual(10, m_ServerEvents[3].Data.Count); - - yield return null; } // Check sending data to multiple clients. @@ -260,8 +258,6 @@ public IEnumerator SendMultipleClients( byte c1Data = m_Client1Events[1].Data.First(); byte c2Data = m_Client2Events[1].Data.First(); Assert.That((c1Data == 11 && c2Data == 22) || (c1Data == 22 && c2Data == 11)); - - yield return null; } // Check receiving data from multiple clients. @@ -299,8 +295,6 @@ public IEnumerator ReceiveMultipleClients( byte sData1 = m_ServerEvents[2].Data.First(); byte sData2 = m_ServerEvents[3].Data.First(); Assert.That((sData1 == 11 && sData2 == 22) || (sData1 == 22 && sData2 == 11)); - - yield return null; } // Check that we get disconnected when overflowing the reliable send queue. @@ -332,8 +326,6 @@ public IEnumerator DisconnectOnReliableSendQueueOverflow() Assert.AreEqual(2, m_Client1Events.Count); Assert.AreEqual(NetworkEvent.Disconnect, m_Client1Events[1].Type); - - yield return null; } // Check that it's fine to overflow the unreliable send queue (traffic is flushed on overflow). @@ -373,8 +365,6 @@ public IEnumerator SendCompletesOnUnreliableSendQueueOverflow() Assert.AreEqual(NetworkEvent.Data, m_ServerEvents[i].Type); Assert.AreEqual(1024, m_ServerEvents[i].Data.Count); } - - yield return null; } #if !UTP_TRANSPORT_2_0_ABOVE @@ -451,8 +441,6 @@ public IEnumerator SendQueuesFlushedOnShutdown([ValueSource("k_DeliveryParameter m_Client1.Shutdown(); yield return WaitForNetworkEvent(NetworkEvent.Data, m_ServerEvents); - - yield return null; } [UnityTest] @@ -472,8 +460,6 @@ public IEnumerator SendQueuesFlushedOnLocalClientDisconnect([ValueSource("k_Deli m_Client1.DisconnectLocalClient(); yield return WaitForNetworkEvent(NetworkEvent.Data, m_ServerEvents); - - yield return null; } [UnityTest] @@ -493,8 +479,6 @@ public IEnumerator SendQueuesFlushedOnRemoteClientDisconnect([ValueSource("k_Del m_Server.DisconnectRemoteClient(m_ServerEvents[0].ClientID); yield return WaitForNetworkEvent(NetworkEvent.Data, m_Client1Events); - - yield return null; } [UnityTest] @@ -514,8 +498,6 @@ public IEnumerator ReliablePayloadsCanBeLargerThanMaximum() m_Server.Send(m_Client1.ServerClientId, data, NetworkDelivery.Reliable); yield return WaitForNetworkEvent(NetworkEvent.Data, m_Client1Events); - - yield return null; } } } diff --git a/testproject/Assets/Tests/Manual/SceneTransitioningAdditive/SceneTransitioningBase1.unity b/testproject/Assets/Tests/Manual/SceneTransitioningAdditive/SceneTransitioningBase1.unity index b9af226321..bab567858b 100644 --- a/testproject/Assets/Tests/Manual/SceneTransitioningAdditive/SceneTransitioningBase1.unity +++ b/testproject/Assets/Tests/Manual/SceneTransitioningAdditive/SceneTransitioningBase1.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -154,7 +150,6 @@ RectTransform: m_Children: - {fileID: 1351730454} m_Father: {fileID: 290861172} - m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -173,6 +168,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveSceneMultiInstance m_SceneAsset: {fileID: 102900000, guid: 0ae94f636016d3b40bfbecad57d99553, type: 3} @@ -208,7 +204,6 @@ RectTransform: m_Children: - {fileID: 1347823142} m_Father: {fileID: 290861172} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} @@ -227,6 +222,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 244f0414ea8419b41ac51adb305d64b0, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_SwitchSceneButtonObject: {fileID: 1347823141} m_SceneToSwitchTo: SceneTransitioningBase2 m_EnableAutoSwitch: 0 @@ -245,10 +241,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: GlobalObjectIdHash: 412081913 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 AlwaysReplicateAsRoot: 0 SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 1 + SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!1 &37242881 GameObject: m_ObjectHideFlags: 0 @@ -274,9 +278,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 37242881} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -326,8 +329,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &37242883 Transform: m_ObjectHideFlags: 0 @@ -335,13 +342,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 37242881} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!224 &42803802 stripped RectTransform: @@ -381,7 +388,6 @@ RectTransform: m_Children: - {fileID: 1429502879} m_Father: {fileID: 362129048} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -457,7 +463,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 362129048} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -537,7 +542,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 212638130} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -609,9 +613,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 57392470} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &57392472 @@ -631,6 +643,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -671,13 +686,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 57392470} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -30.5, y: 0.49999994, z: 0} m_LocalScale: {x: 1, y: 3, z: 62} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1332123092} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &59926368 GameObject: @@ -710,7 +725,6 @@ RectTransform: m_Children: - {fileID: 1651938367} m_Father: {fileID: 290861172} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -729,6 +743,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveSceneMultiInstance m_SceneAsset: {fileID: 102900000, guid: 0ae94f636016d3b40bfbecad57d99553, type: 3} @@ -764,7 +779,6 @@ RectTransform: m_Children: - {fileID: 615497064} m_Father: {fileID: 1351730454} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -840,7 +854,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1640896166} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -965,7 +978,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -983,7 +998,6 @@ RectTransform: m_Children: - {fileID: 1865409449} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1022,7 +1036,6 @@ RectTransform: m_Children: - {fileID: 57138324} m_Father: {fileID: 1783165220} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1143,7 +1156,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1175,7 +1190,6 @@ RectTransform: - {fileID: 1362072618} - {fileID: 1783165220} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1213,7 +1227,6 @@ RectTransform: m_Children: - {fileID: 362129048} m_Father: {fileID: 290861172} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1232,6 +1245,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveScene2 m_SceneAsset: {fileID: 102900000, guid: c6a3d883c8253ee43bca4f2b03797d7b, type: 3} @@ -1267,7 +1281,6 @@ RectTransform: - {fileID: 1689223598} - {fileID: 1638885888} m_Father: {fileID: 884557066} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1362,9 +1375,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 336568645} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &336568647 @@ -1384,6 +1405,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1424,13 +1448,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 336568645} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: -0.50000006, z: 0} m_LocalScale: {x: 60, y: 1, z: 60} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1332123092} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &348836178 GameObject: @@ -1463,7 +1487,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2084811628} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1540,7 +1563,6 @@ RectTransform: - {fileID: 44393280} - {fileID: 57065842} m_Father: {fileID: 291820796} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1640,7 +1662,6 @@ RectTransform: m_Children: - {fileID: 432733929} m_Father: {fileID: 1651938367} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1716,7 +1737,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 418148061} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1792,7 +1812,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2079590080} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1868,7 +1887,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2058276876} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1957,9 +1975,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1993,13 +2019,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 575203307} + serializedVersion: 2 m_LocalRotation: {x: 0.41890106, y: -0, z: -0, w: 0.9080319} m_LocalPosition: {x: 0, y: 42, z: -46} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 49.530003, y: 0, z: 0} --- !u!1 &599972120 GameObject: @@ -2032,7 +2058,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1588117328} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2112,7 +2137,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 125866603} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2188,7 +2212,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1362072618} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2268,7 +2291,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1783165220} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2348,7 +2370,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1290928583} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2424,7 +2445,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1398648428} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2500,7 +2520,6 @@ RectTransform: m_Children: - {fileID: 300124662} m_Father: {fileID: 290861172} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2519,6 +2538,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveScene1 m_SceneAsset: {fileID: 102900000, guid: 41a0239b0c49e2047b7063c822f0df8a, type: 3} @@ -2529,8 +2549,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: - serializedVersion: 4 - m_GIWorkflowMode: 1 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_RealtimeEnvironmentLighting: 1 @@ -2540,6 +2559,8 @@ LightingSettings: m_UsingShadowmask: 1 m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 m_LightmapCompression: 3 @@ -2553,13 +2574,11 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 @@ -2568,8 +2587,8 @@ LightingSettings: m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 1 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 1 m_PVRFilteringMode: 1 m_PVRDenoiserTypeDirect: 1 m_PVRDenoiserTypeIndirect: 1 @@ -2583,7 +2602,7 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_PVRTiledBaking: 0 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &906714043 GameObject: m_ObjectHideFlags: 0 @@ -2615,7 +2634,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2019086800} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2669,6 +2687,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 4518755925279129984, guid: 3a854a190ab5b1b4fb00bec725fdda9e, @@ -2731,6 +2750,11 @@ PrefabInstance: propertyPath: GlobalObjectIdHash value: 3537583461 objectReference: {fileID: 0} + - target: {fileID: 4518755925279129985, guid: 3a854a190ab5b1b4fb00bec725fdda9e, + type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 225455949 + objectReference: {fileID: 0} - target: {fileID: 4518755925279129986, guid: 3a854a190ab5b1b4fb00bec725fdda9e, type: 3} propertyPath: m_Name @@ -2742,6 +2766,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3a854a190ab5b1b4fb00bec725fdda9e, type: 3} --- !u!1 &1008611498 GameObject: @@ -2774,7 +2801,6 @@ RectTransform: m_Children: - {fileID: 1640896166} m_Father: {fileID: 290861172} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2793,6 +2819,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveSceneMultiInstance m_SceneAsset: {fileID: 102900000, guid: 0ae94f636016d3b40bfbecad57d99553, type: 3} @@ -2828,8 +2855,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} m_Name: m_EditorClassIdentifier: - RunInBackground: 1 - LogLevel: 1 + NetworkManagerExpanded: 0 NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 1024114723} @@ -2852,6 +2878,10 @@ MonoBehaviour: LoadSceneTimeOut: 120 SpawnTimeout: 1 EnableNetworkLogs: 1 + NetworkTopology: 0 + UseCMBService: 0 + AutoSpawnPlayerPrefabClientSide: 1 + NetworkProfilingMetrics: 1 OldPrefabList: - Override: 0 Prefab: {fileID: 771575417923360811, guid: c0a45bdb516f341498d933b7a7ed4fc1, @@ -2903,6 +2933,8 @@ MonoBehaviour: SourcePrefabToOverride: {fileID: 0} SourceHashToOverride: 0 OverridingTargetPrefab: {fileID: 0} + RunInBackground: 1 + LogLevel: 1 --- !u!4 &1024114720 Transform: m_ObjectHideFlags: 0 @@ -2910,13 +2942,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1024114717} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1024114721 MonoBehaviour: @@ -2957,6 +2989,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_ProtocolType: 0 + m_UseWebSockets: 0 + m_UseEncryption: 0 m_MaxPacketQueueSize: 128 m_MaxPayloadSize: 512000 m_HeartbeatTimeoutMS: 500 @@ -3001,6 +3035,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8c48ea35c67e64f7fac22a3f6831ca88, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 AutoSpawnEnable: 1 InitialSpawnDelay: 0.2 SpawnsPerSecond: 1 @@ -3027,13 +3062,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1113539278} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1113539281 MonoBehaviour: @@ -3048,10 +3083,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: GlobalObjectIdHash: 1983031731 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 AlwaysReplicateAsRoot: 0 SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 1 + SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!1 &1187680249 GameObject: m_ObjectHideFlags: 0 @@ -3083,7 +3126,6 @@ RectTransform: m_Children: - {fileID: 2019086800} m_Father: {fileID: 290861172} - m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -3102,6 +3144,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 475de064003ff104fb88b1fbccd0f417, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ActivateOnLoad: 0 m_SceneToLoad: AdditiveSceneMultiInstance m_SceneAsset: {fileID: 102900000, guid: 0ae94f636016d3b40bfbecad57d99553, type: 3} @@ -3136,7 +3179,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1651938367} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3217,7 +3259,6 @@ RectTransform: m_Children: - {fileID: 833301795} m_Father: {fileID: 1640896166} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3285,6 +3326,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1332123091} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.000000059604645, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -3296,7 +3338,6 @@ Transform: - {fileID: 57392474} - {fileID: 1336081255} m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1336081251 GameObject: @@ -3325,9 +3366,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1336081251} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &1336081253 @@ -3347,6 +3396,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -3387,13 +3439,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1336081251} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 30.5, y: 0.49999994, z: 0} m_LocalScale: {x: 1, y: 3, z: 62} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1332123092} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1336892118 GameObject: @@ -3426,7 +3478,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1351730454} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3508,7 +3559,6 @@ RectTransform: m_Children: - {fileID: 1846334315} m_Father: {fileID: 34066665} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} @@ -3641,7 +3691,6 @@ RectTransform: - {fileID: 125866603} - {fileID: 1336892119} m_Father: {fileID: 19371290} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -3741,7 +3790,6 @@ RectTransform: - {fileID: 2084811628} - {fileID: 703861692} m_Father: {fileID: 290861172} - m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -3840,7 +3888,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 290861172} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -3919,7 +3966,6 @@ RectTransform: m_Children: - {fileID: 1523424137} m_Father: {fileID: 2058276876} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3958,7 +4004,6 @@ RectTransform: m_Children: - {fileID: 865202802} m_Father: {fileID: 2019086800} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4034,7 +4079,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 44393280} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4111,7 +4155,6 @@ RectTransform: - {fileID: 2079590080} - {fileID: 1489972349} m_Father: {fileID: 290861172} - m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4210,7 +4253,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1456950069} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -4290,7 +4332,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1387688805} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -4366,7 +4407,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1889006547} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -4444,7 +4484,6 @@ RectTransform: m_Children: - {fileID: 599972121} m_Father: {fileID: 290861172} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -4576,7 +4615,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 300124662} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -4657,7 +4695,6 @@ RectTransform: - {fileID: 1290928583} - {fileID: 163541782} m_Father: {fileID: 1008611499} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4757,7 +4794,6 @@ RectTransform: - {fileID: 418148061} - {fileID: 1210784442} m_Father: {fileID: 59926369} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4857,7 +4893,6 @@ RectTransform: m_Children: - {fileID: 1691305196} m_Father: {fileID: 300124662} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4933,7 +4968,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1689223598} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -5010,7 +5044,6 @@ RectTransform: - {fileID: 212638130} - {fileID: 725420114} m_Father: {fileID: 290861172} - m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -5138,13 +5171,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1834318145} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -431, y: -242.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 290861172} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1846334314 GameObject: @@ -5177,7 +5210,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1347823142} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -5253,9 +5285,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1857685343} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &1857685345 @@ -5275,6 +5315,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5315,19 +5358,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1857685343} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.49999994, z: -30.5} m_LocalScale: {x: 60, y: 3, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1332123092} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1865409448 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 167044834} m_Modifications: - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, @@ -5441,6 +5485,9 @@ PrefabInstance: value: ConnectionModeButtons objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} --- !u!224 &1865409449 stripped RectTransform: @@ -5478,7 +5525,6 @@ RectTransform: m_Children: - {fileID: 1549858059} m_Father: {fileID: 2058276876} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.25} m_AnchorMax: {x: 1, y: 0.75} @@ -5517,7 +5563,6 @@ RectTransform: - {fileID: 1398648428} - {fileID: 906714044} m_Father: {fileID: 1187680250} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -5616,7 +5661,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2058276876} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.25} m_AnchorMax: {x: 1, y: 0.75} @@ -5688,9 +5732,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2028091268} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &2028091270 @@ -5710,6 +5762,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -5750,13 +5805,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2028091268} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.49999994, z: 30.5} m_LocalScale: {x: 60, y: 3, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1332123092} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2058276875 GameObject: @@ -5792,7 +5847,6 @@ RectTransform: - {fileID: 1387688805} - {fileID: 562991979} m_Father: {fileID: 290861172} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} @@ -5894,7 +5948,6 @@ RectTransform: m_Children: - {fileID: 441263735} m_Father: {fileID: 1456950069} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5971,7 +6024,6 @@ RectTransform: m_Children: - {fileID: 348836179} m_Father: {fileID: 1362072618} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6041,13 +6093,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2107482020} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 318.45444, y: 110.697815, z: 216.79077} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2107482022 MonoBehaviour: @@ -6061,6 +6113,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: cb5f3e55f5dd247129d8a4979b80ebbb, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ClientServerToggle: {fileID: 1588117327} m_TrackSceneEvents: 1 --- !u!114 &2107482023 @@ -6076,15 +6129,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: GlobalObjectIdHash: 3197939627 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 AlwaysReplicateAsRoot: 0 SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 1 + SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!1001 &2848221156282925290 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 290861172} m_Modifications: - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, @@ -6244,4 +6306,20 @@ PrefabInstance: objectReference: {fileID: 11400000, guid: c10d995498e0c514a853c3506031d3fb, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3200770c16e3b2b4ebe7f604154faac7, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 575203310} + - {fileID: 37242883} + - {fileID: 1024114720} + - {fileID: 167044834} + - {fileID: 290861172} + - {fileID: 1113539280} + - {fileID: 1332123092} + - {fileID: 2107482021} + - {fileID: 960545998}