From 0ad1fb062fac188884289a5ed0440338aea43d02 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 5 Jul 2021 14:42:30 -0400 Subject: [PATCH 01/74] setting correct default --- com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index f856da1db5..f797fbc2d7 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -84,7 +84,7 @@ public enum Authority /// The channel to send the data on /// [SerializeField, Tooltip("The channel to send the data on.")] - public NetworkChannel Channel = NetworkChannel.NetworkVariable; + public NetworkChannel Channel = NetworkChannel.PositionUpdate; /// /// Sets whether this transform should sync local or world properties. This is important to set since reparenting this transform From bc4d373b489f5c39d8584920e0a08d884fcd202f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 20 Jul 2021 15:33:38 -0400 Subject: [PATCH 02/74] adding test benchmark for interpolation --- .gitignore | 1 + testproject/Assets/MoveInCircle.cs | 20 + testproject/Assets/MoveInCircle.cs.meta | 11 + testproject/Assets/Scenes/SampleScene.unity | 277 ++++++++++--- .../Assets/Scripts/NetworkTransformLegacy.cs | 375 ++++++++++++++++++ .../Scripts/NetworkTransformLegacy.cs.meta | 11 + testproject/Packages/manifest.json | 2 + testproject/Packages/packages-lock.json | 14 + 8 files changed, 645 insertions(+), 66 deletions(-) create mode 100644 testproject/Assets/MoveInCircle.cs create mode 100644 testproject/Assets/MoveInCircle.cs.meta create mode 100644 testproject/Assets/Scripts/NetworkTransformLegacy.cs create mode 100644 testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta diff --git a/.gitignore b/.gitignore index 2f5d1d5be4..3ea975c7b4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .vs .vscode .idea +testproject_clone_0 diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/MoveInCircle.cs new file mode 100644 index 0000000000..3586378e93 --- /dev/null +++ b/testproject/Assets/MoveInCircle.cs @@ -0,0 +1,20 @@ +using MLAPI; +using UnityEngine; + +public class MoveInCircle : MonoBehaviour +{ + [SerializeField] + private float m_MoveSpeed = 5; + + [SerializeField] + private float m_RotationSpeed = 30; + + void Update() + { + if (NetworkManager.Singleton.IsServer) + { + transform.position = transform.position + m_MoveSpeed * transform.forward * Time.deltaTime; + transform.Rotate(0, m_RotationSpeed * Time.deltaTime, 0); + } + } +} diff --git a/testproject/Assets/MoveInCircle.cs.meta b/testproject/Assets/MoveInCircle.cs.meta new file mode 100644 index 0000000000..6279dde433 --- /dev/null +++ b/testproject/Assets/MoveInCircle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 307c40a41954948e7a36bb6b64b4b9cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Scenes/SampleScene.unity b/testproject/Assets/Scenes/SampleScene.unity index fa5231a972..7116bf74e9 100644 --- a/testproject/Assets/Scenes/SampleScene.unity +++ b/testproject/Assets/Scenes/SampleScene.unity @@ -181,7 +181,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -440,7 +439,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -492,7 +490,7 @@ Transform: m_Children: - {fileID: 789733233} m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &402668303 MonoBehaviour: @@ -509,6 +507,7 @@ MonoBehaviour: GlobalObjectIdHash: 3604669530 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!114 &402668304 MonoBehaviour: m_ObjectHideFlags: 0 @@ -647,7 +646,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -744,7 +742,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -838,6 +835,7 @@ GameObject: - component: {fileID: 620561612} - component: {fileID: 620561611} - component: {fileID: 620561610} + - component: {fileID: 620561613} m_Layer: 0 m_Name: NetworkManager m_TagString: Untagged @@ -887,7 +885,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561610} + NetworkTransport: {fileID: 620561613} RegisteredScenes: - SampleScene AllowRuntimeSceneChanges: 0 @@ -934,6 +932,29 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &620561613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} + m_Name: + m_EditorClassIdentifier: + Port: 7777 + Address: 127.0.0.1 + PingInterval: 1 + DisconnectTimeout: 5 + ReconnectDelay: 0.5 + MaxConnectAttempts: 10 + channels: [] + MessageBufferSize: 5120 + SimulatePacketLossChance: 5 + SimulateMinLatency: 60 + SimulateMaxLatency: 100 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -1708,7 +1729,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -1781,7 +1801,7 @@ Transform: m_LocalScale: {x: 0.42366, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!114 &963826004 MonoBehaviour: @@ -1833,6 +1853,7 @@ MonoBehaviour: GlobalObjectIdHash: 3972363333 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!65 &963826007 BoxCollider: m_ObjectHideFlags: 0 @@ -1857,7 +1878,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -1896,51 +1916,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 963826002} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1202924672 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1202924674} - - component: {fileID: 1202924673} - m_Layer: 0 - m_Name: UnityChanSpawner - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1202924673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1202924672} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 05037a80244af4174806bc7f242e4432, type: 3} - m_Name: - m_EditorClassIdentifier: - UnityChanPrefab: {fileID: 442217489085244684, guid: 5eca8a21314fe4278ba2571c289a9773, - type: 3} ---- !u!4 &1202924674 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1202924672} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10, y: -0.1, z: 10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1237561005 GameObject: m_ObjectHideFlags: 0 @@ -2265,7 +2240,7 @@ Transform: m_Children: - {fileID: 1475593094} m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1397037315 GameObject: @@ -2341,6 +2316,7 @@ MonoBehaviour: GlobalObjectIdHash: 1445980162 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!54 &1397037320 Rigidbody: m_ObjectHideFlags: 0 @@ -2381,7 +2357,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2433,7 +2408,7 @@ Transform: m_Children: - {fileID: 772203958} m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1398767341 GameObject: @@ -2493,7 +2468,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2606,6 +2580,7 @@ MonoBehaviour: GlobalObjectIdHash: 1148320762 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!54 &1402467447 Rigidbody: m_ObjectHideFlags: 0 @@ -2646,7 +2621,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2698,7 +2672,7 @@ Transform: m_Children: - {fileID: 1237561006} m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1463459130 GameObject: @@ -2744,7 +2718,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2855,7 +2828,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2952,7 +2924,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3020,6 +2991,7 @@ MonoBehaviour: GlobalObjectIdHash: 2710131580 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!114 &1475593096 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3186,7 +3158,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3225,6 +3196,182 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1636734282} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1643885206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643885211} + - component: {fileID: 1643885210} + - component: {fileID: 1643885209} + - component: {fileID: 1643885208} + - component: {fileID: 1643885207} + - component: {fileID: 1643885212} + - component: {fileID: 1643885213} + m_Layer: 0 + m_Name: NetworkTransformLegacy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1643885207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} + m_Name: + m_EditorClassIdentifier: + FixedSendsPerSecond: 20 + AssumeSyncedSends: 1 + InterpolatePosition: 1 + SnapDistance: 10 + InterpolateServer: 1 + MinMeters: 0.15 + MinDegrees: 1.5 + ExtrapolatePosition: 0 + MaxSendsToExtrapolate: 5 + Channel: + EnableRange: 0 + EnableNonProvokedResendChecks: 0 + DistanceSendrate: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 500 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!65 &1643885208 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1643885209 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1643885210 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1643885211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.29, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1643885212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 1649186279 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &1643885213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 --- !u!1 &1815329519 GameObject: m_ObjectHideFlags: 0 @@ -3435,7 +3582,6 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3474,4 +3620,3 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2036456027} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} - \ No newline at end of file diff --git a/testproject/Assets/Scripts/NetworkTransformLegacy.cs b/testproject/Assets/Scripts/NetworkTransformLegacy.cs new file mode 100644 index 0000000000..4ec7d6628a --- /dev/null +++ b/testproject/Assets/Scripts/NetworkTransformLegacy.cs @@ -0,0 +1,375 @@ +using System.Linq; +using System.Collections.Generic; +using MLAPI; +using UnityEngine; +using MLAPI.Messaging; + +namespace Sam +{ + /// + /// A prototype component for syncing transforms + /// + [AddComponentMenu("MLAPI/NetworkTransformLegacy")] + public class NetworkTransformLegacy : NetworkBehaviour + { + internal class ClientSendInfo + { + public float LastSent; + public Vector3? LastMissedPosition; + public Quaternion? LastMissedRotation; + } + + /// + /// The base amount of sends per seconds to use when range is disabled + /// + [Range(0, 120)] + public float FixedSendsPerSecond = 20f; + + /// + /// Is the sends per second assumed to be the same across all instances + /// + [Tooltip("This assumes that the SendsPerSecond is synced across clients")] + public bool AssumeSyncedSends = true; + + /// + /// Enable interpolation + /// + [Tooltip("This requires AssumeSyncedSends to be true")] + public bool InterpolatePosition = true; + + /// + /// The distance before snaping to the position + /// + [Tooltip("The transform will snap if the distance is greater than this distance")] + public float SnapDistance = 10f; + + /// + /// Should the server interpolate + /// + public bool InterpolateServer = true; + + /// + /// The min meters to move before a send is sent + /// + public float MinMeters = 0.15f; + + /// + /// The min degrees to rotate before a send it sent + /// + public float MinDegrees = 1.5f; + + /// + /// Enables extrapolation + /// + public bool ExtrapolatePosition = false; + + /// + /// The maximum amount of expected send rates to extrapolate over when awaiting new packets. + /// A higher value will result in continued extrapolation after an object has stopped moving + /// + public float MaxSendsToExtrapolate = 5; + + /// + /// The channel to send the data on + /// + [Tooltip("The channel to send the data on. Uses the default channel if left unspecified")] + public string Channel = null; + + private float m_LerpTime; + private Vector3 m_LerpStartPos; + private Quaternion m_LerpStartRot; + private Vector3 m_LerpEndPos; + private Quaternion m_LerpEndRot; + + private float m_LastSendTime; + private Vector3 m_LastSentPos; + private Quaternion m_LastSentRot; + + private float m_LastReceiveTime; + + /// + /// Enables range based send rate + /// + public bool EnableRange; + + /// + /// Checks for missed sends without provocation. Provocation being a client inside it's normal SendRate + /// + public bool EnableNonProvokedResendChecks; + + /// + /// The curve to use to calculate the send rate + /// + public AnimationCurve DistanceSendrate = AnimationCurve.Constant(0, 500, 20); + + private readonly Dictionary m_ClientSendInfo = new Dictionary(); + + /// + /// The delegate used to check if a move is valid + /// + /// The client id the move is being validated for + /// The previous position + /// The new requested position + /// Returns Whether or not the move is valid + public delegate bool MoveValidationDelegate(ulong clientId, Vector3 oldPos, Vector3 newPos); + + /// + /// If set, moves will only be accepted if the custom delegate returns true + /// + public MoveValidationDelegate IsMoveValidDelegate = null; + + private void OnValidate() + { + if (!AssumeSyncedSends && InterpolatePosition) + { + InterpolatePosition = false; + } + + if (InterpolateServer && !InterpolatePosition) + { + InterpolateServer = false; + } + + if (MinDegrees < 0) + { + MinDegrees = 0; + } + + if (MinMeters < 0) + { + MinMeters = 0; + } + + if (EnableNonProvokedResendChecks && !EnableRange) + { + EnableNonProvokedResendChecks = false; + } + } + + private float GetTimeForLerp(Vector3 pos1, Vector3 pos2) + { + return 1f / DistanceSendrate.Evaluate(Vector3.Distance(pos1, pos2)); + } + + /// + /// Registers message handlers + /// + public override void OnNetworkSpawn() + { + m_LastSentRot = transform.rotation; + m_LastSentPos = transform.position; + + m_LerpStartPos = transform.position; + m_LerpStartRot = transform.rotation; + + m_LerpEndPos = transform.position; + m_LerpEndRot = transform.rotation; + } + + private void Update() + { + if (IsOwner) + { + if (NetworkManager.NetworkTime - m_LastSendTime >= (1f / FixedSendsPerSecond) && (Vector3.Distance(transform.position, m_LastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, m_LastSentRot) > MinDegrees)) + { + m_LastSendTime = NetworkManager.NetworkTime; + m_LastSentPos = transform.position; + m_LastSentRot = transform.rotation; + + if (IsServer) + { + ApplyTransformClientRpc(transform.position, transform.rotation.eulerAngles, + new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = NetworkManager.ConnectedClientsList.Where(c => c.ClientId != OwnerClientId).Select(c => c.ClientId).ToArray() } }); + } + else + { + SubmitTransformServerRpc(transform.position, transform.rotation.eulerAngles); + } + } + } + else + { + //If we are server and interpolation is turned on for server OR we are not server and interpolation is turned on + if ((IsServer && InterpolateServer && InterpolatePosition) || (!IsServer && InterpolatePosition)) + { + if (Vector3.Distance(transform.position, m_LerpEndPos) > SnapDistance) + { + //Snap, set T to 1 (100% of the lerp) + m_LerpTime = 1f; + } + + float sendDelay = (IsServer || !EnableRange || !AssumeSyncedSends || NetworkManager.ConnectedClients[NetworkManager.LocalClientId].PlayerObject == null) ? (1f / FixedSendsPerSecond) : GetTimeForLerp(transform.position, NetworkManager.ConnectedClients[NetworkManager.LocalClientId].PlayerObject.transform.position); + m_LerpTime += Time.unscaledDeltaTime / sendDelay; + + if (ExtrapolatePosition && Time.unscaledTime - m_LastReceiveTime < sendDelay * MaxSendsToExtrapolate) + { + transform.position = Vector3.LerpUnclamped(m_LerpStartPos, m_LerpEndPos, m_LerpTime); + } + else + { + transform.position = Vector3.Lerp(m_LerpStartPos, m_LerpEndPos, m_LerpTime); + } + + if (ExtrapolatePosition && Time.unscaledTime - m_LastReceiveTime < sendDelay * MaxSendsToExtrapolate) + { + transform.rotation = Quaternion.SlerpUnclamped(m_LerpStartRot, m_LerpEndRot, m_LerpTime); + } + else + { + transform.rotation = Quaternion.Slerp(m_LerpStartRot, m_LerpEndRot, m_LerpTime); + } + } + } + + if (IsServer && EnableRange && EnableNonProvokedResendChecks) + { + CheckForMissedSends(); + } + } + + [ClientRpc] + private void ApplyTransformClientRpc(Vector3 position, Vector3 eulerAngles, ClientRpcParams rpcParams = default) + { + if (enabled) + { + ApplyTransformInternal(position, Quaternion.Euler(eulerAngles)); + } + } + + private void ApplyTransformInternal(Vector3 position, Quaternion rotation) + { + if (!enabled) + { + return; + } + + if (InterpolatePosition && (!IsServer || InterpolateServer)) + { + m_LastReceiveTime = Time.unscaledTime; + m_LerpStartPos = transform.position; + m_LerpStartRot = transform.rotation; + m_LerpEndPos = position; + m_LerpEndRot = rotation; + m_LerpTime = 0; + } + else + { + transform.position = position; + transform.rotation = rotation; + } + } + + [ServerRpc] + private void SubmitTransformServerRpc(Vector3 position, Vector3 eulerAngles, ServerRpcParams rpcParams = default) + { + if (!enabled) + { + return; + } + + if (IsMoveValidDelegate != null && !IsMoveValidDelegate(rpcParams.Receive.SenderClientId, m_LerpEndPos, position)) + { + //Invalid move! + //TODO: Add rubber band (just a message telling them to go back) + return; + } + + if (!IsClient) + { + // Dedicated server + ApplyTransformInternal(position, Quaternion.Euler(eulerAngles)); + } + + if (EnableRange) + { + for (int i = 0; i < NetworkManager.ConnectedClientsList.Count; i++) + { + if (!m_ClientSendInfo.TryGetValue(NetworkManager.ConnectedClientsList[i].ClientId, out ClientSendInfo info)) + { + info = new ClientSendInfo() { LastMissedPosition = null, LastMissedRotation = null, LastSent = 0 }; + m_ClientSendInfo.Add(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, info); + } + + Vector3? receiverPosition = NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject.transform.position); + Vector3? senderPosition = NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject.transform.position); + + if ((receiverPosition == null || senderPosition == null && NetworkManager.NetworkTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.NetworkTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) + { + info.LastSent = NetworkManager.NetworkTime; + info.LastMissedPosition = null; + info.LastMissedRotation = null; + + ApplyTransformClientRpc(position, eulerAngles, + new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { NetworkManager.ConnectedClientsList[i].ClientId } } }); + } + else + { + info.LastMissedPosition = position; + info.LastMissedRotation = Quaternion.Euler(eulerAngles); + } + } + } + else + { + ApplyTransformClientRpc(position, eulerAngles, + new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = NetworkManager.ConnectedClientsList.Where(c => c.ClientId != OwnerClientId).Select(c => c.ClientId).ToArray() } }); + } + } + + private void CheckForMissedSends() + { + for (int i = 0; i < NetworkManager.ConnectedClientsList.Count; i++) + { + if (!m_ClientSendInfo.ContainsKey(NetworkManager.ConnectedClientsList[i].ClientId)) + { + m_ClientSendInfo.Add(NetworkManager.ConnectedClientsList[i].ClientId, new ClientSendInfo() + { + LastMissedPosition = null, + LastMissedRotation = null, + LastSent = 0 + }); + } + + ClientSendInfo info = m_ClientSendInfo[NetworkManager.ConnectedClientsList[i].ClientId]; + Vector3? receiverPosition = NetworkManager.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClientsList[i].PlayerObject.transform.position); + Vector3? senderPosition = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); + + if ((receiverPosition == null || senderPosition == null && NetworkManager.NetworkTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.NetworkTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) + { + /* why is this??? ->*/ + Vector3? pos = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); + /* why is this??? ->*/ + Vector3? rot = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.rotation.eulerAngles); + + if (info.LastMissedPosition != null && info.LastMissedRotation != null) + { + info.LastSent = NetworkManager.NetworkTime; + + ApplyTransformClientRpc(info.LastMissedPosition.Value, info.LastMissedRotation.Value.eulerAngles, + new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { NetworkManager.ConnectedClientsList[i].ClientId } } }); + + info.LastMissedPosition = null; + info.LastMissedRotation = null; + } + } + } + } + + /// + /// Teleports the transform to the given position and rotation + /// + /// The position to teleport to + /// The rotation to teleport to + public void Teleport(Vector3 position, Quaternion rotation) + { + if (InterpolateServer && IsServer || IsClient) + { + m_LerpStartPos = position; + m_LerpStartRot = rotation; + m_LerpEndPos = position; + m_LerpEndRot = rotation; + m_LerpTime = 0; + } + } + } +} \ No newline at end of file diff --git a/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta b/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta new file mode 100644 index 0000000000..d55a2a45cd --- /dev/null +++ b/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df4fbe773fc544428171994e08b0483f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Packages/manifest.json b/testproject/Packages/manifest.json index 4bc3118fdb..92929ff725 100644 --- a/testproject/Packages/manifest.json +++ b/testproject/Packages/manifest.json @@ -6,6 +6,8 @@ "com.unity.ide.vscode": "1.2.3", "com.unity.multiplayer.mlapi": "file:../../com.unity.multiplayer.mlapi", "com.unity.multiplayer.transport.utp": "file:../../com.unity.multiplayer.transport.utp", + "com.veriorpies.parrelsync": "https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync", + "com.mlapi.contrib.transport.litenetlib": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", "com.unity.package-validation-suite": "0.19.2-preview", "com.unity.test-framework": "1.1.27", "com.unity.test-framework.performance": "2.3.1-preview", diff --git a/testproject/Packages/packages-lock.json b/testproject/Packages/packages-lock.json index bc2860bfca..334802f36d 100644 --- a/testproject/Packages/packages-lock.json +++ b/testproject/Packages/packages-lock.json @@ -1,5 +1,12 @@ { "dependencies": { + "com.mlapi.contrib.transport.litenetlib": { + "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "3f0350ae57befd5ea7deabb1db310eb77704f58e" + }, "com.unity.burst": { "version": "1.3.2", "depth": 3, @@ -180,6 +187,13 @@ "com.unity.modules.imgui": "1.0.0" } }, + "com.veriorpies.parrelsync": { + "version": "https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "bb3d5067e49e403d8b8ba15c036d313b4dd2c696" + }, "com.unity.modules.ai": { "version": "1.0.0", "depth": 0, From 03262b3f9d7fbb6ae3ed9026f378a0cbcfa91362 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 23 Jul 2021 16:40:48 -0400 Subject: [PATCH 03/74] # --- .../Prototyping/Interpolator.meta | 8 + ...ufferedLinearInterpolatorVector3Factory.cs | 152 ++ ...edLinearInterpolatorVector3Factory.cs.meta | 11 + .../Prototyping/Interpolator/IInterpolator.cs | 20 + .../Interpolator/IInterpolator.cs.meta | 11 + .../Interpolator/NoInterpolationFactory.cs | 43 + .../NoInterpolationFactory.cs.meta | 11 + .../PositionLinearInterpolatorFactory.cs | 60 + .../PositionLinearInterpolatorFactory.cs.meta | 11 + .../Prototyping/NetworkTransform.cs | 85 +- .../Runtime/Core/NetworkManager.cs | 2 +- testproject/Assets/MoveInCircle.cs | 18 +- testproject/Assets/Prefabs/PlayerCube.prefab | 2 +- testproject/Assets/Scenes/SampleScene.unity | 154 +- testproject/Assets/Scenes/ZooSam.unity | 1338 +++++++++++++++++ testproject/Assets/Scenes/ZooSam.unity.meta | 7 + .../Assets/Scripts/NetworkTransformLegacy.cs | 12 +- .../ProjectSettings/EditorBuildSettings.asset | 3 + 18 files changed, 1921 insertions(+), 27 deletions(-) create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta create mode 100644 testproject/Assets/Scenes/ZooSam.unity create mode 100644 testproject/Assets/Scenes/ZooSam.unity.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta new file mode 100644 index 0000000000..0bfe5f770f --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32190d476d5de4dc8b7ee8208bde82a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs new file mode 100644 index 0000000000..1270401549 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -0,0 +1,152 @@ +using System.Collections.Generic; +using MLAPI; +using MLAPI.Timing; +using UnityEngine; + +namespace DefaultNamespace +{ + public class BufferedLinearInterpolatorVector3Factory : InterpolatorVector3Factory + { + public override IInterpolator CreateInterpolator() + { + return new BufferedLinearInterpolatorVector3(); + } + } + + public abstract class BufferedLinearInterpolator : IInterpolator where T : struct + { + public int BufferAmountTick = 3; + public const float InterpolationConfigTimeSec = 0.100f; // todo remove const for config + + struct BufferedItem + { + public T item; + public int tickSent; + } + + // private double ServerTime => NetworkManager.Singleton.ServerTime.Time; + private double ServerTick => NetworkManager.Singleton.ServerTime.Tick; + private double ServerTickBeingHandledForBuffering => ServerTick;// - BufferAmountTick; + + T m_LerpStartValue; + T m_LerpEndValue; + + private T m_CurrentValue; + + private List> m_Buffer = new List>(); + + private int samPreviousToLast; + private void TryConsumeFromBuffer() + { + var count = m_Buffer.Count; + int nbConsumed = 0; + for (int i = m_Buffer.Count - 1; i >= 0; i--) + { + var bufferedValue = m_Buffer[i]; + if (bufferedValue.tickSent <= ServerTickBeingHandledForBuffering) + { + m_LerpStartValue = m_LerpEndValue; + m_LerpEndValue = bufferedValue.item; + samPreviousToLast = m_ValueLastTick; + m_ValueLastTick = bufferedValue.tickSent; + Debug.Log($"hellooooo {bufferedValue.tickSent}"); + m_Buffer.RemoveAt(i); + nbConsumed++; + + var pos = m_LerpEndValue is Vector3 value ? value : default; + Debug.DrawLine(pos, pos + Random.Range(0f, 1f) * Vector3.up + Random.Range(0f, 1f) * Vector3.left, Color.green, 10, false); + + + float maxTickAllowedInBuffer = NetworkManager.Singleton.NetworkTickSystem.TickRate; + + // we're not getting values regularly from the network. This means interpolation needs to adapt + m_InterpolationTimeSec = InterpolationConfigTimeSec; + + // if (ServerTickBeingHandledForBuffering - bufferedValue.tickSent < maxTickAllowedInBuffer) + // { + // // Consume one value at a time, but make sure we don't have an ever growing buffer. We only use one item if we're under our max amount + // break; + // } + + // Debug.LogWarning("Consuming more than one value at a time from buffer"); // todo remove? + } + } + + Debug.Log($"Buffer size: {count}, nb consumed: {nbConsumed}"); + var pos2 = m_LerpEndValue is Vector3 value2 ? value2 : default; + + Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueLastTick - samPreviousToLast), Color.cyan, 10, false); + for (int i = 0; i < count; i++) + { + Debug.DrawLine(pos2 + Vector3.up * (i+1), pos2 + Vector3.up* (i+1) + Vector3.left, Color.white, 10, false); + } + } + + public void Update(float deltaTime) + { + TryConsumeFromBuffer(); + + var timeB = new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + var timeA = timeB - timeB.FixedDeltaTime;// + double range = timeB.Time - timeA.Time; + float t = (float)((NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - timeA.FixedDeltaTime - timeA.Time) / range); + Debug.Log($"ttttttttttttt {t}"); + // m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); + m_CurrentValue = m_LerpEndValue; + + var pos = m_CurrentValue is Vector3 value ? value : default; + Debug.DrawLine(pos, pos + Vector3.up, Color.magenta, 10, false); + } + + public void FixedUpdate(float fixedDeltaTime) + { + + } + + + // private int timeInitializedDebug = 20; // number so we wait a few frames to grab the offset. this is debug + // private double clientServerOffsetDebug; + private float m_InterpolationTimeSec; + private int m_ValueLastTick; + + public void AddMeasurement(T newMeasurement, int SentTick) + { + var debugPos = newMeasurement is Vector3 value ? value : default; + Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); + + Debug.Log($"Adding measurement {Time.time}"); + m_Buffer.Add(new BufferedItem() {item = newMeasurement, tickSent = SentTick}); + m_Buffer.Sort((item1, item2) => item2.tickSent.CompareTo(item1.tickSent)); + } + + public T GetInterpolatedValue() + { + return m_CurrentValue; + } + + public void Teleport(T value) + { + m_CurrentValue = value; + m_LerpEndValue = value; + m_LerpStartValue = value; + } + + public abstract T Interpolate(T start, T end, float time); + } + + public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator + { + public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) + { + return Vector3.LerpUnclamped(start, end, time); + } + } + + public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator + { + public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) + { + return Quaternion.Slerp(start, end, time); + } + } +} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta new file mode 100644 index 0000000000..957c278840 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 199dd81621cd441c19cc731e8d29a217 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs new file mode 100644 index 0000000000..f4cf96ee92 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +public interface IInterpolator +{ + public void Update(float deltaTime); + public void FixedUpdate(float fixedDeltaTime); + public void AddMeasurement(T newMeasurement, int SentTick); + public T GetInterpolatedValue(); + public void Teleport(T value); +} + +public abstract class InterpolatorFactory : ScriptableObject +{ + public abstract IInterpolator CreateInterpolator(); +} + +public abstract class InterpolatorVector3Factory : InterpolatorFactory +{ + +} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta new file mode 100644 index 0000000000..dcef404a65 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 071f976e9c2d74c5bb836da710fe368e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs new file mode 100644 index 0000000000..d04e8296f9 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -0,0 +1,43 @@ +using UnityEngine; + +namespace DefaultNamespace +{ + [CreateAssetMenu(fileName = "NoInterpolation", menuName = "MLAPI/NoInterpolation", order = 1)] + public class NoInterpolationFactory : InterpolatorVector3Factory + { + public override IInterpolator CreateInterpolator() + { + return new NoInterpolation(); + } + } + + public class NoInterpolation : IInterpolator + { + public Vector3 m_Current; + + public void Update(float deltaTime) + { + // nothing + } + + public void FixedUpdate(float fixedDeltaTime) + { + + } + + public void AddMeasurement(Vector3 newMeasurement, int SentTick) + { + m_Current = newMeasurement; + } + + public Vector3 GetInterpolatedValue() + { + return m_Current; + } + + public void Teleport(Vector3 value) + { + m_Current = value; + } + } +} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta new file mode 100644 index 0000000000..46b8fdc1d8 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6fd1b15ec60324368a3c724e031254f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs new file mode 100644 index 0000000000..8ffc612367 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -0,0 +1,60 @@ +using System; +using UnityEngine; + +namespace DefaultNamespace +{ + [CreateAssetMenu(fileName = "PositionLinearInterpolator", menuName = "MLAPI/PositionLinearInterpolator", order = 1)] + public class PositionLinearInterpolatorFactory : InterpolatorVector3Factory + { + [SerializeField] + private float m_MaxLerpTime = 0.2f; + + public override IInterpolator CreateInterpolator() + { + return new PositionLinearInterpolator(m_MaxLerpTime); + } + } + + public class PositionLinearInterpolator : IInterpolator + { + public float m_CurrentTime; + public Vector3 m_StartVector; + public Vector3 m_EndVector; + public Vector3 m_UpdatedVector; + + private float m_MaxLerpTime; + + public PositionLinearInterpolator(float maxLerpTime) + { + m_MaxLerpTime = maxLerpTime; + } + + public void Update(float deltaTime) + { + m_CurrentTime += deltaTime; + m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / m_MaxLerpTime); + } + + public void FixedUpdate(float fixedDeltaTime) + { + + } + + public void AddMeasurement(Vector3 newMeasurement, int SentTick) + { + m_EndVector = newMeasurement; + m_CurrentTime = 0; + m_StartVector = m_UpdatedVector; + } + + public Vector3 GetInterpolatedValue() + { + return m_UpdatedVector; + } + + public void Teleport(Vector3 value) + { + m_UpdatedVector = value; + } + } +} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta new file mode 100644 index 0000000000..634ea8c755 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d27105c543ddf4083b4918635b19348a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index c311c957d1..a0455e6fb7 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,8 +1,10 @@ using System; +using DefaultNamespace; using MLAPI.NetworkVariable; using MLAPI.Serialization; using MLAPI.Transports; using UnityEngine; +using UnityEngine.UIElements; namespace MLAPI.Prototyping { @@ -31,12 +33,28 @@ private class NetworkState : INetworkSerializable public Quaternion Rotation; public Vector3 Scale; + public int SentTick; + + public NetworkState(NetworkState copy) + { + InLocalSpace = copy.InLocalSpace; + Position = copy.Position; + Rotation = copy.Rotation; + Scale = copy.Scale; + SentTick = copy.SentTick; + } + + public NetworkState() + { + } + public void NetworkSerialize(NetworkSerializer serializer) { serializer.Serialize(ref InLocalSpace); serializer.Serialize(ref Position); serializer.Serialize(ref Rotation); serializer.Serialize(ref Scale); + serializer.Serialize(ref SentTick); } } @@ -51,7 +69,8 @@ public void NetworkSerialize(NetworkSerializer serializer) /// The network channel to use send updates /// [Tooltip("The network channel to use send updates")] - public NetworkChannel Channel = NetworkChannel.PositionUpdate; + private NetworkChannel Channel = NetworkChannel.SyncChannel; + // private NetworkChannel Channel = NetworkChannel.PositionUpdate; /// /// Sets whether this transform should sync in local space or in world space. @@ -68,6 +87,8 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; + public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(); + private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native private readonly NetworkVariable m_NetworkState = new NetworkVariable(new NetworkState()); private NetworkState m_PrevNetworkState; @@ -92,13 +113,13 @@ private bool IsNetworkStateDirty(NetworkState networkState) isDirty |= networkState.InLocalSpace != InLocalSpace; if (InLocalSpace) { - isDirty |= networkState.Position != m_Transform.localPosition; + isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); isDirty |= networkState.Rotation != m_Transform.localRotation; isDirty |= networkState.Scale != m_Transform.localScale; } else { - isDirty |= networkState.Position != m_Transform.position; + isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); isDirty |= networkState.Rotation != m_Transform.rotation; isDirty |= networkState.Scale != m_Transform.lossyScale; } @@ -106,9 +127,13 @@ private bool IsNetworkStateDirty(NetworkState networkState) return isDirty; } + private int previousTickSam; + private Vector3 previousPosSam; private void UpdateNetworkState() { m_NetworkState.Value.InLocalSpace = InLocalSpace; + // m_NetworkState.Value.SentTime = Time.realtimeSinceStartup; + m_NetworkState.Value.SentTick = NetworkManager.Singleton.LocalTime.Tick; if (InLocalSpace) { m_NetworkState.Value.Position = m_Transform.localPosition; @@ -122,11 +147,18 @@ private void UpdateNetworkState() m_NetworkState.Value.Scale = m_Transform.lossyScale; } + Debug.Log($"sam asdf distance {Math.Round((m_NetworkState.Value.Position - previousPosSam).magnitude, 2)} tick diff {m_NetworkState.Value.SentTick - previousTickSam} sam"); + previousTickSam = m_NetworkState.Value.SentTick; + previousPosSam = m_NetworkState.Value.Position; + m_NetworkState.SetDirty(true); } private void ApplyNetworkState(NetworkState netState) { + netState = new NetworkState(netState); + netState.Position = PositionInterpolator.GetInterpolatedValue(); + InLocalSpace = netState.InLocalSpace; if (InLocalSpace) { @@ -146,6 +178,8 @@ private void ApplyNetworkState(NetworkState netState) m_PrevNetworkState = netState; } + + private int oldTick; private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { if (!NetworkObject.IsSpawned) @@ -160,7 +194,12 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) return; } - ApplyNetworkState(newState); + // PositionInterpolator.AddMeasurement(newState.Position, NetworkManager.Singleton.ServerTime.Time); + + Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); + Debug.Log($"diff tick sam {(newState.SentTick - oldState.SentTick, 2)}"); + // oldTick = NetworkManager.Singleton.ServerTime.Tick; + PositionInterpolator.AddMeasurement(newState.Position, newState.SentTick); } private void UpdateNetVarPerms() @@ -184,6 +223,7 @@ private void UpdateNetVarPerms() private void Awake() { m_Transform = transform; + PositionInterpolator.Teleport(m_Transform.position); UpdateNetVarPerms(); @@ -196,6 +236,10 @@ private void Awake() public override void OnNetworkSpawn() { m_PrevNetworkState = null; + if (enabled) // todo Luke fix your UX + { + NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; + } } private void OnDestroy() @@ -203,24 +247,45 @@ private void OnDestroy() m_NetworkState.OnValueChanged -= OnNetworkStateChanged; } - private void FixedUpdate() + private void NetworkTickUpdate() { if (!NetworkObject.IsSpawned) { return; } - if (CanUpdateTransform && IsNetworkStateDirty(m_NetworkState.Value)) + if (CanUpdateTransform) //&& IsNetworkStateDirty(m_NetworkState.Value)) { UpdateNetworkState(); } else { - if (IsNetworkStateDirty(m_PrevNetworkState)) - { - Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); - } + // if (IsNetworkStateDirty(m_PrevNetworkState)) + // { + // Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); + // ApplyNetworkState(m_NetworkState.Value); + // } + + // PositionInterpolator.FixedUpdate(Time.fixedDeltaTime); + } + } + + private int debugOldTime = 0; + + private void Update() + { + // Debug.Log("gaga "+Math.Round(Time.time - (float)NetworkManager.Singleton.ServerTime.Time, 2)); + // Debug.Log($"sam {Math.Round(NetworkManager.Singleton.ServerTime.Time - debugOldTime, 2)}"); + // debugOldTime = NetworkManager.Singleton.ServerTime.Time; + if (!NetworkObject.IsSpawned) + { + return; + } + + if (!CanUpdateTransform) + { + PositionInterpolator.Update(Time.deltaTime); ApplyNetworkState(m_NetworkState.Value); } } diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs index 2cc1765c58..8d7fe09ed4 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs @@ -396,7 +396,7 @@ private void Initialize(bool server) } else { - NetworkTimeSystem = new NetworkTimeSystem(1.0 / NetworkConfig.TickRate, 1.0 / NetworkConfig.TickRate, 0.2); + NetworkTimeSystem = new NetworkTimeSystem(1.0 / NetworkConfig.TickRate, 3.0 / NetworkConfig.TickRate, 0.2); } NetworkTickSystem = new NetworkTickSystem(NetworkConfig.TickRate, 0, 0); diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/MoveInCircle.cs index 3586378e93..30ec26bdec 100644 --- a/testproject/Assets/MoveInCircle.cs +++ b/testproject/Assets/MoveInCircle.cs @@ -1,7 +1,7 @@ using MLAPI; using UnityEngine; -public class MoveInCircle : MonoBehaviour +public class MoveInCircle : NetworkBehaviour { [SerializeField] private float m_MoveSpeed = 5; @@ -9,12 +9,22 @@ public class MoveInCircle : MonoBehaviour [SerializeField] private float m_RotationSpeed = 30; - void Update() + private Vector3 oldPosition; + + public override void OnNetworkSpawn() + { + base.OnNetworkSpawn();// + NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; + } + + void NetworkTickUpdate() // doesn't work with Update? { if (NetworkManager.Singleton.IsServer) { - transform.position = transform.position + m_MoveSpeed * transform.forward * Time.deltaTime; - transform.Rotate(0, m_RotationSpeed * Time.deltaTime, 0); + oldPosition = transform.position; + transform.position = transform.position + transform.forward * (m_MoveSpeed * NetworkManager.LocalTime.FixedDeltaTime); + Debug.Log($"ewqqwe {(transform.position - oldPosition).magnitude}"); + transform.Rotate(0, m_RotationSpeed * NetworkManager.LocalTime.FixedDeltaTime, 0); } } } diff --git a/testproject/Assets/Prefabs/PlayerCube.prefab b/testproject/Assets/Prefabs/PlayerCube.prefab index fc029f0998..d2dea896cf 100644 --- a/testproject/Assets/Prefabs/PlayerCube.prefab +++ b/testproject/Assets/Prefabs/PlayerCube.prefab @@ -240,7 +240,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8685790303553767886} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: diff --git a/testproject/Assets/Scenes/SampleScene.unity b/testproject/Assets/Scenes/SampleScene.unity index 82e9518f67..5d5778b190 100644 --- a/testproject/Assets/Scenes/SampleScene.unity +++ b/testproject/Assets/Scenes/SampleScene.unity @@ -535,7 +535,7 @@ MonoBehaviour: m_EditorClassIdentifier: Authority: 0 Channel: 10 - InLocalSpace: 1 + InLocalSpace: 0 FixedSendsPerSecond: 30 --- !u!1 &403665142 GameObject: @@ -1131,6 +1131,150 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 +--- !u!1 &678326392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678326399} + - component: {fileID: 678326398} + - component: {fileID: 678326397} + - component: {fileID: 678326396} + - component: {fileID: 678326394} + - component: {fileID: 678326393} + - component: {fileID: 678326395} + m_Layer: 0 + m_Name: NetworkTransformBuffered + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &678326393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 +--- !u!114 &678326394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 1079447764 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &678326395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + Authority: 0 + Channel: 6 + InLocalSpace: 0 + FixedSendsPerSecond: 30 +--- !u!65 &678326396 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &678326397 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &678326398 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &678326399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 7.71, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} --- !u!1 &702051983 GameObject: m_ObjectHideFlags: 0 @@ -2267,9 +2411,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 2 + Authority: 0 Channel: 10 - InLocalSpace: 1 + InLocalSpace: 0 FixedSendsPerSecond: 30 --- !u!114 &1397037319 MonoBehaviour: @@ -2524,9 +2668,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 1 + Authority: 0 Channel: 10 - InLocalSpace: 1 + InLocalSpace: 0 FixedSendsPerSecond: 30 --- !u!114 &1402467446 MonoBehaviour: diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity new file mode 100644 index 0000000000..3efe91ef5b --- /dev/null +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -0,0 +1,1338 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.61387503, g: 0.6891243, b: 0.8396226, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 00cf8ac777c8c42e8967157f70fbfcbf, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0.22070551, g: 0.22116166, b: 0.45032424, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + 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 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 633987594} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &346676326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 346676330} + - component: {fileID: 346676329} + - component: {fileID: 346676328} + - component: {fileID: 346676327} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &346676327 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &346676328 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &346676329 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &346676330 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &620561609 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620561612} + - component: {fileID: 620561611} + - component: {fileID: 620561610} + - component: {fileID: 620561613} + m_Layer: 0 + m_Name: NetworkManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &620561610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3} + m_Name: + m_EditorClassIdentifier: + MessageBufferSize: 5120 + MaxConnections: 100 + MaxSentMessageQueueSize: 128 + ConnectAddress: 127.0.0.1 + ConnectPort: 7777 + ServerListenPort: 7777 + ServerWebsocketListenPort: 8887 + SupportWebsocket: 0 + Channels: [] + UseMLAPIRelay: 0 + MLAPIRelayAddress: 184.72.104.138 + MLAPIRelayPort: 8888 + MessageSendMode: 0 +--- !u!114 &620561611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} + m_Name: + m_EditorClassIdentifier: + DontDestroy: 1 + RunInBackground: 1 + LogLevel: 1 + NetworkConfig: + ProtocolVersion: 0 + NetworkTransport: {fileID: 620561610} + RegisteredScenes: + - SampleScene + - ZooSam + AllowRuntimeSceneChanges: 0 + PlayerPrefab: {fileID: 8685790303553767886, guid: 96e0a72e30d0c46c8a5c9a750e8f5807, + type: 3} + NetworkPrefabs: [] + TickRate: 20 + ClientConnectionBufferTimeout: 10 + ConnectionApproval: 0 + ConnectionData: + EnableTimeResync: 0 + TimeResyncInterval: 30 + EnableNetworkVariable: 1 + EnsureNetworkVariableLengthSafety: 0 + EnableSceneManagement: 1 + ForceSamePrefabs: 1 + RecycleNetworkIds: 1 + NetworkIdRecycleDelay: 120 + RpcHashSize: 0 + LoadSceneTimeOut: 120 + EnableMessageBuffering: 1 + MessageBufferTimeout: 20 + EnableNetworkLogs: 1 +--- !u!4 &620561612 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &620561613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} + m_Name: + m_EditorClassIdentifier: + Port: 7777 + Address: 127.0.0.1 + PingInterval: 1 + DisconnectTimeout: 5 + ReconnectDelay: 0.5 + MaxConnectAttempts: 10 + channels: [] + MessageBufferSize: 5120 + SimulatePacketLossChance: 0 + SimulateMinLatency: 100 + SimulateMaxLatency: 100 +--- !u!1001 &627808638 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1333567166} + m_Modifications: + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SizeDelta.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -23.40039 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -23.800293 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247795, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Name + value: ExitButton + objectReference: {fileID: 0} + - target: {fileID: 5266522511616468950, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SceneMenuToLoad + value: + objectReference: {fileID: 11400000, guid: c10d995498e0c514a853c3506031d3fb, + type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3200770c16e3b2b4ebe7f604154faac7, type: 3} +--- !u!224 &627808639 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + m_PrefabInstance: {fileID: 627808638} + m_PrefabAsset: {fileID: 0} +--- !u!850595691 &633987594 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 3 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_TextureCompression: 1 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + 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 + m_PVRSampleCount: 500 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 +--- !u!1 &678326392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678326399} + - component: {fileID: 678326398} + - component: {fileID: 678326397} + - component: {fileID: 678326396} + - component: {fileID: 678326394} + - component: {fileID: 678326393} + - component: {fileID: 678326395} + m_Layer: 0 + m_Name: NetworkTransformBuffered + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &678326393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 +--- !u!114 &678326394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3301752843 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &678326395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + Authority: 0 + InLocalSpace: 0 + FixedSendsPerSecond: 30 +--- !u!65 &678326396 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &678326397 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &678326398 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &678326399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.25, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 702051986} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &702051983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 702051986} + - component: {fileID: 702051985} + - component: {fileID: 702051984} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &702051984 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_Enabled: 1 +--- !u!20 &702051985 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &702051986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} + m_LocalPosition: {x: 8.25, y: 18.45, z: -16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 678326399} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 0.3 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &849106629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 849106632} + - component: {fileID: 849106631} + - component: {fileID: 849106630} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &849106630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &849106631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &849106632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1333567162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1333567166} + - component: {fileID: 1333567165} + - component: {fileID: 1333567164} + - component: {fileID: 1333567163} + - component: {fileID: 1333567167} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1333567163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1333567164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1333567165 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1333567166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 627808639} + - {fileID: 1536251758} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1333567167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4390d966eb8724ba2907f775b34e94ea, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkManager: {fileID: 620561611} + ButtonsRoot: {fileID: 0} +--- !u!224 &1536251758 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + m_PrefabInstance: {fileID: 1928839749} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1643885206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643885211} + - component: {fileID: 1643885210} + - component: {fileID: 1643885209} + - component: {fileID: 1643885208} + - component: {fileID: 1643885207} + - component: {fileID: 1643885212} + - component: {fileID: 1643885213} + m_Layer: 0 + m_Name: NetworkTransformLegacy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1643885207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} + m_Name: + m_EditorClassIdentifier: + FixedSendsPerSecond: 20 + AssumeSyncedSends: 1 + InterpolatePosition: 1 + SnapDistance: 10 + InterpolateServer: 1 + MinMeters: 0.15 + MinDegrees: 1.5 + ExtrapolatePosition: 0 + MaxSendsToExtrapolate: 5 + Channel: + EnableRange: 0 + EnableNonProvokedResendChecks: 0 + DistanceSendrate: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 500 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!65 &1643885208 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1643885209 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1643885210 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1643885211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.29, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1643885212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3638589847 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &1643885213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 +--- !u!1001 &1928839749 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1333567166} + m_Modifications: + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_SizeDelta.x + value: -952 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_SizeDelta.y + value: -344 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6963777608485144162, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_Name + value: ConnectionModeButtons + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} diff --git a/testproject/Assets/Scenes/ZooSam.unity.meta b/testproject/Assets/Scenes/ZooSam.unity.meta new file mode 100644 index 0000000000..4945676ba3 --- /dev/null +++ b/testproject/Assets/Scenes/ZooSam.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4683469c9a191411fbda5e426765b2fc +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Scripts/NetworkTransformLegacy.cs b/testproject/Assets/Scripts/NetworkTransformLegacy.cs index 4ec7d6628a..e702a99b27 100644 --- a/testproject/Assets/Scripts/NetworkTransformLegacy.cs +++ b/testproject/Assets/Scripts/NetworkTransformLegacy.cs @@ -170,9 +170,9 @@ private void Update() { if (IsOwner) { - if (NetworkManager.NetworkTime - m_LastSendTime >= (1f / FixedSendsPerSecond) && (Vector3.Distance(transform.position, m_LastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, m_LastSentRot) > MinDegrees)) + if (NetworkManager.LocalTime.FixedTime - m_LastSendTime >= (1f / FixedSendsPerSecond) && (Vector3.Distance(transform.position, m_LastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, m_LastSentRot) > MinDegrees)) { - m_LastSendTime = NetworkManager.NetworkTime; + m_LastSendTime = (float) NetworkManager.LocalTime.FixedTime; m_LastSentPos = transform.position; m_LastSentRot = transform.rotation; @@ -293,9 +293,9 @@ private void SubmitTransformServerRpc(Vector3 position, Vector3 eulerAngles, Ser Vector3? receiverPosition = NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject.transform.position); Vector3? senderPosition = NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject.transform.position); - if ((receiverPosition == null || senderPosition == null && NetworkManager.NetworkTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.NetworkTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) + if ((receiverPosition == null || senderPosition == null && NetworkManager.LocalTime.FixedTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.LocalTime.FixedTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) { - info.LastSent = NetworkManager.NetworkTime; + info.LastSent = (float) NetworkManager.LocalTime.FixedTime; info.LastMissedPosition = null; info.LastMissedRotation = null; @@ -334,7 +334,7 @@ private void CheckForMissedSends() Vector3? receiverPosition = NetworkManager.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClientsList[i].PlayerObject.transform.position); Vector3? senderPosition = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); - if ((receiverPosition == null || senderPosition == null && NetworkManager.NetworkTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.NetworkTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) + if ((receiverPosition == null || senderPosition == null && NetworkManager.LocalTime.FixedTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.LocalTime.FixedTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) { /* why is this??? ->*/ Vector3? pos = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); @@ -343,7 +343,7 @@ private void CheckForMissedSends() if (info.LastMissedPosition != null && info.LastMissedRotation != null) { - info.LastSent = NetworkManager.NetworkTime; + info.LastSent = (float) NetworkManager.LocalTime.FixedTime; ApplyTransformClientRpc(info.LastMissedPosition.Value, info.LastMissedRotation.Value.eulerAngles, new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { NetworkManager.ConnectedClientsList[i].ClientId } } }); diff --git a/testproject/ProjectSettings/EditorBuildSettings.asset b/testproject/ProjectSettings/EditorBuildSettings.asset index f4245315f9..58972bd5e9 100644 --- a/testproject/ProjectSettings/EditorBuildSettings.asset +++ b/testproject/ProjectSettings/EditorBuildSettings.asset @@ -5,6 +5,9 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: + - enabled: 1 + path: Assets/Scenes/ZooSam.unity + guid: 4683469c9a191411fbda5e426765b2fc - enabled: 1 path: Assets/MainMenu.unity guid: 21c7fd68cda9dd9488fc0cc01f885e39 From c81f65a4c8980c39a913e1437d0ef7af71bdd7a7 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 28 Jul 2021 10:20:27 -0400 Subject: [PATCH 04/74] # --- .../BufferedLinearInterpolatorVector3.asset | 15 ++++ ...fferedLinearInterpolatorVector3.asset.meta | 8 ++ ...ufferedLinearInterpolatorVector3Factory.cs | 82 +++++++++++-------- .../Prototyping/Interpolator/IInterpolator.cs | 13 ++- .../Interpolator/NoInterpolationFactory.cs | 29 ++++--- .../PositionLinearInterpolatorFactory.cs | 27 +++--- .../Prototyping/NetworkTransform.cs | 16 ++-- .../Prototyping/NetworkTransform.cs.meta | 4 +- testproject/Assets/Prefabs/PlayerCube.prefab | 34 ++++---- testproject/Assets/Scenes/ZooSam.unity | 4 +- 10 files changed, 139 insertions(+), 93 deletions(-) create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset create mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset new file mode 100644 index 0000000000..139fd91530 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 199dd81621cd441c19cc731e8d29a217, type: 3} + m_Name: BufferedLinearInterpolatorVector3 + m_EditorClassIdentifier: + InterpolationTime: 0.1 diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta new file mode 100644 index 0000000000..e43ac9cd50 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a882403a7bf6247cd881a093a9a3f537 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index 1270401549..85be5908cc 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -5,37 +5,62 @@ namespace DefaultNamespace { - public class BufferedLinearInterpolatorVector3Factory : InterpolatorVector3Factory + public abstract class BufferedLinearInterpolatorFactory : InterpolatorFactory + { + [SerializeField] + public float InterpolationTime = 0.100f; + } + + [CreateAssetMenu(fileName = "BufferedLinearInterpolatorVector3", menuName = BaseMenuName + "BufferedLinearInterpolatorVector3", order = 1)] + public class BufferedLinearInterpolatorVector3Factory : BufferedLinearInterpolatorFactory { public override IInterpolator CreateInterpolator() { - return new BufferedLinearInterpolatorVector3(); + return new BufferedLinearInterpolatorVector3(this); + } + } + + [CreateAssetMenu(fileName = "BufferedLinearInterpolatorQuaternion", menuName = BaseMenuName + "BufferedLinearInterpolatorQuaternion", order = 1)] + public class BufferedLinearInterpolatorQuaternionFactory : BufferedLinearInterpolatorFactory + { + public override IInterpolator CreateInterpolator() + { + return new BufferedLinearInterpolatorQuaternion(this); } } public abstract class BufferedLinearInterpolator : IInterpolator where T : struct { - public int BufferAmountTick = 3; - public const float InterpolationConfigTimeSec = 0.100f; // todo remove const for config + public int AdditionalBufferAmountTick = 3; // todo config, todo expose global config, todo use in actual code + // public const float InterpolationConfigTimeSec = 0.100f; // todo remove const for config + + public float InterpolationConfigTimeSec => m_Factory.InterpolationTime; // todo use with range struct BufferedItem { public T item; - public int tickSent; + public NetworkTime tickSent; } - // private double ServerTime => NetworkManager.Singleton.ServerTime.Time; - private double ServerTick => NetworkManager.Singleton.ServerTime.Tick; - private double ServerTickBeingHandledForBuffering => ServerTick;// - BufferAmountTick; + // private double ServerTick => NetworkManager.Singleton.ServerTime.Tick; + protected virtual double ServerTickBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Tick; // override this if you want configurable buffering, right now using ServerTick's own global buffering T m_LerpStartValue; T m_LerpEndValue; - private T m_CurrentValue; + private NetworkTime m_ValueLastTick; private List> m_Buffer = new List>(); - private int samPreviousToLast; + private readonly BufferedLinearInterpolatorFactory m_Factory; + + public BufferedLinearInterpolator(BufferedLinearInterpolatorFactory factory) + { + m_Factory = factory; + } + + private NetworkTime samPreviousToLast; + private void TryConsumeFromBuffer() { var count = m_Buffer.Count; @@ -43,7 +68,7 @@ private void TryConsumeFromBuffer() for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; - if (bufferedValue.tickSent <= ServerTickBeingHandledForBuffering) + if (bufferedValue.tickSent.Tick <= ServerTickBeingHandledForBuffering) { m_LerpStartValue = m_LerpEndValue; m_LerpEndValue = bufferedValue.item; @@ -55,27 +80,13 @@ private void TryConsumeFromBuffer() var pos = m_LerpEndValue is Vector3 value ? value : default; Debug.DrawLine(pos, pos + Random.Range(0f, 1f) * Vector3.up + Random.Range(0f, 1f) * Vector3.left, Color.green, 10, false); - - - float maxTickAllowedInBuffer = NetworkManager.Singleton.NetworkTickSystem.TickRate; - - // we're not getting values regularly from the network. This means interpolation needs to adapt - m_InterpolationTimeSec = InterpolationConfigTimeSec; - - // if (ServerTickBeingHandledForBuffering - bufferedValue.tickSent < maxTickAllowedInBuffer) - // { - // // Consume one value at a time, but make sure we don't have an ever growing buffer. We only use one item if we're under our max amount - // break; - // } - - // Debug.LogWarning("Consuming more than one value at a time from buffer"); // todo remove? } } Debug.Log($"Buffer size: {count}, nb consumed: {nbConsumed}"); var pos2 = m_LerpEndValue is Vector3 value2 ? value2 : default; - Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueLastTick - samPreviousToLast), Color.cyan, 10, false); + Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueLastTick.Tick - samPreviousToLast.Tick), Color.cyan, 10, false); for (int i = 0; i < count; i++) { Debug.DrawLine(pos2 + Vector3.up * (i+1), pos2 + Vector3.up* (i+1) + Vector3.left, Color.white, 10, false); @@ -86,7 +97,7 @@ public void Update(float deltaTime) { TryConsumeFromBuffer(); - var timeB = new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + var timeB = m_ValueLastTick;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); var timeA = timeB - timeB.FixedDeltaTime;// double range = timeB.Time - timeA.Time; float t = (float)((NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - timeA.FixedDeltaTime - timeA.Time) / range); @@ -98,25 +109,20 @@ public void Update(float deltaTime) Debug.DrawLine(pos, pos + Vector3.up, Color.magenta, 10, false); } - public void FixedUpdate(float fixedDeltaTime) + public void NetworkTickUpdate(float fixedDeltaTime) { } - // private int timeInitializedDebug = 20; // number so we wait a few frames to grab the offset. this is debug - // private double clientServerOffsetDebug; - private float m_InterpolationTimeSec; - private int m_ValueLastTick; - - public void AddMeasurement(T newMeasurement, int SentTick) + public void AddMeasurement(T newMeasurement, NetworkTime SentTick) { var debugPos = newMeasurement is Vector3 value ? value : default; Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); Debug.Log($"Adding measurement {Time.time}"); m_Buffer.Add(new BufferedItem() {item = newMeasurement, tickSent = SentTick}); - m_Buffer.Sort((item1, item2) => item2.tickSent.CompareTo(item1.tickSent)); + m_Buffer.Sort((item1, item2) => item2.tickSent.Tick.CompareTo(item1.tickSent.Tick)); } public T GetInterpolatedValue() @@ -124,7 +130,7 @@ public T GetInterpolatedValue() return m_CurrentValue; } - public void Teleport(T value) + public void Teleport(T value, NetworkTime SentTick) { m_CurrentValue = value; m_LerpEndValue = value; @@ -136,6 +142,8 @@ public void Teleport(T value) public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator { + public BufferedLinearInterpolatorVector3(BufferedLinearInterpolatorVector3Factory bufferedLinearInterpolatorVector3Factory) : base(bufferedLinearInterpolatorVector3Factory) { } + public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) { return Vector3.LerpUnclamped(start, end, time); @@ -148,5 +156,7 @@ public override Quaternion Interpolate(Quaternion start, Quaternion end, float t { return Quaternion.Slerp(start, end, time); } + + public BufferedLinearInterpolatorQuaternion(BufferedLinearInterpolatorFactory factory) : base(factory) { } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index f4cf96ee92..edfb268727 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -1,20 +1,17 @@ +using MLAPI.Timing; using UnityEngine; public interface IInterpolator { public void Update(float deltaTime); - public void FixedUpdate(float fixedDeltaTime); - public void AddMeasurement(T newMeasurement, int SentTick); + public void NetworkTickUpdate(float tickDeltaTime); + public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); - public void Teleport(T value); + public void Teleport(T value, NetworkTime sentTime); } public abstract class InterpolatorFactory : ScriptableObject { + public const string BaseMenuName = "MLAPI/Interpolator/"; public abstract IInterpolator CreateInterpolator(); } - -public abstract class InterpolatorVector3Factory : InterpolatorFactory -{ - -} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index d04e8296f9..d08df574e5 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -1,41 +1,50 @@ +using MLAPI.Timing; using UnityEngine; namespace DefaultNamespace { - [CreateAssetMenu(fileName = "NoInterpolation", menuName = "MLAPI/NoInterpolation", order = 1)] - public class NoInterpolationFactory : InterpolatorVector3Factory + [CreateAssetMenu(fileName = "NoInterpolationVector3", menuName = BaseMenuName + "NoInterpolationVector3", order = 1)] + public class NoInterpolationVector3Factory : InterpolatorFactory { public override IInterpolator CreateInterpolator() { - return new NoInterpolation(); + return new NoInterpolation(); } } - public class NoInterpolation : IInterpolator + [CreateAssetMenu(fileName = "NoInterpolationQuaternion", menuName = BaseMenuName + "NoInterpolationQuaternion", order = 1)] + public class NoInterpolationQuaternionFactory : InterpolatorFactory { - public Vector3 m_Current; + public override IInterpolator CreateInterpolator() + { + return new NoInterpolation(); + } + } + + public class NoInterpolation : IInterpolator + { + private T m_Current; public void Update(float deltaTime) { // nothing } - public void FixedUpdate(float fixedDeltaTime) + public void NetworkTickUpdate(float fixedDeltaTime) { - } - public void AddMeasurement(Vector3 newMeasurement, int SentTick) + public void AddMeasurement(T newMeasurement, NetworkTime sentTick) { m_Current = newMeasurement; } - public Vector3 GetInterpolatedValue() + public T GetInterpolatedValue() { return m_Current; } - public void Teleport(Vector3 value) + public void Teleport(T value, NetworkTime SentTick) { m_Current = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index 8ffc612367..10a7beee8c 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -1,17 +1,18 @@ using System; +using MLAPI.Timing; using UnityEngine; -namespace DefaultNamespace +namespace MLAPI { - [CreateAssetMenu(fileName = "PositionLinearInterpolator", menuName = "MLAPI/PositionLinearInterpolator", order = 1)] - public class PositionLinearInterpolatorFactory : InterpolatorVector3Factory + [CreateAssetMenu(fileName = "PositionLinearInterpolator", menuName = BaseMenuName + "PositionLinearInterpolator", order = 1)] + public class PositionLinearInterpolatorFactory : InterpolatorFactory { [SerializeField] - private float m_MaxLerpTime = 0.2f; + public float MaxLerpTime = 0.2f; public override IInterpolator CreateInterpolator() { - return new PositionLinearInterpolator(m_MaxLerpTime); + return new PositionLinearInterpolator(this); } } @@ -21,26 +22,24 @@ public class PositionLinearInterpolator : IInterpolator public Vector3 m_StartVector; public Vector3 m_EndVector; public Vector3 m_UpdatedVector; + private readonly PositionLinearInterpolatorFactory m_Factory; - private float m_MaxLerpTime; - - public PositionLinearInterpolator(float maxLerpTime) + public PositionLinearInterpolator(PositionLinearInterpolatorFactory factory) { - m_MaxLerpTime = maxLerpTime; + m_Factory = factory; } public void Update(float deltaTime) { m_CurrentTime += deltaTime; - m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / m_MaxLerpTime); + m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / m_Factory.MaxLerpTime); } - public void FixedUpdate(float fixedDeltaTime) + public void NetworkTickUpdate(float fixedDeltaTime) { - } - public void AddMeasurement(Vector3 newMeasurement, int SentTick) + public void AddMeasurement(Vector3 newMeasurement, NetworkTime SentTick) { m_EndVector = newMeasurement; m_CurrentTime = 0; @@ -52,7 +51,7 @@ public Vector3 GetInterpolatedValue() return m_UpdatedVector; } - public void Teleport(Vector3 value) + public void Teleport(Vector3 value, NetworkTime SentTick) { m_UpdatedVector = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index a0455e6fb7..831b2a47c0 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,10 +1,9 @@ using System; -using DefaultNamespace; using MLAPI.NetworkVariable; using MLAPI.Serialization; +using MLAPI.Timing; using MLAPI.Transports; using UnityEngine; -using UnityEngine.UIElements; namespace MLAPI.Prototyping { @@ -87,7 +86,11 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; - public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(); + [SerializeField] + private InterpolatorFactory m_PositionInterpolatorFactory; + + private IInterpolator PositionInterpolator; + // public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(ScriptableObject.CreateInstance()); // todo tmp, use default value instead private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native private readonly NetworkVariable m_NetworkState = new NetworkVariable(new NetworkState()); @@ -199,7 +202,7 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); Debug.Log($"diff tick sam {(newState.SentTick - oldState.SentTick, 2)}"); // oldTick = NetworkManager.Singleton.ServerTime.Tick; - PositionInterpolator.AddMeasurement(newState.Position, newState.SentTick); + PositionInterpolator.AddMeasurement(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); } private void UpdateNetVarPerms() @@ -223,7 +226,8 @@ private void UpdateNetVarPerms() private void Awake() { m_Transform = transform; - PositionInterpolator.Teleport(m_Transform.position); + PositionInterpolator = m_PositionInterpolatorFactory.CreateInterpolator(); + PositionInterpolator.Teleport(m_Transform.position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick)); UpdateNetVarPerms(); @@ -266,7 +270,7 @@ private void NetworkTickUpdate() // ApplyNetworkState(m_NetworkState.Value); // } - // PositionInterpolator.FixedUpdate(Time.fixedDeltaTime); + PositionInterpolator.NetworkTickUpdate(NetworkManager.ServerTime.FixedDeltaTime); } } diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta index 4023b38e0e..594420f118 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta @@ -3,7 +3,9 @@ guid: e96cb6065543e43c4a752faaa1468eb1 MonoImporter: externalObjects: {} serializedVersion: 2 - defaultReferences: [] + defaultReferences: + - m_PositionInterpolator: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, + type: 2} executionOrder: 0 icon: {instanceID: 0} userData: diff --git a/testproject/Assets/Prefabs/PlayerCube.prefab b/testproject/Assets/Prefabs/PlayerCube.prefab index d2dea896cf..771aa49a2f 100644 --- a/testproject/Assets/Prefabs/PlayerCube.prefab +++ b/testproject/Assets/Prefabs/PlayerCube.prefab @@ -15,11 +15,11 @@ GameObject: - component: {fileID: 8685790303553767872} - component: {fileID: -745482209883575862} - component: {fileID: 947981134} - - component: {fileID: 7023392397975834761} - component: {fileID: 8685790303553767876} - component: {fileID: 3809075828520557319} - component: {fileID: 7138389085065872747} - component: {fileID: -4978466230159947418} + - component: {fileID: 5715768330125915997} m_Layer: 0 m_Name: PlayerCube m_TagString: Target @@ -233,22 +233,6 @@ MonoBehaviour: AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 ---- !u!114 &7023392397975834761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8685790303553767886} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} - m_Name: - m_EditorClassIdentifier: - Authority: 1 - Channel: 10 - InLocalSpace: 0 - FixedSendsPerSecond: 30 --- !u!114 &8685790303553767876 MonoBehaviour: m_ObjectHideFlags: 0 @@ -300,3 +284,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9548116c10df1486ea12b7329b77c5cf, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &5715768330125915997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8685790303553767886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + Authority: 1 + InLocalSpace: 0 + FixedSendsPerSecond: 30 + m_PositionInterpolatorFactory: {fileID: 0} diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 3efe91ef5b..9dbf8c0f1e 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -284,7 +284,7 @@ MonoBehaviour: - SampleScene - ZooSam AllowRuntimeSceneChanges: 0 - PlayerPrefab: {fileID: 8685790303553767886, guid: 96e0a72e30d0c46c8a5c9a750e8f5807, + PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] TickRate: 20 @@ -600,6 +600,8 @@ MonoBehaviour: Authority: 0 InLocalSpace: 0 FixedSendsPerSecond: 30 + m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, + type: 2} --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 From 4a4aa7b1203243e91e457f36123bdccfdd9d005c Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 29 Jul 2021 13:55:51 -0400 Subject: [PATCH 05/74] # --- .../Interpolator/BufferedLinearInterpolatorVector3Factory.cs | 2 +- .../Prototyping/Interpolator/IInterpolator.cs | 2 +- .../Prototyping/Interpolator/NoInterpolationFactory.cs | 2 +- .../Interpolator/PositionLinearInterpolatorFactory.cs | 2 +- com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index 85be5908cc..e79656524a 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -130,7 +130,7 @@ public T GetInterpolatedValue() return m_CurrentValue; } - public void Teleport(T value, NetworkTime SentTick) + public void Reset(T value, NetworkTime SentTick) { m_CurrentValue = value; m_LerpEndValue = value; diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index edfb268727..5276fc70f2 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -7,7 +7,7 @@ public interface IInterpolator public void NetworkTickUpdate(float tickDeltaTime); public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); - public void Teleport(T value, NetworkTime sentTime); + public void Reset(T value, NetworkTime sentTime); } public abstract class InterpolatorFactory : ScriptableObject diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index d08df574e5..42e7b195a6 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -44,7 +44,7 @@ public T GetInterpolatedValue() return m_Current; } - public void Teleport(T value, NetworkTime SentTick) + public void Reset(T value, NetworkTime SentTick) { m_Current = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index 10a7beee8c..1416b6e591 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -51,7 +51,7 @@ public Vector3 GetInterpolatedValue() return m_UpdatedVector; } - public void Teleport(Vector3 value, NetworkTime SentTick) + public void Reset(Vector3 value, NetworkTime SentTick) { m_UpdatedVector = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 831b2a47c0..5bdc69fa4c 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -227,7 +227,7 @@ private void Awake() { m_Transform = transform; PositionInterpolator = m_PositionInterpolatorFactory.CreateInterpolator(); - PositionInterpolator.Teleport(m_Transform.position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick)); + PositionInterpolator.Reset(m_Transform.position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick)); UpdateNetVarPerms(); From 5fc7b50ba56e8d35616f140690ecf759fca2387f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 5 Aug 2021 14:53:00 -0400 Subject: [PATCH 06/74] # --- ...ufferedLinearInterpolatorVector3Factory.cs | 118 +- .../Prototyping/Interpolator/IInterpolator.cs | 11 +- .../Interpolator/NoInterpolationFactory.cs | 24 +- .../PositionLinearInterpolatorFactory.cs | 24 +- .../Prototyping/NetworkTransform.cs | 67 +- .../Runtime/Timing/TimeMultiInstanceTest.cs | 9 + testproject/Assets/Scenes/ZooSam.unity | 26378 +++++++++++++++- 7 files changed, 25839 insertions(+), 792 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index e79656524a..e7a756098e 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -5,10 +5,20 @@ namespace DefaultNamespace { - public abstract class BufferedLinearInterpolatorFactory : InterpolatorFactory + public interface IBufferedLinearInterpolatorSettings : IInterpolatorSettings + { + public float InterpolationTime { get; } + } + + public abstract class BufferedLinearInterpolatorFactory : InterpolatorFactory, IBufferedLinearInterpolatorSettings { [SerializeField] - public float InterpolationTime = 0.100f; + public float InterpolationTime => 0.100f; + } + + public class BufferedLinearInterpolatorSettings : IBufferedLinearInterpolatorSettings + { + public float InterpolationTime { get; set; } = 0.1f; } [CreateAssetMenu(fileName = "BufferedLinearInterpolatorVector3", menuName = BaseMenuName + "BufferedLinearInterpolatorVector3", order = 1)] @@ -34,7 +44,7 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : public int AdditionalBufferAmountTick = 3; // todo config, todo expose global config, todo use in actual code // public const float InterpolationConfigTimeSec = 0.100f; // todo remove const for config - public float InterpolationConfigTimeSec => m_Factory.InterpolationTime; // todo use with range + public float InterpolationConfigTimeSec => m_Settings.InterpolationTime; // todo use with range struct BufferedItem { @@ -48,18 +58,34 @@ struct BufferedItem T m_LerpStartValue; T m_LerpEndValue; private T m_CurrentValue; - private NetworkTime m_ValueLastTick; + private NetworkTime m_ValueCurrentTickConsumed; private List> m_Buffer = new List>(); - private readonly BufferedLinearInterpolatorFactory m_Factory; + private readonly IBufferedLinearInterpolatorSettings m_Settings; - public BufferedLinearInterpolator(BufferedLinearInterpolatorFactory factory) + public BufferedLinearInterpolator() { - m_Factory = factory; + m_Settings = new BufferedLinearInterpolatorSettings {InterpolationTime = 0.2f}; } - private NetworkTime samPreviousToLast; + public BufferedLinearInterpolator(IBufferedLinearInterpolatorSettings settings) + { + m_Settings = settings; + } + + public BufferedLinearInterpolator(NetworkVariable> netvar) + { + netvar.OnValueChanged += OnStateChanged; + } + + public void OnStateChanged(IInterpolatedState old, IInterpolatedState newState) + { + var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick); + AddMeasurement(newState.Value, sentTime); + } + + private NetworkTime m_PreviousTickConsumed; private void TryConsumeFromBuffer() { @@ -72,8 +98,8 @@ private void TryConsumeFromBuffer() { m_LerpStartValue = m_LerpEndValue; m_LerpEndValue = bufferedValue.item; - samPreviousToLast = m_ValueLastTick; - m_ValueLastTick = bufferedValue.tickSent; + samPreviousTickConsumed = m_ValueCurrentTickConsumed; + m_ValueCurrentTickConsumed = bufferedValue.tickSent; Debug.Log($"hellooooo {bufferedValue.tickSent}"); m_Buffer.RemoveAt(i); nbConsumed++; @@ -86,41 +112,88 @@ private void TryConsumeFromBuffer() Debug.Log($"Buffer size: {count}, nb consumed: {nbConsumed}"); var pos2 = m_LerpEndValue is Vector3 value2 ? value2 : default; - Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueLastTick.Tick - samPreviousToLast.Tick), Color.cyan, 10, false); + Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueCurrentTickConsumed.Tick - m_PreviousTickConsumed.Tick), Color.cyan, 10, false); for (int i = 0; i < count; i++) { Debug.DrawLine(pos2 + Vector3.up * (i+1), pos2 + Vector3.up* (i+1) + Vector3.left, Color.white, 10, false); } } - public void Update(float deltaTime) + private float samLastServerTime; + private float samLastTime; + + private float serverOffset; + private float m_RenderTime => Time.time - serverOffset; + + public void Start() + { + serverOffset = (float) (Time.time - NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time); + } + + public void OnEnable() { + } + + public void Awake() + { + } + + public void OnNetworkSpawn() + { + } + + public T Update(float deltaTime) + { + if (!NetworkManager.Singleton.IsConnectedClient) return default; + TryConsumeFromBuffer(); - var timeB = m_ValueLastTick;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); - var timeA = timeB - timeB.FixedDeltaTime;// + var timeB = m_ValueCurrentTickConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + // var timeA = timeB - timeB.FixedDeltaTime;// + + // Interpolation example to understand the math below + // 4 6 6.5 + // | | | + // A B Server + var timeA = m_PreviousTickConsumed; double range = timeB.Time - timeA.Time; - float t = (float)((NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - timeA.FixedDeltaTime - timeA.Time) / range); + var renderTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - range; + // var renderTime = m_RenderTime; + float t = (float)((renderTime - timeA.Time) / range); + var diffServerTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - samLastServerTime; + samLastServerTime = (float) NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time; + var diffTime = Time.time - samLastTime; + samLastTime = Time.time; + Debug.Log($"diffServerTime {diffServerTime} diffTime {diffTime} deltaTime {deltaTime}"); Debug.Log($"ttttttttttttt {t}"); + m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); + // m_CurrentValue = m_LerpEndValue; + + + // var timeB = m_ValueCurrentTickConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + // var timeA = timeB - timeB.FixedDeltaTime;// + // double range = timeB.Time - timeA.Time; + // float t = (float)((NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - timeA.FixedDeltaTime - timeA.Time) / range); // m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); - m_CurrentValue = m_LerpEndValue; + + var pos = m_CurrentValue is Vector3 value ? value : default; Debug.DrawLine(pos, pos + Vector3.up, Color.magenta, 10, false); + return m_CurrentValue; } public void NetworkTickUpdate(float fixedDeltaTime) { - } - public void AddMeasurement(T newMeasurement, NetworkTime SentTick) { var debugPos = newMeasurement is Vector3 value ? value : default; Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); Debug.Log($"Adding measurement {Time.time}"); + // todo put limit on size, we don't want lag spikes to create 100 entries and have a list that size in memory for ever m_Buffer.Add(new BufferedItem() {item = newMeasurement, tickSent = SentTick}); m_Buffer.Sort((item1, item2) => item2.tickSent.Tick.CompareTo(item1.tickSent.Tick)); } @@ -137,12 +210,17 @@ public void Reset(T value, NetworkTime SentTick) m_LerpStartValue = value; } + public void OnDestroy() + { + throw new System.NotImplementedException(); + } + public abstract T Interpolate(T start, T end, float time); } public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator { - public BufferedLinearInterpolatorVector3(BufferedLinearInterpolatorVector3Factory bufferedLinearInterpolatorVector3Factory) : base(bufferedLinearInterpolatorVector3Factory) { } + public BufferedLinearInterpolatorVector3(IBufferedLinearInterpolatorSettings settings) : base(settings) { } public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) { @@ -157,6 +235,6 @@ public override Quaternion Interpolate(Quaternion start, Quaternion end, float t return Quaternion.Slerp(start, end, time); } - public BufferedLinearInterpolatorQuaternion(BufferedLinearInterpolatorFactory factory) : base(factory) { } + public BufferedLinearInterpolatorQuaternion(IBufferedLinearInterpolatorSettings settings) : base(settings) { } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index 5276fc70f2..a6862322b4 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -3,11 +3,16 @@ public interface IInterpolator { - public void Update(float deltaTime); + public void Awake(); + public void OnNetworkSpawn(); + public void Start(); + public void OnEnable(); + public T Update(float deltaTime); public void NetworkTickUpdate(float tickDeltaTime); public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); public void Reset(T value, NetworkTime sentTime); + public void OnDestroy(); } public abstract class InterpolatorFactory : ScriptableObject @@ -15,3 +20,7 @@ public abstract class InterpolatorFactory : ScriptableObject public const string BaseMenuName = "MLAPI/Interpolator/"; public abstract IInterpolator CreateInterpolator(); } + +public interface IInterpolatorSettings +{ +} diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index 42e7b195a6..3579958737 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -25,9 +25,26 @@ public class NoInterpolation : IInterpolator { private T m_Current; - public void Update(float deltaTime) + public void Awake() + { + } + + public void OnNetworkSpawn() + { + } + + public void Start() + { + } + + public void OnEnable() + { + } + + public T Update(float deltaTime) { // nothing + return GetInterpolatedValue(); } public void NetworkTickUpdate(float fixedDeltaTime) @@ -48,5 +65,10 @@ public void Reset(T value, NetworkTime SentTick) { m_Current = value; } + + public void OnDestroy() + { + throw new System.NotImplementedException(); + } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index 1416b6e591..e940366add 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -29,10 +29,27 @@ public PositionLinearInterpolator(PositionLinearInterpolatorFactory factory) m_Factory = factory; } - public void Update(float deltaTime) + public void Awake() + { + } + + public void OnNetworkSpawn() + { + } + + public void Start() + { + } + + public void OnEnable() + { + } + + public Vector3 Update(float deltaTime) { m_CurrentTime += deltaTime; m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / m_Factory.MaxLerpTime); + return GetInterpolatedValue(); } public void NetworkTickUpdate(float fixedDeltaTime) @@ -55,5 +72,10 @@ public void Reset(Vector3 value, NetworkTime SentTick) { m_UpdatedVector = value; } + + public void OnDestroy() + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 5bdc69fa4c..0540db786b 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,4 +1,5 @@ using System; +using DefaultNamespace; using MLAPI.NetworkVariable; using MLAPI.Serialization; using MLAPI.Timing; @@ -89,7 +90,12 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField] private InterpolatorFactory m_PositionInterpolatorFactory; - private IInterpolator PositionInterpolator; + [SerializeField] + private InterpolatorFactory m_RotationInterpolatorFactory; + + protected virtual IInterpolator PositionInterpolator { get; set; } + + protected virtual IInterpolator RotationInterpolator { get; set; } // public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(ScriptableObject.CreateInstance()); // todo tmp, use default value instead private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -117,13 +123,13 @@ private bool IsNetworkStateDirty(NetworkState networkState) if (InLocalSpace) { isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Rotation != m_Transform.localRotation; + isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); isDirty |= networkState.Scale != m_Transform.localScale; } else { isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Rotation != m_Transform.rotation; + isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); isDirty |= networkState.Scale != m_Transform.lossyScale; } @@ -161,6 +167,7 @@ private void ApplyNetworkState(NetworkState netState) { netState = new NetworkState(netState); netState.Position = PositionInterpolator.GetInterpolatedValue(); + netState.Rotation = RotationInterpolator.GetInterpolatedValue(); InLocalSpace = netState.InLocalSpace; if (InLocalSpace) @@ -197,12 +204,20 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) return; } + // todo check teleport flag + // if (newState.Teleporting) + // { + // PositionInterpolator.Reset(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); + // } + // PositionInterpolator.AddMeasurement(newState.Position, NetworkManager.Singleton.ServerTime.Time); Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); Debug.Log($"diff tick sam {(newState.SentTick - oldState.SentTick, 2)}"); // oldTick = NetworkManager.Singleton.ServerTime.Tick; - PositionInterpolator.AddMeasurement(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); + var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick); + PositionInterpolator.AddMeasurement(newState.Position, sentTime); + RotationInterpolator.AddMeasurement(newState.Rotation, sentTime); } private void UpdateNetVarPerms() @@ -225,9 +240,32 @@ private void UpdateNetVarPerms() private void Awake() { + //debug, remove me + // Time.maximumDeltaTime = 999f; + m_Transform = transform; - PositionInterpolator = m_PositionInterpolatorFactory.CreateInterpolator(); - PositionInterpolator.Reset(m_Transform.position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick)); + var defaultBufferTime = 0.1f; + if (m_PositionInterpolatorFactory == null) + { + PositionInterpolator = new BufferedLinearInterpolatorVector3(new BufferedLinearInterpolatorSettings {InterpolationTime = defaultBufferTime}); + } + else + { + PositionInterpolator = m_PositionInterpolatorFactory.CreateInterpolator(); + } + + if (m_RotationInterpolatorFactory == null) + { + RotationInterpolator = new BufferedLinearInterpolatorQuaternion(new BufferedLinearInterpolatorSettings {InterpolationTime = defaultBufferTime}); + } + else + { + RotationInterpolator = m_RotationInterpolatorFactory.CreateInterpolator(); + } + + var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick); + PositionInterpolator.Reset(m_Transform.position, currentTime); + RotationInterpolator.Reset(m_Transform.rotation, currentTime); UpdateNetVarPerms(); @@ -244,6 +282,9 @@ public override void OnNetworkSpawn() { NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; } + + PositionInterpolator.OnNetworkSpawn(); + RotationInterpolator.OnNetworkSpawn(); } private void OnDestroy() @@ -264,13 +305,14 @@ private void NetworkTickUpdate() } else { - // if (IsNetworkStateDirty(m_PrevNetworkState)) - // { - // Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); - // ApplyNetworkState(m_NetworkState.Value); - // } + if (IsNetworkStateDirty(m_PrevNetworkState)) + { + Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); + ApplyNetworkState(m_NetworkState.Value); + } PositionInterpolator.NetworkTickUpdate(NetworkManager.ServerTime.FixedDeltaTime); + RotationInterpolator.NetworkTickUpdate(NetworkManager.ServerTime.FixedDeltaTime); } } @@ -290,6 +332,7 @@ private void Update() if (!CanUpdateTransform) { PositionInterpolator.Update(Time.deltaTime); + RotationInterpolator.Update(Time.deltaTime); ApplyNetworkState(m_NetworkState.Value); } } @@ -310,6 +353,8 @@ internal void SetAuthority(NetworkAuthority authority) /// public void Teleport(Vector3 newPosition, Quaternion newRotation, Vector3 newScale) { + // check server side + // set teleport flag in state throw new NotImplementedException(); // TODO MTT-769 } } diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs index bd69aa69aa..00cdc61e06 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs @@ -40,6 +40,15 @@ private void UpdateTimeStates(NetworkManager[] networkManagers) m_Client2State = new NetworkTimeState(secondClient); } + [UnityTest] + public IEnumerator TestSam() + { + yield return StartSomeClientsAndServerWithPlayersCustom(true, NbClients, 60, 30); + + + + } + [UnityTest] [TestCase(60, 30, ExpectedResult = null)] [TestCase(30, 30, ExpectedResult = null)] diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 9dbf8c0f1e..299f27c9c8 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -123,7 +123,7 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &346676326 +--- !u!1 &33522693 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -131,37 +131,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 346676330} - - component: {fileID: 346676329} - - component: {fileID: 346676328} - - component: {fileID: 346676327} + - component: {fileID: 33522694} + - component: {fileID: 33522697} + - component: {fileID: 33522696} + - component: {fileID: 33522695} m_Layer: 0 - m_Name: Cube + m_Name: werq (146) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!65 &346676327 -BoxCollider: +--- !u!4 &33522694 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 346676326} + m_GameObject: {fileID: 33522693} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 146 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &33522695 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 33522693} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &346676328 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &33522696 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 346676326} + m_GameObject: {fileID: 33522693} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -174,7 +189,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -196,29 +211,111 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &346676329 +--- !u!33 &33522697 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 346676326} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &346676330 + m_GameObject: {fileID: 33522693} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &37826286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 37826287} + - component: {fileID: 37826290} + - component: {fileID: 37826289} + - component: {fileID: 37826288} + m_Layer: 0 + m_Name: werq (93) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &37826287 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 346676326} + m_GameObject: {fileID: 37826286} 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_LocalPosition: {x: 3.072, y: 0, z: -0.731} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 + m_Father: {fileID: 727811950} + m_RootOrder: 93 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &620561609 +--- !u!64 &37826288 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37826286} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &37826289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37826286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &37826290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37826286} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &49482614 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -226,314 +323,25020 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 620561612} - - component: {fileID: 620561611} - - component: {fileID: 620561610} - - component: {fileID: 620561613} + - component: {fileID: 49482615} + - component: {fileID: 49482618} + - component: {fileID: 49482617} + - component: {fileID: 49482616} m_Layer: 0 - m_Name: NetworkManager + m_Name: werq (85) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &620561610 -MonoBehaviour: +--- !u!4 &49482615 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} + m_GameObject: {fileID: 49482614} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 85 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &49482616 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 49482614} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3} - m_Name: - m_EditorClassIdentifier: - MessageBufferSize: 5120 - MaxConnections: 100 - MaxSentMessageQueueSize: 128 - ConnectAddress: 127.0.0.1 - ConnectPort: 7777 - ServerListenPort: 7777 - ServerWebsocketListenPort: 8887 - SupportWebsocket: 0 - Channels: [] - UseMLAPIRelay: 0 - MLAPIRelayAddress: 184.72.104.138 - MLAPIRelayPort: 8888 - MessageSendMode: 0 ---- !u!114 &620561611 -MonoBehaviour: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &49482617 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} + m_GameObject: {fileID: 49482614} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} - m_Name: - m_EditorClassIdentifier: - DontDestroy: 1 - RunInBackground: 1 - LogLevel: 1 - NetworkConfig: - ProtocolVersion: 0 - NetworkTransport: {fileID: 620561610} - RegisteredScenes: - - SampleScene - - ZooSam - AllowRuntimeSceneChanges: 0 - PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, - type: 3} - NetworkPrefabs: [] - TickRate: 20 - ClientConnectionBufferTimeout: 10 - ConnectionApproval: 0 - ConnectionData: - EnableTimeResync: 0 - TimeResyncInterval: 30 - EnableNetworkVariable: 1 - EnsureNetworkVariableLengthSafety: 0 - EnableSceneManagement: 1 - ForceSamePrefabs: 1 - RecycleNetworkIds: 1 - NetworkIdRecycleDelay: 120 - RpcHashSize: 0 - LoadSceneTimeOut: 120 - EnableMessageBuffering: 1 - MessageBufferTimeout: 20 - EnableNetworkLogs: 1 ---- !u!4 &620561612 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &49482618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 49482614} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &53667804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 53667805} + - component: {fileID: 53667808} + - component: {fileID: 53667807} + - component: {fileID: 53667806} + m_Layer: 0 + m_Name: werq (197) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &53667805 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} + m_GameObject: {fileID: 53667804} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 1} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 + m_Father: {fileID: 727811950} + m_RootOrder: 197 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &620561613 -MonoBehaviour: +--- !u!64 &53667806 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} + m_GameObject: {fileID: 53667804} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} - m_Name: - m_EditorClassIdentifier: - Port: 7777 - Address: 127.0.0.1 - PingInterval: 1 - DisconnectTimeout: 5 - ReconnectDelay: 0.5 - MaxConnectAttempts: 10 - channels: [] - MessageBufferSize: 5120 - SimulatePacketLossChance: 0 - SimulateMinLatency: 100 - SimulateMaxLatency: 100 ---- !u!1001 &627808638 -PrefabInstance: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &53667807 +MeshRenderer: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1333567166} - m_Modifications: - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53667804} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &53667808 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53667804} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &71608578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 71608579} + - component: {fileID: 71608582} + - component: {fileID: 71608581} + - component: {fileID: 71608580} + m_Layer: 0 + m_Name: werq (25) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &71608579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71608578} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &71608580 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71608578} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &71608581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71608578} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &71608582 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71608578} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &79838171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 79838172} + - component: {fileID: 79838175} + - component: {fileID: 79838174} + - component: {fileID: 79838173} + m_Layer: 0 + m_Name: werq (192) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &79838172 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 79838171} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 192 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &79838173 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 79838171} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &79838174 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 79838171} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &79838175 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 79838171} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &80528582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 80528583} + - component: {fileID: 80528586} + - component: {fileID: 80528585} + - component: {fileID: 80528584} + m_Layer: 0 + m_Name: werq (105) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &80528583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80528582} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 105 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &80528584 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80528582} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &80528585 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80528582} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &80528586 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 80528582} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &100213237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 100213238} + - component: {fileID: 100213241} + - component: {fileID: 100213240} + - component: {fileID: 100213239} + m_Layer: 0 + m_Name: werq (228) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &100213238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 100213237} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 228 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &100213239 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 100213237} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &100213240 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 100213237} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &100213241 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 100213237} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &106240636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 106240637} + - component: {fileID: 106240640} + - component: {fileID: 106240639} + - component: {fileID: 106240638} + m_Layer: 0 + m_Name: werq (238) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &106240637 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106240636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 238 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &106240638 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106240636} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &106240639 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106240636} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &106240640 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106240636} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &106591948 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 106591949} + - component: {fileID: 106591952} + - component: {fileID: 106591951} + - component: {fileID: 106591950} + m_Layer: 0 + m_Name: werq (250) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &106591949 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106591948} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 250 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &106591950 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106591948} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &106591951 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106591948} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &106591952 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 106591948} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &110121429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 110121430} + - component: {fileID: 110121433} + - component: {fileID: 110121432} + - component: {fileID: 110121431} + m_Layer: 0 + m_Name: werq (141) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &110121430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110121429} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 141 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &110121431 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110121429} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &110121432 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110121429} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &110121433 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 110121429} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &125350741 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 125350742} + - component: {fileID: 125350745} + - component: {fileID: 125350744} + - component: {fileID: 125350743} + m_Layer: 0 + m_Name: werq (235) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &125350742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125350741} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 235 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &125350743 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125350741} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &125350744 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125350741} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &125350745 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 125350741} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &145865922 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 145865923} + - component: {fileID: 145865926} + - component: {fileID: 145865925} + - component: {fileID: 145865924} + m_Layer: 0 + m_Name: werq (23) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &145865923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145865922} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -0.238} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &145865924 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145865922} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &145865925 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145865922} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &145865926 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145865922} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &149862984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 149862985} + - component: {fileID: 149862988} + - component: {fileID: 149862987} + - component: {fileID: 149862986} + m_Layer: 0 + m_Name: werq (140) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &149862985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149862984} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 140 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &149862986 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149862984} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &149862987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149862984} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &149862988 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149862984} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &150536644 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 150536645} + - component: {fileID: 150536648} + - component: {fileID: 150536647} + - component: {fileID: 150536646} + m_Layer: 0 + m_Name: werq (143) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &150536645 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150536644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 143 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &150536646 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150536644} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &150536647 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150536644} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &150536648 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150536644} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &169380227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 169380228} + - component: {fileID: 169380231} + - component: {fileID: 169380230} + - component: {fileID: 169380229} + m_Layer: 0 + m_Name: werq (164) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &169380228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169380227} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 164 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &169380229 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169380227} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &169380230 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169380227} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &169380231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169380227} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &181816470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181816471} + - component: {fileID: 181816474} + - component: {fileID: 181816473} + - component: {fileID: 181816472} + m_Layer: 0 + m_Name: werq (24) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &181816471 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181816470} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &181816472 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181816470} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &181816473 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181816470} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &181816474 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181816470} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &186281139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 186281140} + - component: {fileID: 186281143} + - component: {fileID: 186281142} + - component: {fileID: 186281141} + m_Layer: 0 + m_Name: werq (189) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &186281140 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186281139} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 189 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &186281141 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186281139} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &186281142 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186281139} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &186281143 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186281139} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &188404883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 188404884} + - component: {fileID: 188404887} + - component: {fileID: 188404886} + - component: {fileID: 188404885} + m_Layer: 0 + m_Name: werq (253) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &188404884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188404883} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 253 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &188404885 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188404883} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &188404886 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188404883} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &188404887 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188404883} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &191799453 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 191799454} + - component: {fileID: 191799457} + - component: {fileID: 191799456} + - component: {fileID: 191799455} + m_Layer: 0 + m_Name: werq (125) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &191799454 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191799453} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -1.7079992} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 125 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &191799455 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191799453} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &191799456 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191799453} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &191799457 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191799453} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &193655140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 193655141} + - component: {fileID: 193655144} + - component: {fileID: 193655143} + - component: {fileID: 193655142} + m_Layer: 0 + m_Name: werq (63) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &193655141 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193655140} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -1.7079993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 63 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &193655142 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193655140} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &193655143 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193655140} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &193655144 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193655140} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &193992118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 193992119} + - component: {fileID: 193992122} + - component: {fileID: 193992121} + - component: {fileID: 193992120} + m_Layer: 0 + m_Name: werq (127) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &193992119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193992118} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -1.7079993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 127 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &193992120 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193992118} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &193992121 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193992118} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &193992122 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 193992118} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &206214829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 206214830} + - component: {fileID: 206214833} + - component: {fileID: 206214832} + - component: {fileID: 206214831} + m_Layer: 0 + m_Name: werq (169) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &206214830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206214829} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 169 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &206214831 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206214829} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &206214832 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206214829} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &206214833 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206214829} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &210309823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 210309824} + - component: {fileID: 210309827} + - component: {fileID: 210309826} + - component: {fileID: 210309825} + m_Layer: 0 + m_Name: werq (157) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &210309824 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210309823} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 157 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &210309825 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210309823} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &210309826 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210309823} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &210309827 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210309823} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &213478266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 213478267} + - component: {fileID: 213478270} + - component: {fileID: 213478269} + - component: {fileID: 213478268} + m_Layer: 0 + m_Name: werq (104) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &213478267 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213478266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 104 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &213478268 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213478266} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &213478269 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213478266} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &213478270 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213478266} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &218116997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 218116998} + - component: {fileID: 218117001} + - component: {fileID: 218117000} + - component: {fileID: 218116999} + m_Layer: 0 + m_Name: werq (108) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &218116998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218116997} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 108 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &218116999 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218116997} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &218117000 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218116997} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &218117001 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218116997} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &224195388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224195389} + - component: {fileID: 224195392} + - component: {fileID: 224195391} + - component: {fileID: 224195390} + m_Layer: 0 + m_Name: werq (83) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &224195389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224195388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 83 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &224195390 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224195388} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &224195391 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224195388} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &224195392 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224195388} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &233906887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 233906888} + - component: {fileID: 233906891} + - component: {fileID: 233906890} + - component: {fileID: 233906889} + m_Layer: 0 + m_Name: werq (39) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &233906888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233906887} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -1.2149993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 39 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &233906889 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233906887} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &233906890 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233906887} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &233906891 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233906887} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &235112665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 235112666} + - component: {fileID: 235112669} + - component: {fileID: 235112668} + - component: {fileID: 235112667} + m_Layer: 0 + m_Name: werq (166) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &235112666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235112665} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 166 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &235112667 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235112665} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &235112668 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235112665} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &235112669 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235112665} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &237078269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 237078270} + - component: {fileID: 237078273} + - component: {fileID: 237078272} + - component: {fileID: 237078271} + m_Layer: 0 + m_Name: werq (135) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &237078270 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 237078269} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -2.2180014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 135 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &237078271 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 237078269} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &237078272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 237078269} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &237078273 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 237078269} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &250510712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 250510713} + - component: {fileID: 250510716} + - component: {fileID: 250510715} + - component: {fileID: 250510714} + m_Layer: 0 + m_Name: werq (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &250510713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250510712} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &250510714 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250510712} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &250510715 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250510712} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &250510716 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250510712} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &256564933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 256564934} + - component: {fileID: 256564937} + - component: {fileID: 256564936} + - component: {fileID: 256564935} + m_Layer: 0 + m_Name: werq (131) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &256564934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256564933} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 131 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &256564935 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256564933} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &256564936 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256564933} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &256564937 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256564933} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &261586002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 261586003} + - component: {fileID: 261586006} + - component: {fileID: 261586005} + - component: {fileID: 261586004} + m_Layer: 0 + m_Name: werq (123) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &261586003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261586002} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 123 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &261586004 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261586002} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &261586005 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261586002} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &261586006 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261586002} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &286306874 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 286306875} + - component: {fileID: 286306878} + - component: {fileID: 286306877} + - component: {fileID: 286306876} + m_Layer: 0 + m_Name: werq (242) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &286306875 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286306874} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 242 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &286306876 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286306874} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &286306877 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286306874} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &286306878 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286306874} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &292590885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 292590886} + - component: {fileID: 292590889} + - component: {fileID: 292590888} + - component: {fileID: 292590887} + m_Layer: 0 + m_Name: werq (175) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &292590886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292590885} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 175 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &292590887 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292590885} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &292590888 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292590885} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &292590889 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292590885} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &324852034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 324852035} + - component: {fileID: 324852038} + - component: {fileID: 324852037} + - component: {fileID: 324852036} + m_Layer: 0 + m_Name: werq (97) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &324852035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324852034} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 97 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &324852036 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324852034} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &324852037 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324852034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &324852038 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324852034} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &346676326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 346676330} + - component: {fileID: 346676329} + - component: {fileID: 346676328} + - component: {fileID: 346676327} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &346676327 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &346676328 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &346676329 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &346676330 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346676326} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &351881178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 351881179} + - component: {fileID: 351881182} + - component: {fileID: 351881181} + - component: {fileID: 351881180} + m_Layer: 0 + m_Name: werq (75) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &351881179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351881178} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 75 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &351881180 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351881178} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &351881181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351881178} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &351881182 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351881178} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &364557581 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 364557582} + - component: {fileID: 364557585} + - component: {fileID: 364557584} + - component: {fileID: 364557583} + m_Layer: 0 + m_Name: werq (58) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &364557582 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364557581} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 58 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &364557583 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364557581} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &364557584 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364557581} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &364557585 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364557581} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &379641072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 379641073} + - component: {fileID: 379641076} + - component: {fileID: 379641075} + - component: {fileID: 379641074} + m_Layer: 0 + m_Name: werq (241) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &379641073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379641072} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 241 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &379641074 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379641072} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &379641075 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379641072} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &379641076 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379641072} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &379921466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 379921467} + - component: {fileID: 379921470} + - component: {fileID: 379921469} + - component: {fileID: 379921468} + m_Layer: 0 + m_Name: werq (168) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &379921467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379921466} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 168 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &379921468 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379921466} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &379921469 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379921466} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &379921470 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 379921466} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &385354836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 385354837} + - component: {fileID: 385354840} + - component: {fileID: 385354839} + - component: {fileID: 385354838} + m_Layer: 0 + m_Name: werq (204) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &385354837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385354836} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 204 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &385354838 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385354836} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &385354839 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385354836} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &385354840 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 385354836} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &389923200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 389923201} + - component: {fileID: 389923204} + - component: {fileID: 389923203} + - component: {fileID: 389923202} + m_Layer: 0 + m_Name: werq (122) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &389923201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389923200} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 122 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &389923202 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389923200} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &389923203 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389923200} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &389923204 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389923200} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &398540132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 398540133} + - component: {fileID: 398540136} + - component: {fileID: 398540135} + - component: {fileID: 398540134} + m_Layer: 0 + m_Name: werq (254) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &398540133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398540132} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 254 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &398540134 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398540132} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &398540135 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398540132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &398540136 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398540132} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &405946599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 405946600} + - component: {fileID: 405946603} + - component: {fileID: 405946602} + - component: {fileID: 405946601} + m_Layer: 0 + m_Name: werq (171) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &405946600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405946599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 171 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &405946601 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405946599} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &405946602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405946599} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &405946603 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 405946599} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &407199355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 407199356} + - component: {fileID: 407199359} + - component: {fileID: 407199358} + - component: {fileID: 407199357} + m_Layer: 0 + m_Name: werq (57) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &407199356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407199355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 57 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &407199357 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407199355} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &407199358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407199355} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &407199359 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407199355} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &482542012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 482542013} + - component: {fileID: 482542016} + - component: {fileID: 482542015} + - component: {fileID: 482542014} + m_Layer: 0 + m_Name: werq (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &482542013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482542012} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &482542014 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482542012} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &482542015 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482542012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &482542016 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482542012} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &482761098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 482761099} + - component: {fileID: 482761102} + - component: {fileID: 482761101} + - component: {fileID: 482761100} + m_Layer: 0 + m_Name: werq (98) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &482761099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482761098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 98 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &482761100 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482761098} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &482761101 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482761098} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &482761102 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482761098} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &488989116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 488989117} + - component: {fileID: 488989120} + - component: {fileID: 488989119} + - component: {fileID: 488989118} + m_Layer: 0 + m_Name: werq (136) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &488989117 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488989116} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 136 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &488989118 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488989116} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &488989119 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488989116} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &488989120 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488989116} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &489960630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 489960631} + - component: {fileID: 489960634} + - component: {fileID: 489960633} + - component: {fileID: 489960632} + m_Layer: 0 + m_Name: werq (114) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &489960631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489960630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 114 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &489960632 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489960630} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &489960633 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489960630} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &489960634 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489960630} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &506377921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 506377922} + - component: {fileID: 506377925} + - component: {fileID: 506377924} + - component: {fileID: 506377923} + m_Layer: 0 + m_Name: werq (62) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &506377922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506377921} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 62 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &506377923 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506377921} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &506377924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506377921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &506377925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506377921} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &518010392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 518010393} + - component: {fileID: 518010396} + - component: {fileID: 518010395} + - component: {fileID: 518010394} + m_Layer: 0 + m_Name: werq (215) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &518010393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518010392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -2.2180014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 215 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &518010394 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518010392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &518010395 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518010392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &518010396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518010392} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &529345318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529345319} + - component: {fileID: 529345322} + - component: {fileID: 529345321} + - component: {fileID: 529345320} + m_Layer: 0 + m_Name: werq (163) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &529345319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529345318} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 163 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &529345320 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529345318} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &529345321 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529345318} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &529345322 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529345318} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &555000401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 555000402} + - component: {fileID: 555000405} + - component: {fileID: 555000404} + - component: {fileID: 555000403} + m_Layer: 0 + m_Name: werq (66) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &555000402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555000401} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 66 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &555000403 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555000401} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &555000404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555000401} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &555000405 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555000401} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &561629645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 561629646} + - component: {fileID: 561629649} + - component: {fileID: 561629648} + - component: {fileID: 561629647} + m_Layer: 0 + m_Name: werq (150) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &561629646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 561629645} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 150 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &561629647 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 561629645} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &561629648 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 561629645} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &561629649 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 561629645} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &565740968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 565740969} + - component: {fileID: 565740972} + - component: {fileID: 565740971} + - component: {fileID: 565740970} + m_Layer: 0 + m_Name: werq (214) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &565740969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 565740968} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 214 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &565740970 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 565740968} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &565740971 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 565740968} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &565740972 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 565740968} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &585236792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 585236793} + - component: {fileID: 585236796} + - component: {fileID: 585236795} + - component: {fileID: 585236794} + m_Layer: 0 + m_Name: werq (37) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &585236793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585236792} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 37 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &585236794 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585236792} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &585236795 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585236792} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &585236796 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585236792} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &586781683 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 586781684} + - component: {fileID: 586781687} + - component: {fileID: 586781686} + - component: {fileID: 586781685} + m_Layer: 0 + m_Name: werq (129) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &586781684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586781683} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 129 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &586781685 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586781683} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &586781686 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586781683} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &586781687 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586781683} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &590172462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 590172463} + - component: {fileID: 590172466} + - component: {fileID: 590172465} + - component: {fileID: 590172464} + m_Layer: 0 + m_Name: werq (68) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &590172463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590172462} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 68 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &590172464 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590172462} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &590172465 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590172462} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &590172466 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590172462} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &596272298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 596272299} + - component: {fileID: 596272302} + - component: {fileID: 596272301} + - component: {fileID: 596272300} + m_Layer: 0 + m_Name: werq (212) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &596272299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596272298} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 212 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &596272300 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596272298} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &596272301 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596272298} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &596272302 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596272298} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &601557655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 601557656} + - component: {fileID: 601557659} + - component: {fileID: 601557658} + - component: {fileID: 601557657} + m_Layer: 0 + m_Name: werq (179) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &601557656 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601557655} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 179 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &601557657 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601557655} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &601557658 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601557655} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &601557659 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 601557655} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &604298090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 604298091} + - component: {fileID: 604298094} + - component: {fileID: 604298093} + - component: {fileID: 604298092} + m_Layer: 0 + m_Name: werq (203) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &604298091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604298090} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 203 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &604298092 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604298090} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &604298093 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604298090} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &604298094 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604298090} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &620561609 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620561612} + - component: {fileID: 620561611} + - component: {fileID: 620561610} + - component: {fileID: 620561613} + m_Layer: 0 + m_Name: NetworkManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &620561610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3} + m_Name: + m_EditorClassIdentifier: + MessageBufferSize: 5120 + MaxConnections: 100 + MaxSentMessageQueueSize: 128 + ConnectAddress: 127.0.0.1 + ConnectPort: 7777 + ServerListenPort: 7777 + ServerWebsocketListenPort: 8887 + SupportWebsocket: 0 + Channels: [] + UseMLAPIRelay: 0 + MLAPIRelayAddress: 184.72.104.138 + MLAPIRelayPort: 8888 + MessageSendMode: 0 +--- !u!114 &620561611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} + m_Name: + m_EditorClassIdentifier: + DontDestroy: 1 + RunInBackground: 1 + LogLevel: 1 + NetworkConfig: + ProtocolVersion: 0 + NetworkTransport: {fileID: 620561610} + RegisteredScenes: + - SampleScene + - ZooSam + AllowRuntimeSceneChanges: 0 + PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, + type: 3} + NetworkPrefabs: [] + TickRate: 20 + ClientConnectionBufferTimeout: 10 + ConnectionApproval: 0 + ConnectionData: + EnableTimeResync: 0 + TimeResyncInterval: 30 + EnableNetworkVariable: 1 + EnsureNetworkVariableLengthSafety: 0 + EnableSceneManagement: 1 + ForceSamePrefabs: 1 + RecycleNetworkIds: 1 + NetworkIdRecycleDelay: 120 + RpcHashSize: 0 + LoadSceneTimeOut: 120 + EnableMessageBuffering: 1 + MessageBufferTimeout: 20 + EnableNetworkLogs: 1 +--- !u!4 &620561612 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &620561613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} + m_Name: + m_EditorClassIdentifier: + Port: 7777 + Address: 127.0.0.1 + PingInterval: 1 + DisconnectTimeout: 5 + ReconnectDelay: 0.5 + MaxConnectAttempts: 10 + channels: [] + MessageBufferSize: 5120 + SimulatePacketLossChance: 0 + SimulateMinLatency: 100 + SimulateMaxLatency: 100 +--- !u!1001 &627808638 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1333567166} + m_Modifications: + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SizeDelta.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -23.40039 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -23.800293 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2848221156307247795, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_Name + value: ExitButton + objectReference: {fileID: 0} + - target: {fileID: 5266522511616468950, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + propertyPath: m_SceneMenuToLoad + value: + objectReference: {fileID: 11400000, guid: c10d995498e0c514a853c3506031d3fb, + type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3200770c16e3b2b4ebe7f604154faac7, type: 3} +--- !u!224 &627808639 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + type: 3} + m_PrefabInstance: {fileID: 627808638} + m_PrefabAsset: {fileID: 0} +--- !u!1 &630511901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 630511902} + - component: {fileID: 630511905} + - component: {fileID: 630511904} + - component: {fileID: 630511903} + m_Layer: 0 + m_Name: werq (80) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &630511902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 630511901} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 80 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &630511903 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 630511901} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &630511904 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 630511901} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &630511905 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 630511901} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!850595691 &633987594 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 3 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_TextureCompression: 1 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + 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 + m_PVRSampleCount: 500 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 +--- !u!1 &644252816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 644252817} + - component: {fileID: 644252820} + - component: {fileID: 644252819} + - component: {fileID: 644252818} + m_Layer: 0 + m_Name: werq (210) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &644252817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 644252816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 210 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &644252818 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 644252816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &644252819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 644252816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &644252820 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 644252816} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &646268286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 646268287} + - component: {fileID: 646268290} + - component: {fileID: 646268289} + - component: {fileID: 646268288} + m_Layer: 0 + m_Name: werq (84) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &646268287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646268286} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 84 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &646268288 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646268286} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &646268289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646268286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &646268290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646268286} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &647288638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 647288639} + - component: {fileID: 647288642} + - component: {fileID: 647288641} + - component: {fileID: 647288640} + m_Layer: 0 + m_Name: werq (170) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &647288639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647288638} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 170 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &647288640 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647288638} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &647288641 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647288638} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &647288642 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647288638} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &648827426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 648827427} + - component: {fileID: 648827430} + - component: {fileID: 648827429} + - component: {fileID: 648827428} + m_Layer: 0 + m_Name: werq (44) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &648827427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648827426} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 44 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &648827428 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648827426} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &648827429 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648827426} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &648827430 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648827426} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &650186540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 650186541} + - component: {fileID: 650186544} + - component: {fileID: 650186543} + - component: {fileID: 650186542} + m_Layer: 0 + m_Name: werq (126) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &650186541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 650186540} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 126 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &650186542 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 650186540} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &650186543 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 650186540} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &650186544 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 650186540} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &657213826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 657213827} + - component: {fileID: 657213830} + - component: {fileID: 657213829} + - component: {fileID: 657213828} + m_Layer: 0 + m_Name: werq (26) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &657213827 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657213826} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &657213828 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657213826} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &657213829 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657213826} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &657213830 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657213826} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &672979497 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 672979498} + - component: {fileID: 672979501} + - component: {fileID: 672979500} + - component: {fileID: 672979499} + m_Layer: 0 + m_Name: werq (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &672979498 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672979497} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &672979499 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672979497} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &672979500 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672979497} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &672979501 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672979497} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &674940303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 674940304} + - component: {fileID: 674940307} + - component: {fileID: 674940306} + - component: {fileID: 674940305} + m_Layer: 0 + m_Name: werq (155) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &674940304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674940303} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 155 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &674940305 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674940303} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &674940306 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674940303} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &674940307 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674940303} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &678326392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678326399} + - component: {fileID: 678326398} + - component: {fileID: 678326397} + - component: {fileID: 678326396} + - component: {fileID: 678326394} + - component: {fileID: 678326393} + - component: {fileID: 678326395} + m_Layer: 0 + m_Name: NetworkTransformBuffered + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &678326393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 +--- !u!114 &678326394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3301752843 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &678326395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + Authority: 0 + InLocalSpace: 0 + FixedSendsPerSecond: 30 + m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, + type: 2} +--- !u!65 &678326396 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &678326397 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 16358fcb4e0c94cc8b980fbb17259843, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &678326398 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &678326399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678326392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.25, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 702051986} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &680150732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 680150733} + - component: {fileID: 680150736} + - component: {fileID: 680150735} + - component: {fileID: 680150734} + m_Layer: 0 + m_Name: werq (54) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &680150733 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680150732} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 54 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &680150734 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680150732} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &680150735 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680150732} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &680150736 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680150732} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &687753481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 687753482} + - component: {fileID: 687753485} + - component: {fileID: 687753484} + - component: {fileID: 687753483} + m_Layer: 0 + m_Name: werq (218) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &687753482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 687753481} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 218 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &687753483 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 687753481} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &687753484 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 687753481} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &687753485 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 687753481} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &695189437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 695189438} + - component: {fileID: 695189441} + - component: {fileID: 695189440} + - component: {fileID: 695189439} + m_Layer: 0 + m_Name: werq (222) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &695189438 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695189437} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 222 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &695189439 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695189437} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &695189440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695189437} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &695189441 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695189437} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &702051983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 702051986} + - component: {fileID: 702051985} + - component: {fileID: 702051984} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &702051984 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_Enabled: 1 +--- !u!20 &702051985 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &702051986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702051983} + m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} + m_LocalPosition: {x: 8.25, y: 18.45, z: -16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 678326399} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 0.3 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &707341896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 707341897} + - component: {fileID: 707341900} + - component: {fileID: 707341899} + - component: {fileID: 707341898} + m_Layer: 0 + m_Name: werq (147) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &707341897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707341896} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 147 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &707341898 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707341896} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &707341899 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707341896} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &707341900 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707341896} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &709695180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 709695181} + - component: {fileID: 709695184} + - component: {fileID: 709695183} + - component: {fileID: 709695182} + m_Layer: 0 + m_Name: werq (144) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &709695181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709695180} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 144 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &709695182 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709695180} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &709695183 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709695180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &709695184 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709695180} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &725194418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 725194419} + - component: {fileID: 725194422} + - component: {fileID: 725194421} + - component: {fileID: 725194420} + m_Layer: 0 + m_Name: werq (90) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &725194419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725194418} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 90 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &725194420 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725194418} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &725194421 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725194418} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &725194422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725194418} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &726973988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 726973989} + - component: {fileID: 726973992} + - component: {fileID: 726973991} + - component: {fileID: 726973990} + m_Layer: 0 + m_Name: werq (100) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &726973989 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726973988} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 100 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &726973990 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726973988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &726973991 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726973988} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &726973992 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726973988} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &727811949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 727811950} + m_Layer: 0 + m_Name: scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &727811950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727811949} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -16.3, y: 0, z: 14.7} + m_LocalScale: {x: 8.708106, y: 8.708106, z: 8.708106} + m_Children: + - {fileID: 965264336} + - {fileID: 2078151580} + - {fileID: 1137692337} + - {fileID: 1788125429} + - {fileID: 983885396} + - {fileID: 250510713} + - {fileID: 1074598069} + - {fileID: 917869278} + - {fileID: 1570850648} + - {fileID: 2129603127} + - {fileID: 1300058641} + - {fileID: 1180163489} + - {fileID: 774843098} + - {fileID: 1790575671} + - {fileID: 1067422388} + - {fileID: 1156253991} + - {fileID: 817113581} + - {fileID: 482542013} + - {fileID: 1215758530} + - {fileID: 1357212647} + - {fileID: 1112769138} + - {fileID: 672979498} + - {fileID: 1694079736} + - {fileID: 145865923} + - {fileID: 181816471} + - {fileID: 71608579} + - {fileID: 657213827} + - {fileID: 896146542} + - {fileID: 1461177417} + - {fileID: 1586201512} + - {fileID: 897885835} + - {fileID: 1691410013} + - {fileID: 1268059512} + - {fileID: 1159180716} + - {fileID: 1048788819} + - {fileID: 1405769696} + - {fileID: 1224370287} + - {fileID: 585236793} + - {fileID: 1133583831} + - {fileID: 233906888} + - {fileID: 1047784309} + - {fileID: 835641754} + - {fileID: 1949195316} + - {fileID: 1131956204} + - {fileID: 648827427} + - {fileID: 1385336452} + - {fileID: 2089701613} + - {fileID: 1602406365} + - {fileID: 1377941354} + - {fileID: 1426981712} + - {fileID: 1703907385} + - {fileID: 731245576} + - {fileID: 1060401003} + - {fileID: 1003925989} + - {fileID: 680150733} + - {fileID: 2128892964} + - {fileID: 1421330464} + - {fileID: 407199356} + - {fileID: 364557582} + - {fileID: 1740002709} + - {fileID: 1429461274} + - {fileID: 865488583} + - {fileID: 506377922} + - {fileID: 193655141} + - {fileID: 1409818199} + - {fileID: 1895837568} + - {fileID: 555000402} + - {fileID: 1870696866} + - {fileID: 590172463} + - {fileID: 1518464149} + - {fileID: 1093974178} + - {fileID: 1619314279} + - {fileID: 1958441939} + - {fileID: 1858019618} + - {fileID: 1180366241} + - {fileID: 351881179} + - {fileID: 1406760490} + - {fileID: 737390303} + - {fileID: 1732288670} + - {fileID: 827154094} + - {fileID: 630511902} + - {fileID: 961255783} + - {fileID: 863682373} + - {fileID: 224195389} + - {fileID: 646268287} + - {fileID: 49482615} + - {fileID: 1341498265} + - {fileID: 1952242987} + - {fileID: 1262347583} + - {fileID: 1271441866} + - {fileID: 725194419} + - {fileID: 1659076780} + - {fileID: 1278291353} + - {fileID: 37826287} + - {fileID: 1839669254} + - {fileID: 1669016180} + - {fileID: 1156559623} + - {fileID: 324852035} + - {fileID: 482761099} + - {fileID: 1409119961} + - {fileID: 726973989} + - {fileID: 1190201087} + - {fileID: 1687987867} + - {fileID: 1425645966} + - {fileID: 213478267} + - {fileID: 80528583} + - {fileID: 1571650944} + - {fileID: 1325528651} + - {fileID: 218116998} + - {fileID: 1730875156} + - {fileID: 2019907571} + - {fileID: 744554807} + - {fileID: 1748430818} + - {fileID: 1049975820} + - {fileID: 489960631} + - {fileID: 1663972044} + - {fileID: 2053103142} + - {fileID: 1162454166} + - {fileID: 1147996526} + - {fileID: 2049090155} + - {fileID: 1114307393} + - {fileID: 1209088797} + - {fileID: 389923201} + - {fileID: 261586003} + - {fileID: 819907130} + - {fileID: 191799454} + - {fileID: 650186541} + - {fileID: 193992119} + - {fileID: 2024574102} + - {fileID: 586781684} + - {fileID: 2106865351} + - {fileID: 256564934} + - {fileID: 777257499} + - {fileID: 1838111266} + - {fileID: 2030561001} + - {fileID: 237078270} + - {fileID: 488989117} + - {fileID: 1860346520} + - {fileID: 1029714101} + - {fileID: 1985357180} + - {fileID: 149862985} + - {fileID: 110121430} + - {fileID: 1728034271} + - {fileID: 150536645} + - {fileID: 709695181} + - {fileID: 1680116253} + - {fileID: 33522694} + - {fileID: 707341897} + - {fileID: 2036986369} + - {fileID: 1005765828} + - {fileID: 561629646} + - {fileID: 1532247925} + - {fileID: 1618818993} + - {fileID: 1566163831} + - {fileID: 1583118626} + - {fileID: 674940304} + - {fileID: 839241139} + - {fileID: 210309824} + - {fileID: 942872872} + - {fileID: 956820039} + - {fileID: 1493942655} + - {fileID: 1104813048} + - {fileID: 902054443} + - {fileID: 529345319} + - {fileID: 169380228} + - {fileID: 1852876036} + - {fileID: 235112666} + - {fileID: 1711317423} + - {fileID: 379921467} + - {fileID: 206214830} + - {fileID: 647288639} + - {fileID: 405946600} + - {fileID: 1859094915} + - {fileID: 1981994849} + - {fileID: 788050735} + - {fileID: 292590886} + - {fileID: 1258424360} + - {fileID: 1323055548} + - {fileID: 1821753631} + - {fileID: 601557656} + - {fileID: 1615309368} + - {fileID: 1439769665} + - {fileID: 1191496718} + - {fileID: 1812680816} + - {fileID: 734717413} + - {fileID: 1556458765} + - {fileID: 953666714} + - {fileID: 1402687344} + - {fileID: 1368127828} + - {fileID: 186281140} + - {fileID: 779681318} + - {fileID: 959147176} + - {fileID: 79838172} + - {fileID: 1618109824} + - {fileID: 884228700} + - {fileID: 1089358756} + - {fileID: 916313679} + - {fileID: 53667805} + - {fileID: 1604954356} + - {fileID: 1056515548} + - {fileID: 1451779898} + - {fileID: 1633292496} + - {fileID: 1218492681} + - {fileID: 604298091} + - {fileID: 385354837} + - {fileID: 1796328355} + - {fileID: 1269849011} + - {fileID: 1537050449} + - {fileID: 1272924906} + - {fileID: 1191630249} + - {fileID: 644252817} + - {fileID: 1093954316} + - {fileID: 596272299} + - {fileID: 995765806} + - {fileID: 565740969} + - {fileID: 518010393} + - {fileID: 1776278817} + - {fileID: 1180486513} + - {fileID: 687753482} + - {fileID: 1248100665} + - {fileID: 1165208748} + - {fileID: 1433282151} + - {fileID: 695189438} + - {fileID: 1953834567} + - {fileID: 2060061433} + - {fileID: 1697254606} + - {fileID: 1918158912} + - {fileID: 956406376} + - {fileID: 100213238} + - {fileID: 1103049817} + - {fileID: 1426769440} + - {fileID: 801747461} + - {fileID: 1783447246} + - {fileID: 1769252478} + - {fileID: 1778934116} + - {fileID: 125350742} + - {fileID: 2133559710} + - {fileID: 777692127} + - {fileID: 106240637} + - {fileID: 1027215038} + - {fileID: 1333670312} + - {fileID: 379641073} + - {fileID: 286306875} + - {fileID: 1347200039} + - {fileID: 771846004} + - {fileID: 2068975255} + - {fileID: 1254141403} + - {fileID: 1350981874} + - {fileID: 1722987696} + - {fileID: 1168640878} + - {fileID: 106591949} + - {fileID: 959806568} + - {fileID: 1091646623} + - {fileID: 188404884} + - {fileID: 398540133} + - {fileID: 1399839515} + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &731245575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 731245576} + - component: {fileID: 731245579} + - component: {fileID: 731245578} + - component: {fileID: 731245577} + m_Layer: 0 + m_Name: werq (51) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &731245576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731245575} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 51 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &731245577 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731245575} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &731245578 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731245575} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &731245579 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731245575} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &734717412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 734717413} + - component: {fileID: 734717416} + - component: {fileID: 734717415} + - component: {fileID: 734717414} + m_Layer: 0 + m_Name: werq (184) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &734717413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734717412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 184 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &734717414 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734717412} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &734717415 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734717412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &734717416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734717412} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &737390302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 737390303} + - component: {fileID: 737390306} + - component: {fileID: 737390305} + - component: {fileID: 737390304} + m_Layer: 0 + m_Name: werq (77) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &737390303 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 737390302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -0.731} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 77 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &737390304 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 737390302} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &737390305 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 737390302} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &737390306 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 737390302} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &744554806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 744554807} + - component: {fileID: 744554810} + - component: {fileID: 744554809} + - component: {fileID: 744554808} + m_Layer: 0 + m_Name: werq (111) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &744554807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744554806} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -1.7079993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 111 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &744554808 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744554806} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &744554809 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744554806} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &744554810 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744554806} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &771846003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 771846004} + - component: {fileID: 771846007} + - component: {fileID: 771846006} + - component: {fileID: 771846005} + m_Layer: 0 + m_Name: werq (244) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &771846004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 771846003} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 244 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &771846005 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 771846003} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &771846006 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 771846003} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &771846007 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 771846003} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &774843097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 774843098} + - component: {fileID: 774843101} + - component: {fileID: 774843100} + - component: {fileID: 774843099} + m_Layer: 0 + m_Name: werq (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &774843098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774843097} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &774843099 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774843097} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &774843100 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774843097} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &774843101 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774843097} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &777257498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 777257499} + - component: {fileID: 777257502} + - component: {fileID: 777257501} + - component: {fileID: 777257500} + m_Layer: 0 + m_Name: werq (132) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &777257499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777257498} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 132 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &777257500 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777257498} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &777257501 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777257498} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &777257502 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777257498} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &777692126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 777692127} + - component: {fileID: 777692130} + - component: {fileID: 777692129} + - component: {fileID: 777692128} + m_Layer: 0 + m_Name: werq (237) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &777692127 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777692126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 237 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &777692128 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777692126} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &777692129 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777692126} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &777692130 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777692126} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &779681317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779681318} + - component: {fileID: 779681321} + - component: {fileID: 779681320} + - component: {fileID: 779681319} + m_Layer: 0 + m_Name: werq (190) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &779681318 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779681317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 190 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &779681319 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779681317} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &779681320 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779681317} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &779681321 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779681317} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &788050734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 788050735} + - component: {fileID: 788050738} + - component: {fileID: 788050737} + - component: {fileID: 788050736} + m_Layer: 0 + m_Name: werq (174) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &788050735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788050734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 174 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &788050736 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788050734} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &788050737 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788050734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &788050738 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788050734} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &801747460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801747461} + - component: {fileID: 801747464} + - component: {fileID: 801747463} + - component: {fileID: 801747462} + m_Layer: 0 + m_Name: werq (231) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801747461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801747460} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -3.1950006} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 231 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &801747462 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801747460} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &801747463 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801747460} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &801747464 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801747460} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &817113580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 817113581} + - component: {fileID: 817113584} + - component: {fileID: 817113583} + - component: {fileID: 817113582} + m_Layer: 0 + m_Name: werq (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &817113581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817113580} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &817113582 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817113580} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &817113583 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817113580} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &817113584 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817113580} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &819907129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819907130} + - component: {fileID: 819907133} + - component: {fileID: 819907132} + - component: {fileID: 819907131} + m_Layer: 0 + m_Name: werq (124) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &819907130 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819907129} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 124 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &819907131 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819907129} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &819907132 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819907129} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &819907133 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819907129} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &827154093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 827154094} + - component: {fileID: 827154097} + - component: {fileID: 827154096} + - component: {fileID: 827154095} + m_Layer: 0 + m_Name: werq (79) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &827154094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 827154093} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -0.73100007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 79 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &827154095 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 827154093} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &827154096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 827154093} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &827154097 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 827154093} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &835641753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835641754} + - component: {fileID: 835641757} + - component: {fileID: 835641756} + - component: {fileID: 835641755} + m_Layer: 0 + m_Name: werq (41) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835641754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835641753} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 41 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &835641755 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835641753} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &835641756 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835641753} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &835641757 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835641753} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &839241138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839241139} + - component: {fileID: 839241142} + - component: {fileID: 839241141} + - component: {fileID: 839241140} + m_Layer: 0 + m_Name: werq (156) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &839241139 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839241138} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 156 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &839241140 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839241138} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &839241141 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839241138} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &839241142 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839241138} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &849106629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 849106632} + - component: {fileID: 849106631} + - component: {fileID: 849106630} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &849106630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &849106631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &849106632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849106629} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &863682372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 863682373} + - component: {fileID: 863682376} + - component: {fileID: 863682375} + - component: {fileID: 863682374} + m_Layer: 0 + m_Name: werq (82) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &863682373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 863682372} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 82 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &863682374 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 863682372} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &863682375 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 863682372} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &863682376 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 863682372} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &865488582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 865488583} + - component: {fileID: 865488586} + - component: {fileID: 865488585} + - component: {fileID: 865488584} + m_Layer: 0 + m_Name: werq (61) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &865488583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865488582} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -1.7079992} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 61 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &865488584 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865488582} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &865488585 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865488582} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &865488586 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865488582} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &884228699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 884228700} + - component: {fileID: 884228703} + - component: {fileID: 884228702} + - component: {fileID: 884228701} + m_Layer: 0 + m_Name: werq (194) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &884228700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884228699} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 194 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &884228701 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884228699} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &884228702 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884228699} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &884228703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884228699} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &896146541 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 896146542} + - component: {fileID: 896146545} + - component: {fileID: 896146544} + - component: {fileID: 896146543} + m_Layer: 0 + m_Name: werq (27) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &896146542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896146541} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &896146543 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896146541} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &896146544 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896146541} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &896146545 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896146541} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &897885834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 897885835} + - component: {fileID: 897885838} + - component: {fileID: 897885837} + - component: {fileID: 897885836} + m_Layer: 0 + m_Name: werq (30) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &897885835 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897885834} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 30 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &897885836 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897885834} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &897885837 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897885834} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &897885838 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897885834} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &902054442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 902054443} + - component: {fileID: 902054446} + - component: {fileID: 902054445} + - component: {fileID: 902054444} + m_Layer: 0 + m_Name: werq (162) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &902054443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902054442} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 162 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &902054444 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902054442} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &902054445 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902054442} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &902054446 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902054442} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &916313678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 916313679} + - component: {fileID: 916313682} + - component: {fileID: 916313681} + - component: {fileID: 916313680} + m_Layer: 0 + m_Name: werq (196) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &916313679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916313678} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 196 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &916313680 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916313678} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &916313681 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916313678} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &916313682 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916313678} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &917869277 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 917869278} + - component: {fileID: 917869281} + - component: {fileID: 917869280} + - component: {fileID: 917869279} + m_Layer: 0 + m_Name: werq (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &917869278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917869277} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -0.238} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &917869279 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917869277} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &917869280 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917869277} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &917869281 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917869277} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &942872871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942872872} + - component: {fileID: 942872875} + - component: {fileID: 942872874} + - component: {fileID: 942872873} + m_Layer: 0 + m_Name: werq (158) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &942872872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942872871} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 158 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &942872873 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942872871} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &942872874 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942872871} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &942872875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942872871} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &953666713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953666714} + - component: {fileID: 953666717} + - component: {fileID: 953666716} + - component: {fileID: 953666715} + m_Layer: 0 + m_Name: werq (186) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &953666714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953666713} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 186 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &953666715 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953666713} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &953666716 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953666713} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &953666717 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953666713} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &956406375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 956406376} + - component: {fileID: 956406379} + - component: {fileID: 956406378} + - component: {fileID: 956406377} + m_Layer: 0 + m_Name: werq (227) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &956406376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956406375} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 227 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &956406377 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956406375} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &956406378 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956406375} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &956406379 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956406375} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &956820038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 956820039} + - component: {fileID: 956820042} + - component: {fileID: 956820041} + - component: {fileID: 956820040} + m_Layer: 0 + m_Name: werq (159) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &956820039 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956820038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 159 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &956820040 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956820038} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &956820041 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956820038} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &956820042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956820038} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &959147175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959147176} + - component: {fileID: 959147179} + - component: {fileID: 959147178} + - component: {fileID: 959147177} + m_Layer: 0 + m_Name: werq (191) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &959147176 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959147175} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 191 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &959147177 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959147175} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &959147178 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959147175} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &959147179 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959147175} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &959806567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959806568} + - component: {fileID: 959806571} + - component: {fileID: 959806570} + - component: {fileID: 959806569} + m_Layer: 0 + m_Name: werq (251) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &959806568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959806567} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 251 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &959806569 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959806567} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &959806570 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959806567} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &959806571 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959806567} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &961255782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 961255783} + - component: {fileID: 961255786} + - component: {fileID: 961255785} + - component: {fileID: 961255784} + m_Layer: 0 + m_Name: werq (81) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &961255783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961255782} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 81 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &961255784 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961255782} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &961255785 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961255782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &961255786 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961255782} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &965264335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965264336} + - component: {fileID: 965264339} + - component: {fileID: 965264338} + - component: {fileID: 965264337} + m_Layer: 0 + m_Name: werq + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &965264336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965264335} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &965264337 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965264335} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &965264338 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965264335} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &965264339 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965264335} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &983885395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 983885396} + - component: {fileID: 983885399} + - component: {fileID: 983885398} + - component: {fileID: 983885397} + m_Layer: 0 + m_Name: werq (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &983885396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983885395} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &983885397 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983885395} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &983885398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983885395} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &983885399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983885395} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &995765805 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 995765806} + - component: {fileID: 995765809} + - component: {fileID: 995765808} + - component: {fileID: 995765807} + m_Layer: 0 + m_Name: werq (213) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &995765806 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995765805} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 213 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &995765807 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995765805} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &995765808 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995765805} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &995765809 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995765805} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1003925988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1003925989} + - component: {fileID: 1003925992} + - component: {fileID: 1003925991} + - component: {fileID: 1003925990} + m_Layer: 0 + m_Name: werq (53) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1003925989 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1003925988} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 53 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1003925990 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1003925988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1003925991 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1003925988} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1003925992 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1003925988} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1005765827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1005765828} + - component: {fileID: 1005765831} + - component: {fileID: 1005765830} + - component: {fileID: 1005765829} + m_Layer: 0 + m_Name: werq (149) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1005765828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005765827} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 149 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1005765829 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005765827} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1005765830 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005765827} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1005765831 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1005765827} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1027215037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1027215038} + - component: {fileID: 1027215041} + - component: {fileID: 1027215040} + - component: {fileID: 1027215039} + m_Layer: 0 + m_Name: werq (239) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1027215038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027215037} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 239 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1027215039 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027215037} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1027215040 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027215037} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1027215041 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027215037} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1029714100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1029714101} + - component: {fileID: 1029714104} + - component: {fileID: 1029714103} + - component: {fileID: 1029714102} + m_Layer: 0 + m_Name: werq (138) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1029714101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1029714100} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 138 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1029714102 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1029714100} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1029714103 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1029714100} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1029714104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1029714100} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1047784308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1047784309} + - component: {fileID: 1047784312} + - component: {fileID: 1047784311} + - component: {fileID: 1047784310} + m_Layer: 0 + m_Name: werq (40) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1047784309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047784308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 40 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1047784310 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047784308} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1047784311 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047784308} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1047784312 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047784308} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1048788818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1048788819} + - component: {fileID: 1048788822} + - component: {fileID: 1048788821} + - component: {fileID: 1048788820} + m_Layer: 0 + m_Name: werq (34) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1048788819 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048788818} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 34 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1048788820 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048788818} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1048788821 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048788818} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1048788822 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048788818} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1049975819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1049975820} + - component: {fileID: 1049975823} + - component: {fileID: 1049975822} + - component: {fileID: 1049975821} + m_Layer: 0 + m_Name: werq (113) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1049975820 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049975819} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 113 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1049975821 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049975819} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1049975822 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049975819} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1049975823 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049975819} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1056515547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1056515548} + - component: {fileID: 1056515551} + - component: {fileID: 1056515550} + - component: {fileID: 1056515549} + m_Layer: 0 + m_Name: werq (199) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1056515548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056515547} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -2.2180014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 199 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1056515549 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056515547} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1056515550 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056515547} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1056515551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056515547} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1060401002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1060401003} + - component: {fileID: 1060401006} + - component: {fileID: 1060401005} + - component: {fileID: 1060401004} + m_Layer: 0 + m_Name: werq (52) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1060401003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060401002} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 52 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1060401004 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060401002} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1060401005 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060401002} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1060401006 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060401002} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1067422387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1067422388} + - component: {fileID: 1067422391} + - component: {fileID: 1067422390} + - component: {fileID: 1067422389} + m_Layer: 0 + m_Name: werq (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1067422388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067422387} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1067422389 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067422387} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1067422390 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067422387} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1067422391 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067422387} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1074598068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1074598069} + - component: {fileID: 1074598072} + - component: {fileID: 1074598071} + - component: {fileID: 1074598070} + m_Layer: 0 + m_Name: werq (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1074598069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1074598068} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1074598070 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1074598068} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1074598071 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1074598068} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1074598072 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1074598068} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1089358755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1089358756} + - component: {fileID: 1089358759} + - component: {fileID: 1089358758} + - component: {fileID: 1089358757} + m_Layer: 0 + m_Name: werq (195) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1089358756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089358755} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 195 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1089358757 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089358755} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1089358758 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089358755} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1089358759 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1089358755} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1091646622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1091646623} + - component: {fileID: 1091646626} + - component: {fileID: 1091646625} + - component: {fileID: 1091646624} + m_Layer: 0 + m_Name: werq (252) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1091646623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091646622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 252 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1091646624 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091646622} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1091646625 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091646622} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1091646626 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091646622} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1093954315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1093954316} + - component: {fileID: 1093954319} + - component: {fileID: 1093954318} + - component: {fileID: 1093954317} + m_Layer: 0 + m_Name: werq (211) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1093954316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093954315} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 211 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1093954317 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093954315} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1093954318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093954315} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1093954319 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093954315} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1093974177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1093974178} + - component: {fileID: 1093974181} + - component: {fileID: 1093974180} + - component: {fileID: 1093974179} + m_Layer: 0 + m_Name: werq (70) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1093974178 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093974177} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 70 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1093974179 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093974177} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1093974180 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093974177} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1093974181 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093974177} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1103049816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1103049817} + - component: {fileID: 1103049820} + - component: {fileID: 1103049819} + - component: {fileID: 1103049818} + m_Layer: 0 + m_Name: werq (229) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1103049817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1103049816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 229 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1103049818 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1103049816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1103049819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1103049816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1103049820 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1103049816} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1104813047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1104813048} + - component: {fileID: 1104813051} + - component: {fileID: 1104813050} + - component: {fileID: 1104813049} + m_Layer: 0 + m_Name: werq (161) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1104813048 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104813047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 161 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1104813049 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104813047} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1104813050 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104813047} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1104813051 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104813047} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1112769137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1112769138} + - component: {fileID: 1112769141} + - component: {fileID: 1112769140} + - component: {fileID: 1112769139} + m_Layer: 0 + m_Name: werq (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1112769138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112769137} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1112769139 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112769137} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1112769140 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112769137} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1112769141 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112769137} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1114307392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1114307393} + - component: {fileID: 1114307396} + - component: {fileID: 1114307395} + - component: {fileID: 1114307394} + m_Layer: 0 + m_Name: werq (120) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1114307393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114307392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 120 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1114307394 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114307392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1114307395 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114307392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1114307396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114307392} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1131956203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1131956204} + - component: {fileID: 1131956207} + - component: {fileID: 1131956206} + - component: {fileID: 1131956205} + m_Layer: 0 + m_Name: werq (43) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1131956204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131956203} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 43 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1131956205 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131956203} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1131956206 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131956203} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1131956207 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131956203} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1133583830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1133583831} + - component: {fileID: 1133583834} + - component: {fileID: 1133583833} + - component: {fileID: 1133583832} + m_Layer: 0 + m_Name: werq (38) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1133583831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1133583830} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 38 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1133583832 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1133583830} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1133583833 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1133583830} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1133583834 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1133583830} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1137692336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1137692337} + - component: {fileID: 1137692340} + - component: {fileID: 1137692339} + - component: {fileID: 1137692338} + m_Layer: 0 + m_Name: werq (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1137692337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137692336} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1137692338 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137692336} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1137692339 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137692336} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1137692340 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137692336} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1147996525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1147996526} + - component: {fileID: 1147996529} + - component: {fileID: 1147996528} + - component: {fileID: 1147996527} + m_Layer: 0 + m_Name: werq (118) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1147996526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147996525} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 118 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1147996527 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147996525} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1147996528 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147996525} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1147996529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147996525} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1156253990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1156253991} + - component: {fileID: 1156253994} + - component: {fileID: 1156253993} + - component: {fileID: 1156253992} + m_Layer: 0 + m_Name: werq (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1156253991 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156253990} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -0.73100007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1156253992 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156253990} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1156253993 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156253990} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1156253994 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156253990} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1156559622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1156559623} + - component: {fileID: 1156559626} + - component: {fileID: 1156559625} + - component: {fileID: 1156559624} + m_Layer: 0 + m_Name: werq (96) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1156559623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156559622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 96 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1156559624 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156559622} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1156559625 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156559622} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1156559626 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1156559622} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1159180715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1159180716} + - component: {fileID: 1159180719} + - component: {fileID: 1159180718} + - component: {fileID: 1159180717} + m_Layer: 0 + m_Name: werq (33) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1159180716 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159180715} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 33 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1159180717 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159180715} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1159180718 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159180715} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1159180719 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159180715} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1162454165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1162454166} + - component: {fileID: 1162454169} + - component: {fileID: 1162454168} + - component: {fileID: 1162454167} + m_Layer: 0 + m_Name: werq (117) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1162454166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162454165} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 117 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1162454167 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162454165} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1162454168 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162454165} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1162454169 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162454165} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1165208747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1165208748} + - component: {fileID: 1165208751} + - component: {fileID: 1165208750} + - component: {fileID: 1165208749} + m_Layer: 0 + m_Name: werq (220) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1165208748 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165208747} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 220 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1165208749 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165208747} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1165208750 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165208747} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1165208751 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165208747} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1168640877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1168640878} + - component: {fileID: 1168640881} + - component: {fileID: 1168640880} + - component: {fileID: 1168640879} + m_Layer: 0 + m_Name: werq (249) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1168640878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168640877} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 249 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1168640879 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168640877} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1168640880 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168640877} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1168640881 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168640877} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1180163488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1180163489} + - component: {fileID: 1180163492} + - component: {fileID: 1180163491} + - component: {fileID: 1180163490} + m_Layer: 0 + m_Name: werq (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1180163489 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180163488} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1180163490 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180163488} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1180163491 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180163488} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1180163492 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180163488} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1180366240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1180366241} + - component: {fileID: 1180366244} + - component: {fileID: 1180366243} + - component: {fileID: 1180366242} + m_Layer: 0 + m_Name: werq (74) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1180366241 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180366240} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 74 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1180366242 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180366240} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1180366243 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180366240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1180366244 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180366240} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1180486512 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1180486513} + - component: {fileID: 1180486516} + - component: {fileID: 1180486515} + - component: {fileID: 1180486514} + m_Layer: 0 + m_Name: werq (217) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1180486513 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180486512} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 217 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1180486514 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180486512} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1180486515 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180486512} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1180486516 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180486512} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1190201086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1190201087} + - component: {fileID: 1190201090} + - component: {fileID: 1190201089} + - component: {fileID: 1190201088} + m_Layer: 0 + m_Name: werq (101) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1190201087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190201086} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 101 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1190201088 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190201086} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1190201089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190201086} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1190201090 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190201086} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1191496717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191496718} + - component: {fileID: 1191496721} + - component: {fileID: 1191496720} + - component: {fileID: 1191496719} + m_Layer: 0 + m_Name: werq (182) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1191496718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191496717} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 182 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1191496719 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191496717} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1191496720 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191496717} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1191496721 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191496717} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1191630248 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191630249} + - component: {fileID: 1191630252} + - component: {fileID: 1191630251} + - component: {fileID: 1191630250} + m_Layer: 0 + m_Name: werq (209) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1191630249 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191630248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 209 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1191630250 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191630248} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1191630251 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191630248} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1191630252 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191630248} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1209088796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1209088797} + - component: {fileID: 1209088800} + - component: {fileID: 1209088799} + - component: {fileID: 1209088798} + m_Layer: 0 + m_Name: werq (121) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1209088797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209088796} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 121 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1209088798 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209088796} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1209088799 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209088796} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1209088800 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209088796} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1215758529 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1215758530} + - component: {fileID: 1215758533} + - component: {fileID: 1215758532} + - component: {fileID: 1215758531} + m_Layer: 0 + m_Name: werq (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1215758530 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215758529} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1215758531 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215758529} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1215758532 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215758529} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1215758533 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1215758529} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1218492680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218492681} + - component: {fileID: 1218492684} + - component: {fileID: 1218492683} + - component: {fileID: 1218492682} + m_Layer: 0 + m_Name: werq (202) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218492681 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218492680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 202 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1218492682 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218492680} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1218492683 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218492680} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1218492684 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218492680} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1224370286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1224370287} + - component: {fileID: 1224370290} + - component: {fileID: 1224370289} + - component: {fileID: 1224370288} + m_Layer: 0 + m_Name: werq (36) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1224370287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1224370286} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 36 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1224370288 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1224370286} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1224370289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1224370286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1224370290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1224370286} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1248100664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1248100665} + - component: {fileID: 1248100668} + - component: {fileID: 1248100667} + - component: {fileID: 1248100666} + m_Layer: 0 + m_Name: werq (219) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1248100665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248100664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 219 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1248100666 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248100664} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1248100667 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248100664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1248100668 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1248100664} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1254141402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1254141403} + - component: {fileID: 1254141406} + - component: {fileID: 1254141405} + - component: {fileID: 1254141404} + m_Layer: 0 + m_Name: werq (246) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1254141403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254141402} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 246 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1254141404 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254141402} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1254141405 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254141402} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1254141406 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254141402} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1258424359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1258424360} + - component: {fileID: 1258424363} + - component: {fileID: 1258424362} + - component: {fileID: 1258424361} + m_Layer: 0 + m_Name: werq (176) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1258424360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1258424359} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 176 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1258424361 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1258424359} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1258424362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1258424359} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1258424363 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1258424359} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1262347582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1262347583} + - component: {fileID: 1262347586} + - component: {fileID: 1262347585} + - component: {fileID: 1262347584} + m_Layer: 0 + m_Name: werq (88) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1262347583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262347582} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 88 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1262347584 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262347582} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1262347585 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262347582} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1262347586 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1262347582} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1268059511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1268059512} + - component: {fileID: 1268059515} + - component: {fileID: 1268059514} + - component: {fileID: 1268059513} + m_Layer: 0 + m_Name: werq (32) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1268059512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268059511} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 32 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1268059513 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268059511} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1268059514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268059511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1268059515 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268059511} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1269849010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1269849011} + - component: {fileID: 1269849014} + - component: {fileID: 1269849013} + - component: {fileID: 1269849012} + m_Layer: 0 + m_Name: werq (206) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1269849011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269849010} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 206 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1269849012 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269849010} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1269849013 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269849010} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1269849014 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269849010} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1271441865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1271441866} + - component: {fileID: 1271441869} + - component: {fileID: 1271441868} + - component: {fileID: 1271441867} + m_Layer: 0 + m_Name: werq (89) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1271441866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271441865} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 89 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1271441867 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271441865} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1271441868 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271441865} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1271441869 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1271441865} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1272924905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272924906} + - component: {fileID: 1272924909} + - component: {fileID: 1272924908} + - component: {fileID: 1272924907} + m_Layer: 0 + m_Name: werq (208) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1272924906 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272924905} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 208 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1272924907 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272924905} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1272924908 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272924905} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1272924909 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272924905} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1278291352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1278291353} + - component: {fileID: 1278291356} + - component: {fileID: 1278291355} + - component: {fileID: 1278291354} + m_Layer: 0 + m_Name: werq (92) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1278291353 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278291352} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 92 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1278291354 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278291352} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1278291355 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278291352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1278291356 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278291352} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1300058640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1300058641} + - component: {fileID: 1300058644} + - component: {fileID: 1300058643} + - component: {fileID: 1300058642} + m_Layer: 0 + m_Name: werq (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1300058641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300058640} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1300058642 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300058640} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1300058643 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300058640} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1300058644 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300058640} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1323055547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1323055548} + - component: {fileID: 1323055551} + - component: {fileID: 1323055550} + - component: {fileID: 1323055549} + m_Layer: 0 + m_Name: werq (177) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1323055548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323055547} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 177 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1323055549 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323055547} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1323055550 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323055547} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1323055551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323055547} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1325528650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1325528651} + - component: {fileID: 1325528654} + - component: {fileID: 1325528653} + - component: {fileID: 1325528652} + m_Layer: 0 + m_Name: werq (107) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1325528651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325528650} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 107 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1325528652 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325528650} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1325528653 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325528650} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1325528654 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325528650} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1333567162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1333567166} + - component: {fileID: 1333567165} + - component: {fileID: 1333567164} + - component: {fileID: 1333567163} + - component: {fileID: 1333567167} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1333567163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1333567164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1333567165 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1333567166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 627808639} + - {fileID: 1536251758} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1333567167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333567162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4390d966eb8724ba2907f775b34e94ea, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkManager: {fileID: 620561611} + ButtonsRoot: {fileID: 0} +--- !u!1 &1333670311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1333670312} + - component: {fileID: 1333670315} + - component: {fileID: 1333670314} + - component: {fileID: 1333670313} + m_Layer: 0 + m_Name: werq (240) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1333670312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333670311} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 240 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1333670313 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333670311} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1333670314 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333670311} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1333670315 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333670311} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1341498264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1341498265} + - component: {fileID: 1341498268} + - component: {fileID: 1341498267} + - component: {fileID: 1341498266} + m_Layer: 0 + m_Name: werq (86) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1341498265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341498264} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 86 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1341498266 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341498264} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1341498267 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341498264} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1341498268 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341498264} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1347200038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1347200039} + - component: {fileID: 1347200042} + - component: {fileID: 1347200041} + - component: {fileID: 1347200040} + m_Layer: 0 + m_Name: werq (243) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1347200039 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347200038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 243 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1347200040 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347200038} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1347200041 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347200038} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1347200042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1347200038} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1350981873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1350981874} + - component: {fileID: 1350981877} + - component: {fileID: 1350981876} + - component: {fileID: 1350981875} + m_Layer: 0 + m_Name: werq (247) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1350981874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350981873} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 247 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1350981875 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350981873} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1350981876 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350981873} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1350981877 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350981873} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1357212646 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1357212647} + - component: {fileID: 1357212650} + - component: {fileID: 1357212649} + - component: {fileID: 1357212648} + m_Layer: 0 + m_Name: werq (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1357212647 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357212646} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1357212648 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357212646} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1357212649 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357212646} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1357212650 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1357212646} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1368127827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1368127828} + - component: {fileID: 1368127831} + - component: {fileID: 1368127830} + - component: {fileID: 1368127829} + m_Layer: 0 + m_Name: werq (188) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1368127828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368127827} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 188 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1368127829 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368127827} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1368127830 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368127827} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1368127831 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368127827} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1377941353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1377941354} + - component: {fileID: 1377941357} + - component: {fileID: 1377941356} + - component: {fileID: 1377941355} + m_Layer: 0 + m_Name: werq (48) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1377941354 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377941353} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 48 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1377941355 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377941353} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1377941356 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377941353} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1377941357 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377941353} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1385336451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1385336452} + - component: {fileID: 1385336455} + - component: {fileID: 1385336454} + - component: {fileID: 1385336453} + m_Layer: 0 + m_Name: werq (45) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1385336452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1385336451} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -1.7079992} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 45 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1385336453 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1385336451} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1385336454 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1385336451} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1385336455 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1385336451} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1399839514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399839515} + - component: {fileID: 1399839518} + - component: {fileID: 1399839517} + - component: {fileID: 1399839516} + m_Layer: 0 + m_Name: werq (255) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399839515 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399839514} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 255 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1399839516 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399839514} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1399839517 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399839514} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1399839518 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399839514} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1402687343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1402687344} + - component: {fileID: 1402687347} + - component: {fileID: 1402687346} + - component: {fileID: 1402687345} + m_Layer: 0 + m_Name: werq (187) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1402687344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402687343} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 187 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1402687345 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402687343} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1402687346 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402687343} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1402687347 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402687343} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1405769695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405769696} + - component: {fileID: 1405769699} + - component: {fileID: 1405769698} + - component: {fileID: 1405769697} + m_Layer: 0 + m_Name: werq (35) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1405769696 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405769695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 35 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1405769697 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405769695} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1405769698 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405769695} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1405769699 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405769695} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1406760489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1406760490} + - component: {fileID: 1406760493} + - component: {fileID: 1406760492} + - component: {fileID: 1406760491} + m_Layer: 0 + m_Name: werq (76) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1406760490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406760489} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 76 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1406760491 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406760489} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1406760492 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406760489} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1406760493 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406760489} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1409119960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1409119961} + - component: {fileID: 1409119964} + - component: {fileID: 1409119963} + - component: {fileID: 1409119962} + m_Layer: 0 + m_Name: werq (99) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1409119961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409119960} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 99 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1409119962 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409119960} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1409119963 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409119960} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1409119964 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409119960} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1409818198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1409818199} + - component: {fileID: 1409818202} + - component: {fileID: 1409818201} + - component: {fileID: 1409818200} + m_Layer: 0 + m_Name: werq (64) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1409818199 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409818198} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 64 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1409818200 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409818198} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1409818201 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409818198} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1409818202 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409818198} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1421330463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1421330464} + - component: {fileID: 1421330467} + - component: {fileID: 1421330466} + - component: {fileID: 1421330465} + m_Layer: 0 + m_Name: werq (56) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1421330464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421330463} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 56 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1421330465 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421330463} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1421330466 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421330463} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1421330467 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421330463} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1425645965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1425645966} + - component: {fileID: 1425645969} + - component: {fileID: 1425645968} + - component: {fileID: 1425645967} + m_Layer: 0 + m_Name: werq (103) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1425645966 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425645965} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -1.2149993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 103 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1425645967 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425645965} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1425645968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425645965} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1425645969 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1425645965} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1426769439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1426769440} + - component: {fileID: 1426769443} + - component: {fileID: 1426769442} + - component: {fileID: 1426769441} + m_Layer: 0 + m_Name: werq (230) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1426769440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426769439} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 230 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1426769441 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426769439} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1426769442 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426769439} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1426769443 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426769439} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1426981711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1426981712} + - component: {fileID: 1426981715} + - component: {fileID: 1426981714} + - component: {fileID: 1426981713} + m_Layer: 0 + m_Name: werq (49) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1426981712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426981711} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 49 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1426981713 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426981711} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1426981714 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426981711} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1426981715 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426981711} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1429461273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1429461274} + - component: {fileID: 1429461277} + - component: {fileID: 1429461276} + - component: {fileID: 1429461275} + m_Layer: 0 + m_Name: werq (60) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1429461274 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429461273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 60 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1429461275 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429461273} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1429461276 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429461273} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1429461277 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1429461273} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1433282150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1433282151} + - component: {fileID: 1433282154} + - component: {fileID: 1433282153} + - component: {fileID: 1433282152} + m_Layer: 0 + m_Name: werq (221) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1433282151 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433282150} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 221 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1433282152 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433282150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1433282153 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433282150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1433282154 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433282150} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1439769664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1439769665} + - component: {fileID: 1439769668} + - component: {fileID: 1439769667} + - component: {fileID: 1439769666} + m_Layer: 0 + m_Name: werq (181) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1439769665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439769664} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 181 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1439769666 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439769664} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1439769667 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439769664} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1439769668 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439769664} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1451779897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1451779898} + - component: {fileID: 1451779901} + - component: {fileID: 1451779900} + - component: {fileID: 1451779899} + m_Layer: 0 + m_Name: werq (200) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1451779898 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451779897} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 200 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1451779899 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451779897} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1451779900 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451779897} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1451779901 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451779897} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1461177416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1461177417} + - component: {fileID: 1461177420} + - component: {fileID: 1461177419} + - component: {fileID: 1461177418} + m_Layer: 0 + m_Name: werq (28) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1461177417 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461177416} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 28 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1461177418 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461177416} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1461177419 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461177416} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1461177420 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461177416} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1493942654 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1493942655} + - component: {fileID: 1493942658} + - component: {fileID: 1493942657} + - component: {fileID: 1493942656} + m_Layer: 0 + m_Name: werq (160) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1493942655 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493942654} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 160 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1493942656 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493942654} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1493942657 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493942654} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1493942658 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493942654} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1518464148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1518464149} + - component: {fileID: 1518464152} + - component: {fileID: 1518464151} + - component: {fileID: 1518464150} + m_Layer: 0 + m_Name: werq (69) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1518464149 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1518464148} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 69 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1518464150 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1518464148} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1518464151 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1518464148} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1518464152 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1518464148} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1532247924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1532247925} + - component: {fileID: 1532247928} + - component: {fileID: 1532247927} + - component: {fileID: 1532247926} + m_Layer: 0 + m_Name: werq (151) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1532247925 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1532247924} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -2.2180014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 151 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1532247926 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1532247924} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1532247927 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1532247924} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1532247928 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1532247924} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!224 &1536251758 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + m_PrefabInstance: {fileID: 1928839749} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1537050448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537050449} + - component: {fileID: 1537050452} + - component: {fileID: 1537050451} + - component: {fileID: 1537050450} + m_Layer: 0 + m_Name: werq (207) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1537050449 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537050448} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 207 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1537050450 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537050448} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1537050451 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537050448} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1537050452 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537050448} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1556458764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1556458765} + - component: {fileID: 1556458768} + - component: {fileID: 1556458767} + - component: {fileID: 1556458766} + m_Layer: 0 + m_Name: werq (185) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1556458765 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556458764} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 185 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1556458766 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556458764} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1556458767 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556458764} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1556458768 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556458764} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1566163830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566163831} + - component: {fileID: 1566163834} + - component: {fileID: 1566163833} + - component: {fileID: 1566163832} + m_Layer: 0 + m_Name: werq (153) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1566163831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566163830} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 153 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1566163832 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566163830} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1566163833 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566163830} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1566163834 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566163830} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1570850647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1570850648} + - component: {fileID: 1570850651} + - component: {fileID: 1570850650} + - component: {fileID: 1570850649} + m_Layer: 0 + m_Name: werq (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1570850648 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570850647} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1570850649 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570850647} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1570850650 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570850647} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1570850651 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570850647} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1571650943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1571650944} + - component: {fileID: 1571650947} + - component: {fileID: 1571650946} + - component: {fileID: 1571650945} + m_Layer: 0 + m_Name: werq (106) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1571650944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571650943} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 106 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1571650945 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571650943} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1571650946 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571650943} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1571650947 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571650943} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1583118625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583118626} + - component: {fileID: 1583118629} + - component: {fileID: 1583118628} + - component: {fileID: 1583118627} + m_Layer: 0 + m_Name: werq (154) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1583118626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583118625} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 154 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1583118627 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583118625} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1583118628 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583118625} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1583118629 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583118625} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1586201511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586201512} + - component: {fileID: 1586201515} + - component: {fileID: 1586201514} + - component: {fileID: 1586201513} + m_Layer: 0 + m_Name: werq (29) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1586201512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586201511} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -0.731} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 29 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1586201513 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586201511} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1586201514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586201511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1586201515 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586201511} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1602406364 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1602406365} + - component: {fileID: 1602406368} + - component: {fileID: 1602406367} + - component: {fileID: 1602406366} + m_Layer: 0 + m_Name: werq (47) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1602406365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602406364} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -1.7079993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 47 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1602406366 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602406364} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1602406367 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602406364} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1602406368 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602406364} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1604954355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1604954356} + - component: {fileID: 1604954359} + - component: {fileID: 1604954358} + - component: {fileID: 1604954357} + m_Layer: 0 + m_Name: werq (198) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1604954356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604954355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 198 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1604954357 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604954355} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1604954358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604954355} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1604954359 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604954355} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1615309367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1615309368} + - component: {fileID: 1615309371} + - component: {fileID: 1615309370} + - component: {fileID: 1615309369} + m_Layer: 0 + m_Name: werq (180) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1615309368 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615309367} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 180 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1615309369 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615309367} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1615309370 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615309367} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1615309371 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615309367} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1618109823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1618109824} + - component: {fileID: 1618109827} + - component: {fileID: 1618109826} + - component: {fileID: 1618109825} + m_Layer: 0 + m_Name: werq (193) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1618109824 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618109823} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 193 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1618109825 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618109823} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1618109826 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618109823} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1618109827 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618109823} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1618818992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1618818993} + - component: {fileID: 1618818996} + - component: {fileID: 1618818995} + - component: {fileID: 1618818994} + m_Layer: 0 + m_Name: werq (152) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1618818993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618818992} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 152 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1618818994 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618818992} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1618818995 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618818992} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1618818996 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618818992} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1619314278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1619314279} + - component: {fileID: 1619314282} + - component: {fileID: 1619314281} + - component: {fileID: 1619314280} + m_Layer: 0 + m_Name: werq (71) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1619314279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619314278} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: -0.238} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 71 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1619314280 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619314278} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1619314281 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619314278} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1619314282 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619314278} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1633292495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1633292496} + - component: {fileID: 1633292499} + - component: {fileID: 1633292498} + - component: {fileID: 1633292497} + m_Layer: 0 + m_Name: werq (201) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1633292496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633292495} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 201 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1633292497 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633292495} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1633292498 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633292495} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1633292499 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633292495} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1643885206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643885211} + - component: {fileID: 1643885210} + - component: {fileID: 1643885209} + - component: {fileID: 1643885208} + - component: {fileID: 1643885207} + - component: {fileID: 1643885212} + - component: {fileID: 1643885213} + m_Layer: 0 + m_Name: NetworkTransformLegacy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1643885207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} + m_Name: + m_EditorClassIdentifier: + FixedSendsPerSecond: 20 + AssumeSyncedSends: 1 + InterpolatePosition: 1 + SnapDistance: 10 + InterpolateServer: 1 + MinMeters: 0.15 + MinDegrees: 1.5 + ExtrapolatePosition: 0 + MaxSendsToExtrapolate: 5 + Channel: + EnableRange: 0 + EnableNonProvokedResendChecks: 0 + DistanceSendrate: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 500 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!65 &1643885208 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1643885209 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1643885210 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1643885211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.29, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1643885212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3638589847 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &1643885213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643885206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 +--- !u!1 &1659076779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1659076780} + - component: {fileID: 1659076783} + - component: {fileID: 1659076782} + - component: {fileID: 1659076781} + m_Layer: 0 + m_Name: werq (91) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1659076780 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659076779} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 91 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1659076781 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659076779} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1659076782 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659076779} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1659076783 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1659076779} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1663972043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1663972044} + - component: {fileID: 1663972047} + - component: {fileID: 1663972046} + - component: {fileID: 1663972045} + m_Layer: 0 + m_Name: werq (115) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1663972044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1663972043} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 115 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1663972045 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1663972043} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1663972046 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1663972043} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1663972047 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1663972043} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1669016179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1669016180} + - component: {fileID: 1669016183} + - component: {fileID: 1669016182} + - component: {fileID: 1669016181} + m_Layer: 0 + m_Name: werq (95) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1669016180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669016179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -0.73100007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 95 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1669016181 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669016179} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1669016182 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669016179} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1669016183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1669016179} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1680116252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1680116253} + - component: {fileID: 1680116256} + - component: {fileID: 1680116255} + - component: {fileID: 1680116254} + m_Layer: 0 + m_Name: werq (145) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1680116253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1680116252} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.178, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 145 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1680116254 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1680116252} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1680116255 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1680116252} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1680116256 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1680116252} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1687987866 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687987867} + - component: {fileID: 1687987870} + - component: {fileID: 1687987869} + - component: {fileID: 1687987868} + m_Layer: 0 + m_Name: werq (102) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1687987867 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687987866} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 102 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1687987868 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687987866} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1687987869 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687987866} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1687987870 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687987866} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1691410012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1691410013} + - component: {fileID: 1691410016} + - component: {fileID: 1691410015} + - component: {fileID: 1691410014} + m_Layer: 0 + m_Name: werq (31) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1691410013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1691410012} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -0.73100007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 31 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1691410014 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1691410012} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1691410015 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1691410012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1691410016 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1691410012} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1694079735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1694079736} + - component: {fileID: 1694079739} + - component: {fileID: 1694079738} + - component: {fileID: 1694079737} + m_Layer: 0 + m_Name: werq (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1694079736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694079735} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -0.23800087} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1694079737 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694079735} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1694079738 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694079735} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1694079739 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694079735} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1697254605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1697254606} + - component: {fileID: 1697254609} + - component: {fileID: 1697254608} + - component: {fileID: 1697254607} + m_Layer: 0 + m_Name: werq (225) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1697254606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697254605} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 225 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1697254607 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697254605} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1697254608 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697254605} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1697254609 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697254605} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1703907384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1703907385} + - component: {fileID: 1703907388} + - component: {fileID: 1703907387} + - component: {fileID: 1703907386} + m_Layer: 0 + m_Name: werq (50) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1703907385 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703907384} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 50 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1703907386 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703907384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1703907387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703907384} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1703907388 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703907384} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1711317422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711317423} + - component: {fileID: 1711317426} + - component: {fileID: 1711317425} + - component: {fileID: 1711317424} + m_Layer: 0 + m_Name: werq (167) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711317423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711317422} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -3.1950006} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 167 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1711317424 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711317422} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1711317425 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711317422} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1711317426 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1711317422} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1722987695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1722987696} + - component: {fileID: 1722987699} + - component: {fileID: 1722987698} + - component: {fileID: 1722987697} + m_Layer: 0 + m_Name: werq (248) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1722987696 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722987695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 248 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1722987697 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722987695} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1722987698 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722987695} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1722987699 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722987695} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1728034270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1728034271} + - component: {fileID: 1728034274} + - component: {fileID: 1728034273} + - component: {fileID: 1728034272} + m_Layer: 0 + m_Name: werq (142) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1728034271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728034270} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -2.7110023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 142 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1728034272 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728034270} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1728034273 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728034270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1728034274 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1728034270} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1730875155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1730875156} + - component: {fileID: 1730875159} + - component: {fileID: 1730875158} + - component: {fileID: 1730875157} + m_Layer: 0 + m_Name: werq (109) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1730875156 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730875155} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -1.7079992} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 109 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1730875157 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730875155} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1730875158 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730875155} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1730875159 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730875155} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1732288669 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1732288670} + - component: {fileID: 1732288673} + - component: {fileID: 1732288672} + - component: {fileID: 1732288671} + m_Layer: 0 + m_Name: werq (78) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1732288670 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732288669} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 78 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1732288671 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732288669} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1732288672 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732288669} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1732288673 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732288669} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1740002708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1740002709} + - component: {fileID: 1740002712} + - component: {fileID: 1740002711} + - component: {fileID: 1740002710} + m_Layer: 0 + m_Name: werq (59) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1740002709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1740002708} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 59 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1740002710 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1740002708} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1740002711 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1740002708} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1740002712 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1740002708} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1748430817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1748430818} + - component: {fileID: 1748430821} + - component: {fileID: 1748430820} + - component: {fileID: 1748430819} + m_Layer: 0 + m_Name: werq (112) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1748430818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748430817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -0.9769993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 112 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1748430819 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748430817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1748430820 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748430817} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1748430821 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748430817} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1769252477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1769252478} + - component: {fileID: 1769252481} + - component: {fileID: 1769252480} + - component: {fileID: 1769252479} + m_Layer: 0 + m_Name: werq (233) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1769252478 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1769252477} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 233 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1769252479 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1769252477} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1769252480 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1769252477} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1769252481 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1769252477} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1776278816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1776278817} + - component: {fileID: 1776278820} + - component: {fileID: 1776278819} + - component: {fileID: 1776278818} + m_Layer: 0 + m_Name: werq (216) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1776278817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776278816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 216 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1776278818 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776278816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1776278819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776278816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1776278820 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776278816} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1778934115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1778934116} + - component: {fileID: 1778934119} + - component: {fileID: 1778934118} + - component: {fileID: 1778934117} + m_Layer: 0 + m_Name: werq (234) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1778934116 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778934115} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -3.45} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 234 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1778934117 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778934115} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1778934118 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778934115} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1778934119 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778934115} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1783447245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1783447246} + - component: {fileID: 1783447249} + - component: {fileID: 1783447248} + - component: {fileID: 1783447247} + m_Layer: 0 + m_Name: werq (232) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1783447246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783447245} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -3.4500008} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 232 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1783447247 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783447245} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1783447248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783447245} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1783447249 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783447245} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1788125428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1788125429} + - component: {fileID: 1788125432} + - component: {fileID: 1788125431} + - component: {fileID: 1788125430} + m_Layer: 0 + m_Name: werq (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1788125429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788125428} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1788125430 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788125428} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1788125431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788125428} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1788125432 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788125428} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1790575670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1790575671} + - component: {fileID: 1790575674} + - component: {fileID: 1790575673} + - component: {fileID: 1790575672} + m_Layer: 0 + m_Name: werq (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1790575671 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790575670} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -0.731} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1790575672 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790575670} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1790575673 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790575670} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1790575674 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790575670} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1796328354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1796328355} + - component: {fileID: 1796328358} + - component: {fileID: 1796328357} + - component: {fileID: 1796328356} + m_Layer: 0 + m_Name: werq (205) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1796328355 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796328354} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 205 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1796328356 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796328354} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1796328357 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796328354} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1796328358 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796328354} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1812680815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1812680816} + - component: {fileID: 1812680819} + - component: {fileID: 1812680818} + - component: {fileID: 1812680817} + m_Layer: 0 + m_Name: werq (183) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1812680816 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812680815} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 183 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1812680817 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812680815} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1812680818 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812680815} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1812680819 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812680815} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1821753630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1821753631} + - component: {fileID: 1821753634} + - component: {fileID: 1821753633} + - component: {fileID: 1821753632} + m_Layer: 0 + m_Name: werq (178) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1821753631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821753630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.4059999, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 178 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1821753632 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821753630} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1821753633 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821753630} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1821753634 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821753630} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1838111265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1838111266} + - component: {fileID: 1838111269} + - component: {fileID: 1838111268} + - component: {fileID: 1838111267} + m_Layer: 0 + m_Name: werq (133) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1838111266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838111265} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 133 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1838111267 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838111265} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1838111268 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838111265} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1838111269 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838111265} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1839669253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839669254} + - component: {fileID: 1839669257} + - component: {fileID: 1839669256} + - component: {fileID: 1839669255} + m_Layer: 0 + m_Name: werq (94) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1839669254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839669253} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3, y: 0, z: -0.7310009} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 94 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1839669255 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839669253} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1839669256 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839669253} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1839669257 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839669253} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1852876035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1852876036} + - component: {fileID: 1852876039} + - component: {fileID: 1852876038} + - component: {fileID: 1852876037} + m_Layer: 0 + m_Name: werq (165) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1852876036 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1852876035} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 165 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1852876037 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1852876035} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1852876038 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1852876035} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1852876039 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1852876035} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1858019617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1858019618} + - component: {fileID: 1858019621} + - component: {fileID: 1858019620} + - component: {fileID: 1858019619} + m_Layer: 0 + m_Name: werq (73) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1858019618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858019617} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 73 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1858019619 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858019617} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1858019620 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858019617} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1858019621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858019617} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1859094914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1859094915} + - component: {fileID: 1859094918} + - component: {fileID: 1859094917} + - component: {fileID: 1859094916} + m_Layer: 0 + m_Name: werq (172) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1859094915 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859094914} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 172 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1859094916 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859094914} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1859094917 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859094914} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1859094918 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859094914} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1860346519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1860346520} + - component: {fileID: 1860346523} + - component: {fileID: 1860346522} + - component: {fileID: 1860346521} + m_Layer: 0 + m_Name: werq (137) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1860346520 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860346519} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 137 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1860346521 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860346519} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1860346522 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860346519} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1860346523 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860346519} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1870696865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1870696866} + - component: {fileID: 1870696869} + - component: {fileID: 1870696868} + - component: {fileID: 1870696867} + m_Layer: 0 + m_Name: werq (67) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1870696866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870696865} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.588, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 67 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1870696867 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870696865} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1870696868 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870696865} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1870696869 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870696865} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1895837567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1895837568} + - component: {fileID: 1895837571} + - component: {fileID: 1895837570} + - component: {fileID: 1895837569} + m_Layer: 0 + m_Name: werq (65) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1895837568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895837567} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.127, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 65 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1895837569 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895837567} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1895837570 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895837567} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1895837571 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895837567} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1918158911 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1918158912} + - component: {fileID: 1918158915} + - component: {fileID: 1918158914} + - component: {fileID: 1918158913} + m_Layer: 0 + m_Name: werq (226) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1918158912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1918158911} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 226 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1918158913 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1918158911} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1918158914 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1918158911} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1918158915 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1918158911} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &1928839749 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1333567166} + m_Modifications: + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_Pivot.y value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_RootOrder - value: 0 + value: 1 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchorMax.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchorMin.x - value: 1 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_SizeDelta.x - value: 20 + value: -952 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_SizeDelta.y - value: 25 + value: -344 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchoredPosition.x - value: -23.40039 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_AnchoredPosition.y - value: -23.800293 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2848221156307247795, guid: 3200770c16e3b2b4ebe7f604154faac7, + - target: {fileID: 6963777608485144162, guid: d725b5588e1b956458798319e6541d84, type: 3} propertyPath: m_Name - value: ExitButton + value: ConnectionModeButtons objectReference: {fileID: 0} - - target: {fileID: 5266522511616468950, guid: 3200770c16e3b2b4ebe7f604154faac7, - type: 3} - propertyPath: m_SceneMenuToLoad - value: - objectReference: {fileID: 11400000, guid: c10d995498e0c514a853c3506031d3fb, - type: 2} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3200770c16e3b2b4ebe7f604154faac7, type: 3} ---- !u!224 &627808639 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, - type: 3} - m_PrefabInstance: {fileID: 627808638} + m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} +--- !u!1 &1949195315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1949195316} + - component: {fileID: 1949195319} + - component: {fileID: 1949195318} + - component: {fileID: 1949195317} + m_Layer: 0 + m_Name: werq (42) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1949195316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1949195315} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -1.4699993} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 42 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1949195317 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1949195315} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1949195318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1949195315} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1949195319 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1949195315} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1952242986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1952242987} + - component: {fileID: 1952242990} + - component: {fileID: 1952242989} + - component: {fileID: 1952242988} + m_Layer: 0 + m_Name: werq (87) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1952242987 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1952242986} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -0.238} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 87 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1952242988 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1952242986} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1952242989 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1952242986} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1952242990 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1952242986} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1953834566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1953834567} + - component: {fileID: 1953834570} + - component: {fileID: 1953834569} + - component: {fileID: 1953834568} + m_Layer: 0 + m_Name: werq (223) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1953834567 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953834566} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -2.7110014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 223 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1953834568 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953834566} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1953834569 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953834566} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1953834570 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953834566} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1958441938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1958441939} + - component: {fileID: 1958441942} + - component: {fileID: 1958441941} + - component: {fileID: 1958441940} + m_Layer: 0 + m_Name: werq (72) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1958441939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958441938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 72 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1958441940 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958441938} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1958441941 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958441938} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1958441942 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958441938} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1981994848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1981994849} + - component: {fileID: 1981994852} + - component: {fileID: 1981994851} + - component: {fileID: 1981994850} + m_Layer: 0 + m_Name: werq (173) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1981994849 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981994848} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -3.6880007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 173 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1981994850 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981994848} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1981994851 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981994848} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1981994852 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981994848} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1985357179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985357180} + - component: {fileID: 1985357183} + - component: {fileID: 1985357182} + - component: {fileID: 1985357181} + m_Layer: 0 + m_Name: werq (139) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1985357180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985357179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.69399995, y: 0, z: -2.4730015} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 139 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1985357181 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985357179} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1985357182 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985357179} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1985357183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985357179} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2019907570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2019907571} + - component: {fileID: 2019907574} + - component: {fileID: 2019907573} + - component: {fileID: 2019907572} + m_Layer: 0 + m_Name: werq (110) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2019907571 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019907570} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.355, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 110 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2019907572 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019907570} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2019907573 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019907570} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2019907574 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019907570} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2024574101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2024574102} + - component: {fileID: 2024574105} + - component: {fileID: 2024574104} + - component: {fileID: 2024574103} + m_Layer: 0 + m_Name: werq (128) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2024574102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024574101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 128 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2024574103 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024574101} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2024574104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024574101} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2024574105 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024574101} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2030561000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2030561001} + - component: {fileID: 2030561004} + - component: {fileID: 2030561003} + - component: {fileID: 2030561002} + m_Layer: 0 + m_Name: werq (134) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2030561001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030561000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 134 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2030561002 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030561000} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2030561003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030561000} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2030561004 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030561000} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2036986368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2036986369} + - component: {fileID: 2036986372} + - component: {fileID: 2036986371} + - component: {fileID: 2036986370} + m_Layer: 0 + m_Name: werq (148) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2036986369 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036986368} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94499993, y: 0, z: -2.2180023} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 148 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2036986370 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036986368} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2036986371 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036986368} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2036986372 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036986368} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2049090154 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049090155} + - component: {fileID: 2049090158} + - component: {fileID: 2049090157} + - component: {fileID: 2049090156} + m_Layer: 0 + m_Name: werq (119) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2049090155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!850595691 &633987594 -LightingSettings: + m_GameObject: {fileID: 2049090154} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.533, y: 0, z: -1.215} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 119 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2049090156 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Settings.lighting - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 1 - m_BakeBackend: 1 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 2 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - 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 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 ---- !u!1 &678326392 + m_GameObject: {fileID: 2049090154} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2049090157 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049090154} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2049090158 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049090154} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2053103141 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -541,87 +25344,244 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 678326399} - - component: {fileID: 678326398} - - component: {fileID: 678326397} - - component: {fileID: 678326396} - - component: {fileID: 678326394} - - component: {fileID: 678326393} - - component: {fileID: 678326395} + - component: {fileID: 2053103142} + - component: {fileID: 2053103145} + - component: {fileID: 2053103144} + - component: {fileID: 2053103143} m_Layer: 0 - m_Name: NetworkTransformBuffered + m_Name: werq (116) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &678326393 -MonoBehaviour: +--- !u!4 &2053103142 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} + m_GameObject: {fileID: 2053103141} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.839, y: 0, z: -1.2150002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 116 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2053103143 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053103141} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_MoveSpeed: 5 - m_RotationSpeed: 30 ---- !u!114 &678326394 -MonoBehaviour: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2053103144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053103141} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2053103145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053103141} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2060061432 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2060061433} + - component: {fileID: 2060061436} + - component: {fileID: 2060061435} + - component: {fileID: 2060061434} + m_Layer: 0 + m_Name: werq (224) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2060061433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060061432} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -2.9570007} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 224 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2060061434 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060061432} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2060061435 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060061432} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2060061436 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: - GlobalObjectIdHash: 3301752843 - AlwaysReplicateAsRoot: 0 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 ---- !u!114 &678326395 -MonoBehaviour: + m_GameObject: {fileID: 2060061432} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2068975254 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} - m_Name: - m_EditorClassIdentifier: - Authority: 0 - InLocalSpace: 0 - FixedSendsPerSecond: 30 - m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, - type: 2} ---- !u!65 &678326396 -BoxCollider: + serializedVersion: 6 + m_Component: + - component: {fileID: 2068975255} + - component: {fileID: 2068975258} + - component: {fileID: 2068975257} + - component: {fileID: 2068975256} + m_Layer: 0 + m_Name: werq (245) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2068975255 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} + m_GameObject: {fileID: 2068975254} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.072, y: 0, z: -3.1950016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 245 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2068975256 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2068975254} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &678326397 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2068975257 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} + m_GameObject: {fileID: 2068975254} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -634,7 +25594,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -656,30 +25616,15 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &678326398 +--- !u!33 &2068975258 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &678326399 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -8.25, y: 1.55, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 702051986} - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &702051983 + m_GameObject: {fileID: 2068975254} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2078151579 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -687,82 +25632,95 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 702051986} - - component: {fileID: 702051985} - - component: {fileID: 702051984} + - component: {fileID: 2078151580} + - component: {fileID: 2078151583} + - component: {fileID: 2078151582} + - component: {fileID: 2078151581} m_Layer: 0 - m_Name: Camera + m_Name: werq (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &702051984 -AudioListener: +--- !u!4 &2078151580 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702051983} + m_GameObject: {fileID: 2078151579} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: 0} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2078151581 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078151579} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 ---- !u!20 &702051985 -Camera: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2078151582 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702051983} + m_GameObject: {fileID: 2078151579} m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &702051986 -Transform: + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2078151583 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702051983} - m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} - m_LocalPosition: {x: 8.25, y: 18.45, z: -16} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 678326399} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} ---- !u!1 &705507993 + m_GameObject: {fileID: 2078151579} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2089701612 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -770,92 +25728,95 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 705507995} - - component: {fileID: 705507994} + - component: {fileID: 2089701613} + - component: {fileID: 2089701616} + - component: {fileID: 2089701615} + - component: {fileID: 2089701614} m_Layer: 0 - m_Name: Directional Light + m_Name: werq (46) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!108 &705507994 -Light: +--- !u!4 &2089701613 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 705507993} + m_GameObject: {fileID: 2089701612} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -1.7080002} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 46 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2089701614 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089701612} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 0.3 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2089701615 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2089701612} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &705507995 -Transform: + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2089701616 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 705507993} - 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_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &849106629 + m_GameObject: {fileID: 2089701612} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2106865350 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -863,65 +25824,95 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 849106632} - - component: {fileID: 849106631} - - component: {fileID: 849106630} + - component: {fileID: 2106865351} + - component: {fileID: 2106865354} + - component: {fileID: 2106865353} + - component: {fileID: 2106865352} m_Layer: 0 - m_Name: EventSystem + m_Name: werq (130) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &849106630 -MonoBehaviour: +--- !u!4 &2106865351 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 849106629} + m_GameObject: {fileID: 2106865350} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.461, y: 0, z: -1.9800014} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 130 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2106865352 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2106865350} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &849106631 -MonoBehaviour: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2106865353 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 849106629} + m_GameObject: {fileID: 2106865350} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &849106632 -Transform: + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2106865354 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 849106629} - 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_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1333567162 + m_GameObject: {fileID: 2106865350} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2128892963 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -929,121 +25920,95 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1333567166} - - component: {fileID: 1333567165} - - component: {fileID: 1333567164} - - component: {fileID: 1333567163} - - component: {fileID: 1333567167} - m_Layer: 5 - m_Name: Canvas + - component: {fileID: 2128892964} + - component: {fileID: 2128892967} + - component: {fileID: 2128892966} + - component: {fileID: 2128892965} + m_Layer: 0 + m_Name: werq (55) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1333567163 -MonoBehaviour: +--- !u!4 &2128892964 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333567162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1333567164 -MonoBehaviour: + m_GameObject: {fileID: 2128892963} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.6389999, y: 0, z: -1.215} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 55 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2128892965 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333567162} + m_GameObject: {fileID: 2128892963} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1280, y: 720} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0.5 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &1333567165 -Canvas: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2128892966 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333567162} + m_GameObject: {fileID: 2128892963} m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 + m_SortingLayer: 0 m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1333567166 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333567162} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 627808639} - - {fileID: 1536251758} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!114 &1333567167 -MonoBehaviour: + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2128892967 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333567162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4390d966eb8724ba2907f775b34e94ea, type: 3} - m_Name: - m_EditorClassIdentifier: - NetworkManager: {fileID: 620561611} - ButtonsRoot: {fileID: 0} ---- !u!224 &1536251758 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - m_PrefabInstance: {fileID: 1928839749} - m_PrefabAsset: {fileID: 0} ---- !u!1 &1643885206 + m_GameObject: {fileID: 2128892963} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2129603126 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1051,88 +26016,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1643885211} - - component: {fileID: 1643885210} - - component: {fileID: 1643885209} - - component: {fileID: 1643885208} - - component: {fileID: 1643885207} - - component: {fileID: 1643885212} - - component: {fileID: 1643885213} + - component: {fileID: 2129603127} + - component: {fileID: 2129603130} + - component: {fileID: 2129603129} + - component: {fileID: 2129603128} m_Layer: 0 - m_Name: NetworkTransformLegacy + m_Name: werq (9) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1643885207 -MonoBehaviour: + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2129603127 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} - m_Name: - m_EditorClassIdentifier: - FixedSendsPerSecond: 20 - AssumeSyncedSends: 1 - InterpolatePosition: 1 - SnapDistance: 10 - InterpolateServer: 1 - MinMeters: 0.15 - MinDegrees: 1.5 - ExtrapolatePosition: 0 - MaxSendsToExtrapolate: 5 - Channel: - EnableRange: 0 - EnableNonProvokedResendChecks: 0 - DistanceSendrate: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 500 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 ---- !u!65 &1643885208 -BoxCollider: + m_GameObject: {fileID: 2129603126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.233, y: 0, z: -0.49300003} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} + m_Children: [] + m_Father: {fileID: 727811950} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &2129603128 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} + m_GameObject: {fileID: 2129603126} m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1643885209 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2129603129 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} + m_GameObject: {fileID: 2129603126} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -1145,7 +26074,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1167,174 +26096,107 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1643885210 +--- !u!33 &2129603130 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1643885211 + m_GameObject: {fileID: 2129603126} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2133559709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2133559710} + - component: {fileID: 2133559713} + - component: {fileID: 2133559712} + - component: {fileID: 2133559711} + m_Layer: 0 + m_Name: werq (236) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2133559710 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} + m_GameObject: {fileID: 2133559709} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10.29, y: 1.55, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: 1.894, y: 0, z: -3.6880016} + m_LocalScale: {x: 0.018942, y: 0.018942, z: 0.018942} m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 + m_Father: {fileID: 727811950} + m_RootOrder: 236 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1643885212 -MonoBehaviour: +--- !u!64 &2133559711 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} + m_GameObject: {fileID: 2133559709} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: - GlobalObjectIdHash: 3638589847 - AlwaysReplicateAsRoot: 0 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 ---- !u!114 &1643885213 -MonoBehaviour: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2133559712 +MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} + m_GameObject: {fileID: 2133559709} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_MoveSpeed: 5 - m_RotationSpeed: 30 ---- !u!1001 &1928839749 -PrefabInstance: + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d255f11ce58034f15b98a74b2dce910d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2133559713 +MeshFilter: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1333567166} - m_Modifications: - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_SizeDelta.x - value: -952 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_SizeDelta.y - value: -344 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6963777608485144162, guid: d725b5588e1b956458798319e6541d84, - type: 3} - propertyPath: m_Name - value: ConnectionModeButtons - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133559709} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} From bb7dc837550d03adb2bef985cba68e9cc711757d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 5 Aug 2021 19:21:29 -0400 Subject: [PATCH 07/74] # --- ...ufferedLinearInterpolatorVector3Factory.cs | 70 ++++++++------- .../Prototyping/Interpolator/IInterpolator.cs | 5 +- .../Interpolator/NoInterpolationFactory.cs | 2 +- .../PositionLinearInterpolatorFactory.cs | 2 +- .../Prototyping/NetworkTransform.cs | 85 +++++++++++++------ .../Prototyping/NetworkTransform.cs.meta | 3 +- .../Messaging/InternalMessageHandler.cs | 2 +- testproject/Assets/MoveInCircle.cs | 35 ++++++-- 8 files changed, 131 insertions(+), 73 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index e7a756098e..b901e07487 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; using MLAPI; +using MLAPI.NetworkVariable; +using MLAPI.Serialization; using MLAPI.Timing; using UnityEngine; -namespace DefaultNamespace +namespace unity.netcode { public interface IBufferedLinearInterpolatorSettings : IInterpolatorSettings { @@ -49,16 +51,16 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : struct BufferedItem { public T item; - public NetworkTime tickSent; + public NetworkTime timeSent; } // private double ServerTick => NetworkManager.Singleton.ServerTime.Tick; - protected virtual double ServerTickBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Tick; // override this if you want configurable buffering, right now using ServerTick's own global buffering + protected virtual double ServerTimeBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering T m_LerpStartValue; T m_LerpEndValue; private T m_CurrentValue; - private NetworkTime m_ValueCurrentTickConsumed; + private NetworkTime m_CurrentTimeConsumed; private List> m_Buffer = new List>(); @@ -74,18 +76,7 @@ public BufferedLinearInterpolator(IBufferedLinearInterpolatorSettings settings) m_Settings = settings; } - public BufferedLinearInterpolator(NetworkVariable> netvar) - { - netvar.OnValueChanged += OnStateChanged; - } - - public void OnStateChanged(IInterpolatedState old, IInterpolatedState newState) - { - var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick); - AddMeasurement(newState.Value, sentTime); - } - - private NetworkTime m_PreviousTickConsumed; + private NetworkTime m_PreviousTimeConsumed; private void TryConsumeFromBuffer() { @@ -94,13 +85,17 @@ private void TryConsumeFromBuffer() for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; - if (bufferedValue.tickSent.Tick <= ServerTickBeingHandledForBuffering) + if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering) { - m_LerpStartValue = m_LerpEndValue; + if (nbConsumed == 0) + { + m_PreviousTimeConsumed = m_CurrentTimeConsumed; + m_LerpStartValue = m_LerpEndValue; + } + m_LerpEndValue = bufferedValue.item; - samPreviousTickConsumed = m_ValueCurrentTickConsumed; - m_ValueCurrentTickConsumed = bufferedValue.tickSent; - Debug.Log($"hellooooo {bufferedValue.tickSent}"); + m_CurrentTimeConsumed = bufferedValue.timeSent; + Debug.Log($"hellooooo {bufferedValue.timeSent}"); m_Buffer.RemoveAt(i); nbConsumed++; @@ -112,7 +107,7 @@ private void TryConsumeFromBuffer() Debug.Log($"Buffer size: {count}, nb consumed: {nbConsumed}"); var pos2 = m_LerpEndValue is Vector3 value2 ? value2 : default; - Debug.DrawLine(pos2, pos2 + Vector3.down * (m_ValueCurrentTickConsumed.Tick - m_PreviousTickConsumed.Tick), Color.cyan, 10, false); + Debug.DrawLine(pos2, pos2 + Vector3.down * 100 * (float) (m_CurrentTimeConsumed.Time - m_PreviousTimeConsumed.Time), Color.cyan, 10, false); for (int i = 0; i < count; i++) { Debug.DrawLine(pos2 + Vector3.up * (i+1), pos2 + Vector3.up* (i+1) + Vector3.left, Color.white, 10, false); @@ -148,16 +143,17 @@ public T Update(float deltaTime) TryConsumeFromBuffer(); - var timeB = m_ValueCurrentTickConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); - // var timeA = timeB - timeB.FixedDeltaTime;// + // Interpolation example to understand the math below // 4 6 6.5 // | | | // A B Server - var timeA = m_PreviousTickConsumed; + var timeB = m_CurrentTimeConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + // var timeA = timeB - timeB.FixedDeltaTime;// + var timeA = m_PreviousTimeConsumed; double range = timeB.Time - timeA.Time; - var renderTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - range; + var renderTime = ServerTimeBeingHandledForBuffering - range; // var renderTime = m_RenderTime; float t = (float)((renderTime - timeA.Time) / range); var diffServerTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - samLastServerTime; @@ -183,19 +179,19 @@ public T Update(float deltaTime) return m_CurrentValue; } - public void NetworkTickUpdate(float fixedDeltaTime) + public void FixedUpdate(float fixedDeltaTime) { } - public void AddMeasurement(T newMeasurement, NetworkTime SentTick) + public void AddMeasurement(T newMeasurement, NetworkTime sentTime) { var debugPos = newMeasurement is Vector3 value ? value : default; Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); Debug.Log($"Adding measurement {Time.time}"); // todo put limit on size, we don't want lag spikes to create 100 entries and have a list that size in memory for ever - m_Buffer.Add(new BufferedItem() {item = newMeasurement, tickSent = SentTick}); - m_Buffer.Sort((item1, item2) => item2.tickSent.Tick.CompareTo(item1.tickSent.Tick)); + m_Buffer.Add(new BufferedItem() {item = newMeasurement, timeSent = sentTime}); + m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); } public T GetInterpolatedValue() @@ -203,7 +199,7 @@ public T GetInterpolatedValue() return m_CurrentValue; } - public void Reset(T value, NetworkTime SentTick) + public void Reset(T value, NetworkTime sentTime) { m_CurrentValue = value; m_LerpEndValue = value; @@ -224,17 +220,25 @@ public BufferedLinearInterpolatorVector3(IBufferedLinearInterpolatorSettings set public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) { - return Vector3.LerpUnclamped(start, end, time); + return Vector3.Lerp(start, end, time); } } public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator { + public BufferedLinearInterpolatorQuaternion(IBufferedLinearInterpolatorSettings settings) : base(settings) { } + public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) { return Quaternion.Slerp(start, end, time); } + } - public BufferedLinearInterpolatorQuaternion(IBufferedLinearInterpolatorSettings settings) : base(settings) { } + public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator + { + public override float Interpolate(float start, float end, float time) + { + return Mathf.Lerp(start, end, time); + } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index a6862322b4..7752861da5 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -1,3 +1,4 @@ +using MLAPI.Serialization; using MLAPI.Timing; using UnityEngine; @@ -8,7 +9,7 @@ public interface IInterpolator public void Start(); public void OnEnable(); public T Update(float deltaTime); - public void NetworkTickUpdate(float tickDeltaTime); + public void FixedUpdate(float tickDeltaTime); public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); public void Reset(T value, NetworkTime sentTime); @@ -24,3 +25,5 @@ public abstract class InterpolatorFactory : ScriptableObject public interface IInterpolatorSettings { } + + diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index 3579958737..803691af18 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -47,7 +47,7 @@ public T Update(float deltaTime) return GetInterpolatedValue(); } - public void NetworkTickUpdate(float fixedDeltaTime) + public void FixedUpdate(float fixedDeltaTime) { } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index e940366add..d7c879fc90 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -52,7 +52,7 @@ public Vector3 Update(float deltaTime) return GetInterpolatedValue(); } - public void NetworkTickUpdate(float fixedDeltaTime) + public void FixedUpdate(float fixedDeltaTime) { } diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 0540db786b..904946325f 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,9 +1,9 @@ using System; -using DefaultNamespace; using MLAPI.NetworkVariable; using MLAPI.Serialization; using MLAPI.Timing; using MLAPI.Transports; +using unity.netcode; using UnityEngine; namespace MLAPI.Prototyping @@ -12,6 +12,7 @@ namespace MLAPI.Prototyping /// A prototype component for syncing transforms /// [AddComponentMenu("MLAPI/NetworkTransform")] + [DefaultExecutionOrder(10000)] public class NetworkTransform : NetworkBehaviour { /// @@ -33,7 +34,7 @@ private class NetworkState : INetworkSerializable public Quaternion Rotation; public Vector3 Scale; - public int SentTick; + public double SentTime; public NetworkState(NetworkState copy) { @@ -41,7 +42,7 @@ public NetworkState(NetworkState copy) Position = copy.Position; Rotation = copy.Rotation; Scale = copy.Scale; - SentTick = copy.SentTick; + SentTime = copy.SentTime; } public NetworkState() @@ -54,7 +55,7 @@ public void NetworkSerialize(NetworkSerializer serializer) serializer.Serialize(ref Position); serializer.Serialize(ref Rotation); serializer.Serialize(ref Scale); - serializer.Serialize(ref SentTick); + serializer.Serialize(ref SentTime); } } @@ -136,13 +137,34 @@ private bool IsNetworkStateDirty(NetworkState networkState) return isDirty; } - private int previousTickSam; + private bool IsTransformDirty() + { + bool isDirty = false; + var networkState = m_NetworkState.Value; + isDirty |= networkState.InLocalSpace != InLocalSpace; + if (InLocalSpace) + { + isDirty |= networkState.Position != m_Transform.localPosition; + isDirty |= networkState.Rotation != m_Transform.localRotation; + isDirty |= networkState.Scale != m_Transform.localScale; + } + else + { + isDirty |= networkState.Position != m_Transform.position; + isDirty |= networkState.Rotation != m_Transform.rotation; + isDirty |= networkState.Scale != m_Transform.lossyScale; + } + + return isDirty; + } + + private double previousTimeSam; private Vector3 previousPosSam; private void UpdateNetworkState() { m_NetworkState.Value.InLocalSpace = InLocalSpace; // m_NetworkState.Value.SentTime = Time.realtimeSinceStartup; - m_NetworkState.Value.SentTick = NetworkManager.Singleton.LocalTime.Tick; + m_NetworkState.Value.SentTime = m_DirtyTime; if (InLocalSpace) { m_NetworkState.Value.Position = m_Transform.localPosition; @@ -156,8 +178,8 @@ private void UpdateNetworkState() m_NetworkState.Value.Scale = m_Transform.lossyScale; } - Debug.Log($"sam asdf distance {Math.Round((m_NetworkState.Value.Position - previousPosSam).magnitude, 2)} tick diff {m_NetworkState.Value.SentTick - previousTickSam} sam"); - previousTickSam = m_NetworkState.Value.SentTick; + Debug.Log($"sam asdf distance {Math.Round((m_NetworkState.Value.Position - previousPosSam).magnitude, 2)} tick diff {m_NetworkState.Value.SentTime - previousTimeSam} sam"); + previousTimeSam = m_NetworkState.Value.SentTime; previousPosSam = m_NetworkState.Value.Position; m_NetworkState.SetDirty(true); @@ -213,9 +235,9 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) // PositionInterpolator.AddMeasurement(newState.Position, NetworkManager.Singleton.ServerTime.Time); Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); - Debug.Log($"diff tick sam {(newState.SentTick - oldState.SentTick, 2)}"); + Debug.Log($"diff tick sam {(newState.SentTime - oldState.SentTime, 2)}"); // oldTick = NetworkManager.Singleton.ServerTime.Tick; - var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick); + var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); PositionInterpolator.AddMeasurement(newState.Position, sentTime); RotationInterpolator.AddMeasurement(newState.Rotation, sentTime); } @@ -263,10 +285,6 @@ private void Awake() RotationInterpolator = m_RotationInterpolatorFactory.CreateInterpolator(); } - var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTick); - PositionInterpolator.Reset(m_Transform.position, currentTime); - RotationInterpolator.Reset(m_Transform.rotation, currentTime); - UpdateNetVarPerms(); m_NetworkState.Settings.SendNetworkChannel = Channel; @@ -278,10 +296,14 @@ private void Awake() public override void OnNetworkSpawn() { m_PrevNetworkState = null; - if (enabled) // todo Luke fix your UX - { - NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; - } + // if (enabled) // todo Luke fix your UX + // { + // NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; + // } + + var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTime); + PositionInterpolator.Reset(m_Transform.position, currentTime); + RotationInterpolator.Reset(m_Transform.rotation, currentTime); PositionInterpolator.OnNetworkSpawn(); RotationInterpolator.OnNetworkSpawn(); @@ -292,15 +314,20 @@ private void OnDestroy() m_NetworkState.OnValueChanged -= OnNetworkStateChanged; } - private void NetworkTickUpdate() + private void FixedUpdate() { if (!NetworkObject.IsSpawned) { return; } - - if (CanUpdateTransform) //&& IsNetworkStateDirty(m_NetworkState.Value)) + if (CanUpdateTransform) { + if (IsTransformDirty()) + { + // check for time there was a change to the transform + m_DirtyTime = NetworkManager.LocalTime.Time; + } + UpdateNetworkState(); } else @@ -311,26 +338,30 @@ private void NetworkTickUpdate() ApplyNetworkState(m_NetworkState.Value); } - PositionInterpolator.NetworkTickUpdate(NetworkManager.ServerTime.FixedDeltaTime); - RotationInterpolator.NetworkTickUpdate(NetworkManager.ServerTime.FixedDeltaTime); + PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } } private int debugOldTime = 0; + private double m_DirtyTime; + private void Update() { - // Debug.Log("gaga "+Math.Round(Time.time - (float)NetworkManager.Singleton.ServerTime.Time, 2)); - - // Debug.Log($"sam {Math.Round(NetworkManager.Singleton.ServerTime.Time - debugOldTime, 2)}"); - // debugOldTime = NetworkManager.Singleton.ServerTime.Time; if (!NetworkObject.IsSpawned) { return; } + if (!CanUpdateTransform) { + // Debug.Log("gaga "+Math.Round(Time.time - (float)NetworkManager.Singleton.ServerTime.Time, 2)); + + // Debug.Log($"sam {Math.Round(NetworkManager.Singleton.ServerTime.Time - debugOldTime, 2)}"); + // debugOldTime = NetworkManager.Singleton.ServerTime.Time; + PositionInterpolator.Update(Time.deltaTime); RotationInterpolator.Update(Time.deltaTime); ApplyNetworkState(m_NetworkState.Value); diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta index 594420f118..6af788f27b 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs.meta @@ -4,8 +4,9 @@ MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: - - m_PositionInterpolator: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, + - m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, type: 2} + - m_RotationInterpolatorFactory: {instanceID: 0} executionOrder: 0 icon: {instanceID: 0} userData: diff --git a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs index 2667fccb3a..cfc7bfd322 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs @@ -280,7 +280,7 @@ public void HandleDestroyObjects(ulong clientId, Stream stream) public void HandleTimeSync(ulong clientId, Stream stream) { - Assert.IsTrue(clientId == NetworkManager.ServerClientId); + // Assert.IsTrue(clientId == NetworkManager.ServerClientId); using (var reader = PooledNetworkReader.Get(stream)) { diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/MoveInCircle.cs index 30ec26bdec..3ee77b8ef1 100644 --- a/testproject/Assets/MoveInCircle.cs +++ b/testproject/Assets/MoveInCircle.cs @@ -1,3 +1,4 @@ +using System; using MLAPI; using UnityEngine; @@ -9,22 +10,40 @@ public class MoveInCircle : NetworkBehaviour [SerializeField] private float m_RotationSpeed = 30; + public bool runServerOnly; + public bool runInUpdate; + private Vector3 oldPosition; - public override void OnNetworkSpawn() + // public override void OnNetworkSpawn() + // { + // base.OnNetworkSpawn();// + // NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; + // } + + private float lastTime; + + void FixedUpdate() { - base.OnNetworkSpawn();// - NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; + if (runInUpdate) return; + Tick(Time.fixedDeltaTime); } - void NetworkTickUpdate() // doesn't work with Update? + void Tick(float deltaTime) { - if (NetworkManager.Singleton.IsServer) + if (NetworkManager.Singleton.IsServer || !runServerOnly) { oldPosition = transform.position; - transform.position = transform.position + transform.forward * (m_MoveSpeed * NetworkManager.LocalTime.FixedDeltaTime); - Debug.Log($"ewqqwe {(transform.position - oldPosition).magnitude}"); - transform.Rotate(0, m_RotationSpeed * NetworkManager.LocalTime.FixedDeltaTime, 0); + transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); + Debug.Log($"ewqqwe {Math.Round((transform.position - oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); + lastTime = Time.time; + transform.Rotate(0, m_RotationSpeed * deltaTime, 0); } } + + private void Update() + { + if (!runInUpdate) return; + Tick(Time.deltaTime); + } } From db9688c3ccfe36ce8a4637542cd22b962f63b12f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 6 Aug 2021 10:27:23 -0400 Subject: [PATCH 08/74] # --- ...ufferedLinearInterpolatorVector3Factory.cs | 29 +++-- testproject/Assets/Scenes/ZooSam.unity | 123 +++++++++++++++++- 2 files changed, 138 insertions(+), 14 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index b901e07487..16ed211c92 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -101,6 +101,7 @@ private void TryConsumeFromBuffer() var pos = m_LerpEndValue is Vector3 value ? value : default; Debug.DrawLine(pos, pos + Random.Range(0f, 1f) * Vector3.up + Random.Range(0f, 1f) * Vector3.left, Color.green, 10, false); + // break; } } @@ -114,15 +115,15 @@ private void TryConsumeFromBuffer() } } - private float samLastServerTime; - private float samLastTime; + // private float samLastServerTime; + // private float samLastTime; - private float serverOffset; - private float m_RenderTime => Time.time - serverOffset; + // private float serverOffset; + // private float m_RenderTime => Time.time - serverOffset; public void Start() { - serverOffset = (float) (Time.time - NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time); + // serverOffset = (float) (Time.time - NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time); } public void OnEnable() @@ -149,18 +150,24 @@ public T Update(float deltaTime) // 4 6 6.5 // | | | // A B Server + + // Unclamped + // 4 6 6.5 + // | | | | | + // A B Render Server + // A B C + // A B var timeB = m_CurrentTimeConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); - // var timeA = timeB - timeB.FixedDeltaTime;// var timeA = m_PreviousTimeConsumed; double range = timeB.Time - timeA.Time; var renderTime = ServerTimeBeingHandledForBuffering - range; // var renderTime = m_RenderTime; float t = (float)((renderTime - timeA.Time) / range); - var diffServerTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - samLastServerTime; - samLastServerTime = (float) NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time; - var diffTime = Time.time - samLastTime; - samLastTime = Time.time; - Debug.Log($"diffServerTime {diffServerTime} diffTime {diffTime} deltaTime {deltaTime}"); + // var diffServerTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - samLastServerTime; + // samLastServerTime = (float) NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time; + // var diffTime = Time.time - samLastTime; + // samLastTime = Time.time; + // Debug.Log($"diffServerTime {diffServerTime} diffTime {diffTime} deltaTime {deltaTime}"); Debug.Log($"ttttttttttttt {t}"); m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); // m_CurrentValue = m_LerpEndValue; diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 299f27c9c8..c2a5274cd2 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6194,9 +6194,9 @@ MonoBehaviour: MaxConnectAttempts: 10 channels: [] MessageBufferSize: 5120 - SimulatePacketLossChance: 0 - SimulateMinLatency: 100 - SimulateMaxLatency: 100 + SimulatePacketLossChance: 5 + SimulateMinLatency: 70 + SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7157,6 +7157,118 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 672979497} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &674930886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 674930893} + - component: {fileID: 674930892} + - component: {fileID: 674930891} + - component: {fileID: 674930890} + - component: {fileID: 674930888} + m_Layer: 0 + m_Name: cube that moves + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &674930888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674930886} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 + runServerOnly: 0 + runInUpdate: 1 +--- !u!65 &674930890 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674930886} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &674930891 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674930886} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d2f6bf650dfcc483794cdacf53f9fe2b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &674930892 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674930886} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &674930893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674930886} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.2, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &674940303 GameObject: m_ObjectHideFlags: 0 @@ -7289,6 +7401,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_MoveSpeed: 5 m_RotationSpeed: 30 + runServerOnly: 1 + runInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -7322,6 +7436,7 @@ MonoBehaviour: FixedSendsPerSecond: 30 m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, type: 2} + m_RotationInterpolatorFactory: {fileID: 0} --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 @@ -20897,6 +21012,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_MoveSpeed: 5 m_RotationSpeed: 30 + runServerOnly: 0 + runInUpdate: 0 --- !u!1 &1659076779 GameObject: m_ObjectHideFlags: 0 From e7bbd12e59ab4dbacee72a32e5bae6bdb9faeb7b Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 10 Aug 2021 19:38:10 -0400 Subject: [PATCH 09/74] # --- .../Prototyping/NetworkTransform.cs | 50 +++++++++++-------- testproject/Assets/MoveInCircle.cs | 6 +-- testproject/Assets/Scenes/ZooSam.unity | 8 +-- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 904946325f..8ee42ed935 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -12,7 +12,7 @@ namespace MLAPI.Prototyping /// A prototype component for syncing transforms /// [AddComponentMenu("MLAPI/NetworkTransform")] - [DefaultExecutionOrder(10000)] + [DefaultExecutionOrder(1000000)] public class NetworkTransform : NetworkBehaviour { /// @@ -160,11 +160,10 @@ private bool IsTransformDirty() private double previousTimeSam; private Vector3 previousPosSam; - private void UpdateNetworkState() + private void SendNetworkStateToGhosts(double dirtyTime) { m_NetworkState.Value.InLocalSpace = InLocalSpace; - // m_NetworkState.Value.SentTime = Time.realtimeSinceStartup; - m_NetworkState.Value.SentTime = m_DirtyTime; + m_NetworkState.Value.SentTime = dirtyTime; if (InLocalSpace) { m_NetworkState.Value.Position = m_Transform.localPosition; @@ -177,7 +176,7 @@ private void UpdateNetworkState() m_NetworkState.Value.Rotation = m_Transform.rotation; m_NetworkState.Value.Scale = m_Transform.lossyScale; } - + Debug.DrawLine(m_NetworkState.Value.Position, m_NetworkState.Value.Position + Vector3.up * 100f * (float) (m_NetworkState.Value.SentTime - previousTimeSam), Color.yellow, 10, false); Debug.Log($"sam asdf distance {Math.Round((m_NetworkState.Value.Position - previousPosSam).magnitude, 2)} tick diff {m_NetworkState.Value.SentTime - previousTimeSam} sam"); previousTimeSam = m_NetworkState.Value.SentTime; previousPosSam = m_NetworkState.Value.Position; @@ -185,7 +184,7 @@ private void UpdateNetworkState() m_NetworkState.SetDirty(true); } - private void ApplyNetworkState(NetworkState netState) + private void ApplyNetworkStateFromAuthority(NetworkState netState) { netState = new NetworkState(netState); netState.Position = PositionInterpolator.GetInterpolatedValue(); @@ -212,6 +211,7 @@ private void ApplyNetworkState(NetworkState netState) private int oldTick; + private NetworkState debug_previousStateChanged; private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { if (!NetworkObject.IsSpawned) @@ -237,6 +237,8 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); Debug.Log($"diff tick sam {(newState.SentTime - oldState.SentTime, 2)}"); // oldTick = NetworkManager.Singleton.ServerTime.Tick; + // Debug.DrawLine(newState.Position, newState.Position + Vector3.down + Vector3.left, Color.yellow, 10, false); + debug_previousStateChanged = newState; var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); PositionInterpolator.AddMeasurement(newState.Position, sentTime); RotationInterpolator.AddMeasurement(newState.Rotation, sentTime); @@ -320,22 +322,22 @@ private void FixedUpdate() { return; } - if (CanUpdateTransform) - { - if (IsTransformDirty()) - { - // check for time there was a change to the transform - m_DirtyTime = NetworkManager.LocalTime.Time; - } - - UpdateNetworkState(); - } - else + // if (CanUpdateTransform) + // { + // if (IsTransformDirty()) + // { + // // check for time there was a change to the transform + // m_DirtyTime = NetworkManager.LocalTime.Time; + // } + // + // UpdateNetworkState(); + // } + // else { if (IsNetworkStateDirty(m_PrevNetworkState)) { Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); - ApplyNetworkState(m_NetworkState.Value); + ApplyNetworkStateFromAuthority(m_NetworkState.Value); } PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); @@ -345,8 +347,6 @@ private void FixedUpdate() private int debugOldTime = 0; - private double m_DirtyTime; - private void Update() { if (!NetworkObject.IsSpawned) @@ -354,6 +354,14 @@ private void Update() return; } + if (CanUpdateTransform) + { + if (IsTransformDirty()) + { + // check for time there was a change to the transform + SendNetworkStateToGhosts(NetworkManager.LocalTime.Time); + } + } if (!CanUpdateTransform) { @@ -364,7 +372,7 @@ private void Update() PositionInterpolator.Update(Time.deltaTime); RotationInterpolator.Update(Time.deltaTime); - ApplyNetworkState(m_NetworkState.Value); + ApplyNetworkStateFromAuthority(m_NetworkState.Value); } } diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/MoveInCircle.cs index 3ee77b8ef1..cc2aa14bab 100644 --- a/testproject/Assets/MoveInCircle.cs +++ b/testproject/Assets/MoveInCircle.cs @@ -13,7 +13,7 @@ public class MoveInCircle : NetworkBehaviour public bool runServerOnly; public bool runInUpdate; - private Vector3 oldPosition; + private Vector3 debug_oldPosition; // public override void OnNetworkSpawn() // { @@ -33,9 +33,9 @@ void Tick(float deltaTime) { if (NetworkManager.Singleton.IsServer || !runServerOnly) { - oldPosition = transform.position; + debug_oldPosition = transform.position; transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); - Debug.Log($"ewqqwe {Math.Round((transform.position - oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); + // Debug.Log($"ewqqwe {Math.Round((transform.position - debug_oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); lastTime = Time.time; transform.Rotate(0, m_RotationSpeed * deltaTime, 0); } diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index c2a5274cd2..c4bedd54ef 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6194,9 +6194,9 @@ MonoBehaviour: MaxConnectAttempts: 10 channels: [] MessageBufferSize: 5120 - SimulatePacketLossChance: 5 - SimulateMinLatency: 70 - SimulateMaxLatency: 130 + SimulatePacketLossChance: 0 + SimulateMinLatency: 0 + SimulateMaxLatency: 0 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7402,7 +7402,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 runServerOnly: 1 - runInUpdate: 0 + runInUpdate: 1 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 From 7b93e900512b505d096c74809e0d08a5ad673b9b Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 11:04:35 -0400 Subject: [PATCH 10/74] fixes for latest develop merge --- ...ufferedLinearInterpolatorVector3Factory.cs | 6 +-- .../Prototyping/Interpolator/IInterpolator.cs | 45 +++++++++---------- .../Interpolator/NoInterpolationFactory.cs | 3 +- .../PositionLinearInterpolatorFactory.cs | 3 +- .../Prototyping/NetworkTransform.cs | 3 +- testproject/Assets/MoveInCircle.cs | 2 +- testproject/Packages/manifest.json | 2 +- testproject/Packages/packages-lock.json | 4 +- 8 files changed, 30 insertions(+), 38 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index 16ed211c92..5681d03cea 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -1,11 +1,7 @@ using System.Collections.Generic; -using MLAPI; -using MLAPI.NetworkVariable; -using MLAPI.Serialization; -using MLAPI.Timing; using UnityEngine; -namespace unity.netcode +namespace Unity.Netcode { public interface IBufferedLinearInterpolatorSettings : IInterpolatorSettings { diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index 7752861da5..827bff7359 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -1,29 +1,28 @@ -using MLAPI.Serialization; -using MLAPI.Timing; using UnityEngine; -public interface IInterpolator +namespace Unity.Netcode { - public void Awake(); - public void OnNetworkSpawn(); - public void Start(); - public void OnEnable(); - public T Update(float deltaTime); - public void FixedUpdate(float tickDeltaTime); - public void AddMeasurement(T newMeasurement, NetworkTime sentTime); - public T GetInterpolatedValue(); - public void Reset(T value, NetworkTime sentTime); - public void OnDestroy(); -} + public interface IInterpolator + { + public void Awake(); + public void OnNetworkSpawn(); + public void Start(); + public void OnEnable(); + public T Update(float deltaTime); + public void FixedUpdate(float tickDeltaTime); + public void AddMeasurement(T newMeasurement, NetworkTime sentTime); + public T GetInterpolatedValue(); + public void Reset(T value, NetworkTime sentTime); + public void OnDestroy(); + } -public abstract class InterpolatorFactory : ScriptableObject -{ - public const string BaseMenuName = "MLAPI/Interpolator/"; - public abstract IInterpolator CreateInterpolator(); -} + public abstract class InterpolatorFactory : ScriptableObject + { + public const string BaseMenuName = "MLAPI/Interpolator/"; + public abstract IInterpolator CreateInterpolator(); + } -public interface IInterpolatorSettings -{ + public interface IInterpolatorSettings + { + } } - - diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index 803691af18..b7b561b815 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -1,7 +1,6 @@ -using MLAPI.Timing; using UnityEngine; -namespace DefaultNamespace +namespace Unity.Netcode { [CreateAssetMenu(fileName = "NoInterpolationVector3", menuName = BaseMenuName + "NoInterpolationVector3", order = 1)] public class NoInterpolationVector3Factory : InterpolatorFactory diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index d7c879fc90..3a24eaf3af 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -1,8 +1,7 @@ using System; -using MLAPI.Timing; using UnityEngine; -namespace MLAPI +namespace Unity.Netcode { [CreateAssetMenu(fileName = "PositionLinearInterpolator", menuName = BaseMenuName + "PositionLinearInterpolator", order = 1)] public class PositionLinearInterpolatorFactory : InterpolatorFactory diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 1b0ae435c5..f8188dd985 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,6 +1,5 @@ using System; -using MLAPI.Timing; -using unity.netcode; +using Unity.Netcode; using UnityEngine; namespace Unity.Netcode.Prototyping diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/MoveInCircle.cs index cc2aa14bab..1af7460ad3 100644 --- a/testproject/Assets/MoveInCircle.cs +++ b/testproject/Assets/MoveInCircle.cs @@ -1,6 +1,6 @@ using System; -using MLAPI; using UnityEngine; +using Unity.Netcode; public class MoveInCircle : NetworkBehaviour { diff --git a/testproject/Packages/manifest.json b/testproject/Packages/manifest.json index 92929ff725..d05a83f7ce 100644 --- a/testproject/Packages/manifest.json +++ b/testproject/Packages/manifest.json @@ -7,7 +7,7 @@ "com.unity.multiplayer.mlapi": "file:../../com.unity.multiplayer.mlapi", "com.unity.multiplayer.transport.utp": "file:../../com.unity.multiplayer.transport.utp", "com.veriorpies.parrelsync": "https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync", - "com.mlapi.contrib.transport.litenetlib": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "com.mlapi.contrib.transport.litenetlib": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#temp/lnl-develop", "com.unity.package-validation-suite": "0.19.2-preview", "com.unity.test-framework": "1.1.27", "com.unity.test-framework.performance": "2.3.1-preview", diff --git a/testproject/Packages/packages-lock.json b/testproject/Packages/packages-lock.json index 334802f36d..567640d458 100644 --- a/testproject/Packages/packages-lock.json +++ b/testproject/Packages/packages-lock.json @@ -1,11 +1,11 @@ { "dependencies": { "com.mlapi.contrib.transport.litenetlib": { - "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#temp/lnl-develop", "depth": 0, "source": "git", "dependencies": {}, - "hash": "3f0350ae57befd5ea7deabb1db310eb77704f58e" + "hash": "46fed6057bc79103e75446eca7b0f69b65ccf16e" }, "com.unity.burst": { "version": "1.3.2", From 3f937b510a50b5e9cc9c00cb2049ed3e2ad017d5 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 11:05:00 -0400 Subject: [PATCH 11/74] # --- .../BufferedLinearInterpolatorVector3.asset | 2 +- testproject/Assets/Scenes/ZooSam.unity | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset index 139fd91530..82227544b1 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset @@ -11,5 +11,5 @@ MonoBehaviour: m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 199dd81621cd441c19cc731e8d29a217, type: 3} m_Name: BufferedLinearInterpolatorVector3 - m_EditorClassIdentifier: + m_EditorClassIdentifier: InterpolationTime: 0.1 diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index c4bedd54ef..08d6103cb5 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6114,9 +6114,9 @@ MonoBehaviour: ServerWebsocketListenPort: 8887 SupportWebsocket: 0 Channels: [] - UseMLAPIRelay: 0 - MLAPIRelayAddress: 184.72.104.138 - MLAPIRelayPort: 8888 + UseNetcodeRelay: 0 + NetcodeRelayAddress: 127.0.0.1 + NetcodeRelayPort: 8888 MessageSendMode: 0 --- !u!114 &620561611 MonoBehaviour: @@ -6157,9 +6157,10 @@ MonoBehaviour: NetworkIdRecycleDelay: 120 RpcHashSize: 0 LoadSceneTimeOut: 120 - EnableMessageBuffering: 1 MessageBufferTimeout: 20 EnableNetworkLogs: 1 + UseSnapshotDelta: 0 + UseSnapshotSpawn: 0 --- !u!4 &620561612 Transform: m_ObjectHideFlags: 0 @@ -7402,7 +7403,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 runServerOnly: 1 - runInUpdate: 1 + runInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -21005,7 +21006,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1643885206} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} m_Name: From b927f2cb1e27d4f23e387db71e2a6dec712f5d1f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 15:42:38 -0400 Subject: [PATCH 12/74] cleanup --- ...ufferedLinearInterpolatorVector3Factory.cs | 165 ++------ .../Prototyping/Interpolator/IInterpolator.cs | 11 - .../Interpolator/NoInterpolationFactory.cs | 22 +- .../PositionLinearInterpolatorFactory.cs | 38 +- .../Prototyping/NetworkTransform.cs | 152 ++++--- testproject/Assets/Scenes/ZooSam.unity | 45 +-- .../Assets/{ => Scripts}/MoveInCircle.cs | 0 .../Assets/{ => Scripts}/MoveInCircle.cs.meta | 0 .../Assets/Scripts/NetworkTransformLegacy.cs | 375 ------------------ .../Scripts/NetworkTransformLegacy.cs.meta | 11 - 10 files changed, 122 insertions(+), 697 deletions(-) rename testproject/Assets/{ => Scripts}/MoveInCircle.cs (100%) rename testproject/Assets/{ => Scripts}/MoveInCircle.cs.meta (100%) delete mode 100644 testproject/Assets/Scripts/NetworkTransformLegacy.cs delete mode 100644 testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs index 5681d03cea..27795572a1 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs @@ -3,81 +3,45 @@ namespace Unity.Netcode { - public interface IBufferedLinearInterpolatorSettings : IInterpolatorSettings - { - public float InterpolationTime { get; } - } - - public abstract class BufferedLinearInterpolatorFactory : InterpolatorFactory, IBufferedLinearInterpolatorSettings - { - [SerializeField] - public float InterpolationTime => 0.100f; - } - - public class BufferedLinearInterpolatorSettings : IBufferedLinearInterpolatorSettings - { - public float InterpolationTime { get; set; } = 0.1f; - } - - [CreateAssetMenu(fileName = "BufferedLinearInterpolatorVector3", menuName = BaseMenuName + "BufferedLinearInterpolatorVector3", order = 1)] - public class BufferedLinearInterpolatorVector3Factory : BufferedLinearInterpolatorFactory - { - public override IInterpolator CreateInterpolator() - { - return new BufferedLinearInterpolatorVector3(this); - } - } - - [CreateAssetMenu(fileName = "BufferedLinearInterpolatorQuaternion", menuName = BaseMenuName + "BufferedLinearInterpolatorQuaternion", order = 1)] - public class BufferedLinearInterpolatorQuaternionFactory : BufferedLinearInterpolatorFactory - { - public override IInterpolator CreateInterpolator() - { - return new BufferedLinearInterpolatorQuaternion(this); - } - } - public abstract class BufferedLinearInterpolator : IInterpolator where T : struct { - public int AdditionalBufferAmountTick = 3; // todo config, todo expose global config, todo use in actual code - // public const float InterpolationConfigTimeSec = 0.100f; // todo remove const for config - - public float InterpolationConfigTimeSec => m_Settings.InterpolationTime; // todo use with range + // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code - struct BufferedItem + private struct BufferedItem { public T item; public NetworkTime timeSent; } - // private double ServerTick => NetworkManager.Singleton.ServerTime.Tick; protected virtual double ServerTimeBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering - T m_LerpStartValue; - T m_LerpEndValue; - private T m_CurrentValue; - private NetworkTime m_CurrentTimeConsumed; + private T m_LerpStartValue; + private T m_LerpEndValue; + + private T m_CurrentUpdatedValue; - private List> m_Buffer = new List>(); + private NetworkTime m_CurrentTimeConsumed; + private NetworkTime m_PreviousTimeConsumed; - private readonly IBufferedLinearInterpolatorSettings m_Settings; + private readonly List m_Buffer = new List(); + private const int k_BufferSizeLimit = 100; - public BufferedLinearInterpolator() + public void Start() { - m_Settings = new BufferedLinearInterpolatorSettings {InterpolationTime = 0.2f}; } - public BufferedLinearInterpolator(IBufferedLinearInterpolatorSettings settings) + public void OnEnable() { - m_Settings = settings; } - private NetworkTime m_PreviousTimeConsumed; + public void OnNetworkSpawn() + { + } private void TryConsumeFromBuffer() { - var count = m_Buffer.Count; int nbConsumed = 0; + // sorted so newer (bigger) time values are at the beginning. for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; @@ -91,47 +55,10 @@ private void TryConsumeFromBuffer() m_LerpEndValue = bufferedValue.item; m_CurrentTimeConsumed = bufferedValue.timeSent; - Debug.Log($"hellooooo {bufferedValue.timeSent}"); m_Buffer.RemoveAt(i); nbConsumed++; - - var pos = m_LerpEndValue is Vector3 value ? value : default; - Debug.DrawLine(pos, pos + Random.Range(0f, 1f) * Vector3.up + Random.Range(0f, 1f) * Vector3.left, Color.green, 10, false); - // break; } } - - Debug.Log($"Buffer size: {count}, nb consumed: {nbConsumed}"); - var pos2 = m_LerpEndValue is Vector3 value2 ? value2 : default; - - Debug.DrawLine(pos2, pos2 + Vector3.down * 100 * (float) (m_CurrentTimeConsumed.Time - m_PreviousTimeConsumed.Time), Color.cyan, 10, false); - for (int i = 0; i < count; i++) - { - Debug.DrawLine(pos2 + Vector3.up * (i+1), pos2 + Vector3.up* (i+1) + Vector3.left, Color.white, 10, false); - } - } - - // private float samLastServerTime; - // private float samLastTime; - - // private float serverOffset; - // private float m_RenderTime => Time.time - serverOffset; - - public void Start() - { - // serverOffset = (float) (Time.time - NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time); - } - - public void OnEnable() - { - } - - public void Awake() - { - } - - public void OnNetworkSpawn() - { } public T Update(float deltaTime) @@ -140,46 +67,21 @@ public T Update(float deltaTime) TryConsumeFromBuffer(); - - // Interpolation example to understand the math below - // 4 6 6.5 - // | | | - // A B Server - - // Unclamped - // 4 6 6.5 - // | | | | | - // A B Render Server - // A B C - // A B - var timeB = m_CurrentTimeConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); + // 4 4.5 6 6.5 + // | | | | + // A render B Server + + var timeB = m_CurrentTimeConsumed; var timeA = m_PreviousTimeConsumed; double range = timeB.Time - timeA.Time; var renderTime = ServerTimeBeingHandledForBuffering - range; - // var renderTime = m_RenderTime; float t = (float)((renderTime - timeA.Time) / range); - // var diffServerTime = NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - samLastServerTime; - // samLastServerTime = (float) NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time; - // var diffTime = Time.time - samLastTime; - // samLastTime = Time.time; - // Debug.Log($"diffServerTime {diffServerTime} diffTime {diffTime} deltaTime {deltaTime}"); - Debug.Log($"ttttttttttttt {t}"); - m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); - // m_CurrentValue = m_LerpEndValue; - + m_CurrentUpdatedValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); - // var timeB = m_ValueCurrentTickConsumed;//new NetworkTime(NetworkManager.Singleton.NetworkTickSystem.TickRate, m_ValueLastTick); - // var timeA = timeB - timeB.FixedDeltaTime;// - // double range = timeB.Time - timeA.Time; - // float t = (float)((NetworkManager.Singleton.NetworkTickSystem.ServerTime.Time - timeA.FixedDeltaTime - timeA.Time) / range); - // m_CurrentValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); - - - - var pos = m_CurrentValue is Vector3 value ? value : default; + var pos = m_CurrentUpdatedValue is Vector3 value ? value : default; Debug.DrawLine(pos, pos + Vector3.up, Color.magenta, 10, false); - return m_CurrentValue; + return m_CurrentUpdatedValue; } public void FixedUpdate(float fixedDeltaTime) @@ -191,20 +93,25 @@ public void AddMeasurement(T newMeasurement, NetworkTime sentTime) var debugPos = newMeasurement is Vector3 value ? value : default; Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); - Debug.Log($"Adding measurement {Time.time}"); // todo put limit on size, we don't want lag spikes to create 100 entries and have a list that size in memory for ever - m_Buffer.Add(new BufferedItem() {item = newMeasurement, timeSent = sentTime}); - m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); + if (m_Buffer.Count >= k_BufferSizeLimit) + { + Debug.LogWarning("Going over buffer size limit while adding new interpolation values, interpolation buffering isn't consuming fast enough, removing last value now."); + // todo remove oldest item + } + + m_Buffer.Add(new BufferedItem {item = newMeasurement, timeSent = sentTime}); + m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); // todo test the reverse, this should actually be the other way } public T GetInterpolatedValue() { - return m_CurrentValue; + return m_CurrentUpdatedValue; } public void Reset(T value, NetworkTime sentTime) { - m_CurrentValue = value; + m_CurrentUpdatedValue = value; m_LerpEndValue = value; m_LerpStartValue = value; } @@ -219,8 +126,6 @@ public void OnDestroy() public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator { - public BufferedLinearInterpolatorVector3(IBufferedLinearInterpolatorSettings settings) : base(settings) { } - public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) { return Vector3.Lerp(start, end, time); @@ -229,8 +134,6 @@ public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator { - public BufferedLinearInterpolatorQuaternion(IBufferedLinearInterpolatorSettings settings) : base(settings) { } - public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) { return Quaternion.Slerp(start, end, time); diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index 827bff7359..eaccaa52b6 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -4,7 +4,6 @@ namespace Unity.Netcode { public interface IInterpolator { - public void Awake(); public void OnNetworkSpawn(); public void Start(); public void OnEnable(); @@ -15,14 +14,4 @@ public interface IInterpolator public void Reset(T value, NetworkTime sentTime); public void OnDestroy(); } - - public abstract class InterpolatorFactory : ScriptableObject - { - public const string BaseMenuName = "MLAPI/Interpolator/"; - public abstract IInterpolator CreateInterpolator(); - } - - public interface IInterpolatorSettings - { - } } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index b7b561b815..b15a338346 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -1,25 +1,5 @@ -using UnityEngine; - namespace Unity.Netcode { - [CreateAssetMenu(fileName = "NoInterpolationVector3", menuName = BaseMenuName + "NoInterpolationVector3", order = 1)] - public class NoInterpolationVector3Factory : InterpolatorFactory - { - public override IInterpolator CreateInterpolator() - { - return new NoInterpolation(); - } - } - - [CreateAssetMenu(fileName = "NoInterpolationQuaternion", menuName = BaseMenuName + "NoInterpolationQuaternion", order = 1)] - public class NoInterpolationQuaternionFactory : InterpolatorFactory - { - public override IInterpolator CreateInterpolator() - { - return new NoInterpolation(); - } - } - public class NoInterpolation : IInterpolator { private T m_Current; @@ -60,7 +40,7 @@ public T GetInterpolatedValue() return m_Current; } - public void Reset(T value, NetworkTime SentTick) + public void Reset(T value, NetworkTime sentTick) { m_Current = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs index 3a24eaf3af..a574c87a92 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs @@ -3,34 +3,14 @@ namespace Unity.Netcode { - [CreateAssetMenu(fileName = "PositionLinearInterpolator", menuName = BaseMenuName + "PositionLinearInterpolator", order = 1)] - public class PositionLinearInterpolatorFactory : InterpolatorFactory + public class PositionSimpleInterpolator : IInterpolator { - [SerializeField] - public float MaxLerpTime = 0.2f; + private float m_CurrentTime; + private Vector3 m_StartVector; + private Vector3 m_EndVector; + private Vector3 m_UpdatedVector; - public override IInterpolator CreateInterpolator() - { - return new PositionLinearInterpolator(this); - } - } - - public class PositionLinearInterpolator : IInterpolator - { - public float m_CurrentTime; - public Vector3 m_StartVector; - public Vector3 m_EndVector; - public Vector3 m_UpdatedVector; - private readonly PositionLinearInterpolatorFactory m_Factory; - - public PositionLinearInterpolator(PositionLinearInterpolatorFactory factory) - { - m_Factory = factory; - } - - public void Awake() - { - } + private const float k_MaxLerpTime = 0.1f; public void OnNetworkSpawn() { @@ -47,7 +27,7 @@ public void OnEnable() public Vector3 Update(float deltaTime) { m_CurrentTime += deltaTime; - m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / m_Factory.MaxLerpTime); + m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / k_MaxLerpTime); return GetInterpolatedValue(); } @@ -55,7 +35,7 @@ public void FixedUpdate(float fixedDeltaTime) { } - public void AddMeasurement(Vector3 newMeasurement, NetworkTime SentTick) + public void AddMeasurement(Vector3 newMeasurement, NetworkTime sentTick) { m_EndVector = newMeasurement; m_CurrentTime = 0; @@ -67,7 +47,7 @@ public Vector3 GetInterpolatedValue() return m_UpdatedVector; } - public void Reset(Vector3 value, NetworkTime SentTick) + public void Reset(Vector3 value, NetworkTime sentTick) { m_UpdatedVector = value; } diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index f8188dd985..e0581d14d7 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -84,18 +84,58 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; - [SerializeField] - private InterpolatorFactory m_PositionInterpolatorFactory; - - [SerializeField] - private InterpolatorFactory m_RotationInterpolatorFactory; - protected virtual IInterpolator PositionInterpolator { get; set; } - protected virtual IInterpolator RotationInterpolator { get; set; } + protected virtual IInterpolator ScaleInterpolator { get; set; } // public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(ScriptableObject.CreateInstance()); // todo tmp, use default value instead private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native + + private Vector3 TransformPosition + { + get + { + if (InLocalSpace) + { + return m_Transform.localPosition; + } + else + { + return m_Transform.position; + } + } + } + + private Quaternion TransformRotation + { + get + { + if (InLocalSpace) + { + return m_Transform.localRotation; + } + else + { + return m_Transform.rotation; + } + } + } + + private Vector3 TransformScale + { + get + { + if (InLocalSpace) + { + return m_Transform.localScale; + } + else + { + return m_Transform.lossyScale; + } + } + } + private readonly NetworkVariable m_NetworkState = new NetworkVariable(new NetworkState()); private NetworkState m_PrevNetworkState; @@ -121,13 +161,13 @@ private bool IsNetworkStateDirty(NetworkState networkState) { isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Scale != m_Transform.localScale; + isDirty |= networkState.Scale != ScaleInterpolator.GetInterpolatedValue(); } else { isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Scale != m_Transform.lossyScale; + isDirty |= networkState.Scale != ScaleInterpolator.GetInterpolatedValue(); } return isDirty; @@ -154,8 +194,6 @@ private bool IsTransformDirty() return isDirty; } - private double previousTimeSam; - private Vector3 previousPosSam; private void SendNetworkStateToGhosts(double dirtyTime) { m_NetworkState.Value.InLocalSpace = InLocalSpace; @@ -172,10 +210,6 @@ private void SendNetworkStateToGhosts(double dirtyTime) m_NetworkState.Value.Rotation = m_Transform.rotation; m_NetworkState.Value.Scale = m_Transform.lossyScale; } - Debug.DrawLine(m_NetworkState.Value.Position, m_NetworkState.Value.Position + Vector3.up * 100f * (float) (m_NetworkState.Value.SentTime - previousTimeSam), Color.yellow, 10, false); - Debug.Log($"sam asdf distance {Math.Round((m_NetworkState.Value.Position - previousPosSam).magnitude, 2)} tick diff {m_NetworkState.Value.SentTime - previousTimeSam} sam"); - previousTimeSam = m_NetworkState.Value.SentTime; - previousPosSam = m_NetworkState.Value.Position; m_NetworkState.SetDirty(true); } @@ -185,6 +219,7 @@ private void ApplyNetworkStateFromAuthority(NetworkState netState) netState = new NetworkState(netState); netState.Position = PositionInterpolator.GetInterpolatedValue(); netState.Rotation = RotationInterpolator.GetInterpolatedValue(); + netState.Scale = ScaleInterpolator.GetInterpolatedValue(); InLocalSpace = netState.InLocalSpace; if (InLocalSpace) @@ -205,9 +240,6 @@ private void ApplyNetworkStateFromAuthority(NetworkState netState) m_PrevNetworkState = netState; } - - private int oldTick; - private NetworkState debug_previousStateChanged; private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { if (!NetworkObject.IsSpawned) @@ -222,22 +254,16 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) return; } - // todo check teleport flag + // todo for teleport, check teleport flag // if (newState.Teleporting) // { // PositionInterpolator.Reset(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); // } - // PositionInterpolator.AddMeasurement(newState.Position, NetworkManager.Singleton.ServerTime.Time); - - Debug.Log($"distance sam {Math.Round((newState.Position - oldState.Position).magnitude, 2)}"); - Debug.Log($"diff tick sam {(newState.SentTime - oldState.SentTime, 2)}"); - // oldTick = NetworkManager.Singleton.ServerTime.Tick; - // Debug.DrawLine(newState.Position, newState.Position + Vector3.down + Vector3.left, Color.yellow, 10, false); - debug_previousStateChanged = newState; var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); PositionInterpolator.AddMeasurement(newState.Position, sentTime); RotationInterpolator.AddMeasurement(newState.Rotation, sentTime); + ScaleInterpolator.AddMeasurement(newState.Scale, sentTime); } private void UpdateNetVarPerms() @@ -260,28 +286,10 @@ private void UpdateNetVarPerms() private void Awake() { - //debug, remove me - // Time.maximumDeltaTime = 999f; - m_Transform = transform; - var defaultBufferTime = 0.1f; - if (m_PositionInterpolatorFactory == null) - { - PositionInterpolator = new BufferedLinearInterpolatorVector3(new BufferedLinearInterpolatorSettings {InterpolationTime = defaultBufferTime}); - } - else - { - PositionInterpolator = m_PositionInterpolatorFactory.CreateInterpolator(); - } - - if (m_RotationInterpolatorFactory == null) - { - RotationInterpolator = new BufferedLinearInterpolatorQuaternion(new BufferedLinearInterpolatorSettings {InterpolationTime = defaultBufferTime}); - } - else - { - RotationInterpolator = m_RotationInterpolatorFactory.CreateInterpolator(); - } + PositionInterpolator = new BufferedLinearInterpolatorVector3(); + RotationInterpolator = new BufferedLinearInterpolatorQuaternion(); + ScaleInterpolator = new BufferedLinearInterpolatorVector3(); UpdateNetVarPerms(); @@ -291,20 +299,25 @@ private void Awake() m_NetworkState.OnValueChanged += OnNetworkStateChanged; } + public void Start() + { + PositionInterpolator.Start(); + RotationInterpolator.Start(); + ScaleInterpolator.Start(); + } + public override void OnNetworkSpawn() { m_PrevNetworkState = null; - // if (enabled) // todo Luke fix your UX - // { - // NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; - // } var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTime); - PositionInterpolator.Reset(m_Transform.position, currentTime); - RotationInterpolator.Reset(m_Transform.rotation, currentTime); + PositionInterpolator.Reset(TransformPosition, currentTime); + RotationInterpolator.Reset(TransformRotation, currentTime); + ScaleInterpolator.Reset(TransformScale, currentTime); PositionInterpolator.OnNetworkSpawn(); RotationInterpolator.OnNetworkSpawn(); + ScaleInterpolator.OnNetworkSpawn(); } private void OnDestroy() @@ -318,27 +331,16 @@ private void FixedUpdate() { return; } - // if (CanUpdateTransform) - // { - // if (IsTransformDirty()) - // { - // // check for time there was a change to the transform - // m_DirtyTime = NetworkManager.LocalTime.Time; - // } - // - // UpdateNetworkState(); - // } - // else - { - if (IsNetworkStateDirty(m_PrevNetworkState)) - { - Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); - ApplyNetworkStateFromAuthority(m_NetworkState.Value); - } - PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + if (IsNetworkStateDirty(m_PrevNetworkState)) + { + Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); + ApplyNetworkStateFromAuthority(m_NetworkState.Value); } + + PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + ScaleInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } private int debugOldTime = 0; @@ -361,13 +363,9 @@ private void Update() if (!CanUpdateTransform) { - // Debug.Log("gaga "+Math.Round(Time.time - (float)NetworkManager.Singleton.ServerTime.Time, 2)); - - // Debug.Log($"sam {Math.Round(NetworkManager.Singleton.ServerTime.Time - debugOldTime, 2)}"); - // debugOldTime = NetworkManager.Singleton.ServerTime.Time; - PositionInterpolator.Update(Time.deltaTime); RotationInterpolator.Update(Time.deltaTime); + ScaleInterpolator.Update(Time.deltaTime); ApplyNetworkStateFromAuthority(m_NetworkState.Value); } } diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 08d6103cb5..4e3172792b 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6195,9 +6195,9 @@ MonoBehaviour: MaxConnectAttempts: 10 channels: [] MessageBufferSize: 5120 - SimulatePacketLossChance: 0 - SimulateMinLatency: 0 - SimulateMaxLatency: 0 + SimulatePacketLossChance: 10 + SimulateMinLatency: 70 + SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7435,9 +7435,6 @@ MonoBehaviour: Authority: 0 InLocalSpace: 0 FixedSendsPerSecond: 30 - m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, - type: 2} - m_RotationInterpolatorFactory: {fileID: 0} --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 @@ -20871,42 +20868,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} m_Name: m_EditorClassIdentifier: - FixedSendsPerSecond: 20 - AssumeSyncedSends: 1 - InterpolatePosition: 1 - SnapDistance: 10 - InterpolateServer: 1 - MinMeters: 0.15 - MinDegrees: 1.5 - ExtrapolatePosition: 0 - MaxSendsToExtrapolate: 5 - Channel: - EnableRange: 0 - EnableNonProvokedResendChecks: 0 - DistanceSendrate: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 500 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 --- !u!65 &1643885208 BoxCollider: m_ObjectHideFlags: 0 diff --git a/testproject/Assets/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs similarity index 100% rename from testproject/Assets/MoveInCircle.cs rename to testproject/Assets/Scripts/MoveInCircle.cs diff --git a/testproject/Assets/MoveInCircle.cs.meta b/testproject/Assets/Scripts/MoveInCircle.cs.meta similarity index 100% rename from testproject/Assets/MoveInCircle.cs.meta rename to testproject/Assets/Scripts/MoveInCircle.cs.meta diff --git a/testproject/Assets/Scripts/NetworkTransformLegacy.cs b/testproject/Assets/Scripts/NetworkTransformLegacy.cs deleted file mode 100644 index e702a99b27..0000000000 --- a/testproject/Assets/Scripts/NetworkTransformLegacy.cs +++ /dev/null @@ -1,375 +0,0 @@ -using System.Linq; -using System.Collections.Generic; -using MLAPI; -using UnityEngine; -using MLAPI.Messaging; - -namespace Sam -{ - /// - /// A prototype component for syncing transforms - /// - [AddComponentMenu("MLAPI/NetworkTransformLegacy")] - public class NetworkTransformLegacy : NetworkBehaviour - { - internal class ClientSendInfo - { - public float LastSent; - public Vector3? LastMissedPosition; - public Quaternion? LastMissedRotation; - } - - /// - /// The base amount of sends per seconds to use when range is disabled - /// - [Range(0, 120)] - public float FixedSendsPerSecond = 20f; - - /// - /// Is the sends per second assumed to be the same across all instances - /// - [Tooltip("This assumes that the SendsPerSecond is synced across clients")] - public bool AssumeSyncedSends = true; - - /// - /// Enable interpolation - /// - [Tooltip("This requires AssumeSyncedSends to be true")] - public bool InterpolatePosition = true; - - /// - /// The distance before snaping to the position - /// - [Tooltip("The transform will snap if the distance is greater than this distance")] - public float SnapDistance = 10f; - - /// - /// Should the server interpolate - /// - public bool InterpolateServer = true; - - /// - /// The min meters to move before a send is sent - /// - public float MinMeters = 0.15f; - - /// - /// The min degrees to rotate before a send it sent - /// - public float MinDegrees = 1.5f; - - /// - /// Enables extrapolation - /// - public bool ExtrapolatePosition = false; - - /// - /// The maximum amount of expected send rates to extrapolate over when awaiting new packets. - /// A higher value will result in continued extrapolation after an object has stopped moving - /// - public float MaxSendsToExtrapolate = 5; - - /// - /// The channel to send the data on - /// - [Tooltip("The channel to send the data on. Uses the default channel if left unspecified")] - public string Channel = null; - - private float m_LerpTime; - private Vector3 m_LerpStartPos; - private Quaternion m_LerpStartRot; - private Vector3 m_LerpEndPos; - private Quaternion m_LerpEndRot; - - private float m_LastSendTime; - private Vector3 m_LastSentPos; - private Quaternion m_LastSentRot; - - private float m_LastReceiveTime; - - /// - /// Enables range based send rate - /// - public bool EnableRange; - - /// - /// Checks for missed sends without provocation. Provocation being a client inside it's normal SendRate - /// - public bool EnableNonProvokedResendChecks; - - /// - /// The curve to use to calculate the send rate - /// - public AnimationCurve DistanceSendrate = AnimationCurve.Constant(0, 500, 20); - - private readonly Dictionary m_ClientSendInfo = new Dictionary(); - - /// - /// The delegate used to check if a move is valid - /// - /// The client id the move is being validated for - /// The previous position - /// The new requested position - /// Returns Whether or not the move is valid - public delegate bool MoveValidationDelegate(ulong clientId, Vector3 oldPos, Vector3 newPos); - - /// - /// If set, moves will only be accepted if the custom delegate returns true - /// - public MoveValidationDelegate IsMoveValidDelegate = null; - - private void OnValidate() - { - if (!AssumeSyncedSends && InterpolatePosition) - { - InterpolatePosition = false; - } - - if (InterpolateServer && !InterpolatePosition) - { - InterpolateServer = false; - } - - if (MinDegrees < 0) - { - MinDegrees = 0; - } - - if (MinMeters < 0) - { - MinMeters = 0; - } - - if (EnableNonProvokedResendChecks && !EnableRange) - { - EnableNonProvokedResendChecks = false; - } - } - - private float GetTimeForLerp(Vector3 pos1, Vector3 pos2) - { - return 1f / DistanceSendrate.Evaluate(Vector3.Distance(pos1, pos2)); - } - - /// - /// Registers message handlers - /// - public override void OnNetworkSpawn() - { - m_LastSentRot = transform.rotation; - m_LastSentPos = transform.position; - - m_LerpStartPos = transform.position; - m_LerpStartRot = transform.rotation; - - m_LerpEndPos = transform.position; - m_LerpEndRot = transform.rotation; - } - - private void Update() - { - if (IsOwner) - { - if (NetworkManager.LocalTime.FixedTime - m_LastSendTime >= (1f / FixedSendsPerSecond) && (Vector3.Distance(transform.position, m_LastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, m_LastSentRot) > MinDegrees)) - { - m_LastSendTime = (float) NetworkManager.LocalTime.FixedTime; - m_LastSentPos = transform.position; - m_LastSentRot = transform.rotation; - - if (IsServer) - { - ApplyTransformClientRpc(transform.position, transform.rotation.eulerAngles, - new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = NetworkManager.ConnectedClientsList.Where(c => c.ClientId != OwnerClientId).Select(c => c.ClientId).ToArray() } }); - } - else - { - SubmitTransformServerRpc(transform.position, transform.rotation.eulerAngles); - } - } - } - else - { - //If we are server and interpolation is turned on for server OR we are not server and interpolation is turned on - if ((IsServer && InterpolateServer && InterpolatePosition) || (!IsServer && InterpolatePosition)) - { - if (Vector3.Distance(transform.position, m_LerpEndPos) > SnapDistance) - { - //Snap, set T to 1 (100% of the lerp) - m_LerpTime = 1f; - } - - float sendDelay = (IsServer || !EnableRange || !AssumeSyncedSends || NetworkManager.ConnectedClients[NetworkManager.LocalClientId].PlayerObject == null) ? (1f / FixedSendsPerSecond) : GetTimeForLerp(transform.position, NetworkManager.ConnectedClients[NetworkManager.LocalClientId].PlayerObject.transform.position); - m_LerpTime += Time.unscaledDeltaTime / sendDelay; - - if (ExtrapolatePosition && Time.unscaledTime - m_LastReceiveTime < sendDelay * MaxSendsToExtrapolate) - { - transform.position = Vector3.LerpUnclamped(m_LerpStartPos, m_LerpEndPos, m_LerpTime); - } - else - { - transform.position = Vector3.Lerp(m_LerpStartPos, m_LerpEndPos, m_LerpTime); - } - - if (ExtrapolatePosition && Time.unscaledTime - m_LastReceiveTime < sendDelay * MaxSendsToExtrapolate) - { - transform.rotation = Quaternion.SlerpUnclamped(m_LerpStartRot, m_LerpEndRot, m_LerpTime); - } - else - { - transform.rotation = Quaternion.Slerp(m_LerpStartRot, m_LerpEndRot, m_LerpTime); - } - } - } - - if (IsServer && EnableRange && EnableNonProvokedResendChecks) - { - CheckForMissedSends(); - } - } - - [ClientRpc] - private void ApplyTransformClientRpc(Vector3 position, Vector3 eulerAngles, ClientRpcParams rpcParams = default) - { - if (enabled) - { - ApplyTransformInternal(position, Quaternion.Euler(eulerAngles)); - } - } - - private void ApplyTransformInternal(Vector3 position, Quaternion rotation) - { - if (!enabled) - { - return; - } - - if (InterpolatePosition && (!IsServer || InterpolateServer)) - { - m_LastReceiveTime = Time.unscaledTime; - m_LerpStartPos = transform.position; - m_LerpStartRot = transform.rotation; - m_LerpEndPos = position; - m_LerpEndRot = rotation; - m_LerpTime = 0; - } - else - { - transform.position = position; - transform.rotation = rotation; - } - } - - [ServerRpc] - private void SubmitTransformServerRpc(Vector3 position, Vector3 eulerAngles, ServerRpcParams rpcParams = default) - { - if (!enabled) - { - return; - } - - if (IsMoveValidDelegate != null && !IsMoveValidDelegate(rpcParams.Receive.SenderClientId, m_LerpEndPos, position)) - { - //Invalid move! - //TODO: Add rubber band (just a message telling them to go back) - return; - } - - if (!IsClient) - { - // Dedicated server - ApplyTransformInternal(position, Quaternion.Euler(eulerAngles)); - } - - if (EnableRange) - { - for (int i = 0; i < NetworkManager.ConnectedClientsList.Count; i++) - { - if (!m_ClientSendInfo.TryGetValue(NetworkManager.ConnectedClientsList[i].ClientId, out ClientSendInfo info)) - { - info = new ClientSendInfo() { LastMissedPosition = null, LastMissedRotation = null, LastSent = 0 }; - m_ClientSendInfo.Add(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, info); - } - - Vector3? receiverPosition = NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject.transform.position); - Vector3? senderPosition = NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject.transform.position); - - if ((receiverPosition == null || senderPosition == null && NetworkManager.LocalTime.FixedTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.LocalTime.FixedTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) - { - info.LastSent = (float) NetworkManager.LocalTime.FixedTime; - info.LastMissedPosition = null; - info.LastMissedRotation = null; - - ApplyTransformClientRpc(position, eulerAngles, - new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { NetworkManager.ConnectedClientsList[i].ClientId } } }); - } - else - { - info.LastMissedPosition = position; - info.LastMissedRotation = Quaternion.Euler(eulerAngles); - } - } - } - else - { - ApplyTransformClientRpc(position, eulerAngles, - new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = NetworkManager.ConnectedClientsList.Where(c => c.ClientId != OwnerClientId).Select(c => c.ClientId).ToArray() } }); - } - } - - private void CheckForMissedSends() - { - for (int i = 0; i < NetworkManager.ConnectedClientsList.Count; i++) - { - if (!m_ClientSendInfo.ContainsKey(NetworkManager.ConnectedClientsList[i].ClientId)) - { - m_ClientSendInfo.Add(NetworkManager.ConnectedClientsList[i].ClientId, new ClientSendInfo() - { - LastMissedPosition = null, - LastMissedRotation = null, - LastSent = 0 - }); - } - - ClientSendInfo info = m_ClientSendInfo[NetworkManager.ConnectedClientsList[i].ClientId]; - Vector3? receiverPosition = NetworkManager.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClientsList[i].PlayerObject.transform.position); - Vector3? senderPosition = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); - - if ((receiverPosition == null || senderPosition == null && NetworkManager.LocalTime.FixedTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.LocalTime.FixedTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value)) - { - /* why is this??? ->*/ - Vector3? pos = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.position); - /* why is this??? ->*/ - Vector3? rot = NetworkManager.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.ConnectedClients[OwnerClientId].PlayerObject.transform.rotation.eulerAngles); - - if (info.LastMissedPosition != null && info.LastMissedRotation != null) - { - info.LastSent = (float) NetworkManager.LocalTime.FixedTime; - - ApplyTransformClientRpc(info.LastMissedPosition.Value, info.LastMissedRotation.Value.eulerAngles, - new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { NetworkManager.ConnectedClientsList[i].ClientId } } }); - - info.LastMissedPosition = null; - info.LastMissedRotation = null; - } - } - } - } - - /// - /// Teleports the transform to the given position and rotation - /// - /// The position to teleport to - /// The rotation to teleport to - public void Teleport(Vector3 position, Quaternion rotation) - { - if (InterpolateServer && IsServer || IsClient) - { - m_LerpStartPos = position; - m_LerpStartRot = rotation; - m_LerpEndPos = position; - m_LerpEndRot = rotation; - m_LerpTime = 0; - } - } - } -} \ No newline at end of file diff --git a/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta b/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta deleted file mode 100644 index d55a2a45cd..0000000000 --- a/testproject/Assets/Scripts/NetworkTransformLegacy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df4fbe773fc544428171994e08b0483f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 4a86539b7c3401e69d26b6dc9562a79ba84f7503 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 15:43:52 -0400 Subject: [PATCH 13/74] renames --- ...erpolatorVector3Factory.cs => BufferedLinearInterpolator.cs} | 0 ...ector3Factory.cs.meta => BufferedLinearInterpolator.cs.meta} | 2 +- ...sitionLinearInterpolatorFactory.cs => SimpleInterpolator.cs} | 2 +- ...arInterpolatorFactory.cs.meta => SimpleInterpolator.cs.meta} | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{BufferedLinearInterpolatorVector3Factory.cs => BufferedLinearInterpolator.cs} (100%) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{BufferedLinearInterpolatorVector3Factory.cs.meta => BufferedLinearInterpolator.cs.meta} (83%) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{PositionLinearInterpolatorFactory.cs => SimpleInterpolator.cs} (95%) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{PositionLinearInterpolatorFactory.cs.meta => SimpleInterpolator.cs.meta} (83%) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta similarity index 83% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta index 957c278840..88cd4890fb 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3Factory.cs.meta +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 199dd81621cd441c19cc731e8d29a217 +guid: a12ebf95bdb4445d9a16e4b6adadb6aa MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs similarity index 95% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs index a574c87a92..5e5b8768a5 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs @@ -3,7 +3,7 @@ namespace Unity.Netcode { - public class PositionSimpleInterpolator : IInterpolator + public class SimpleInterpolatorVector3 : IInterpolator { private float m_CurrentTime; private Vector3 m_StartVector; diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs.meta similarity index 83% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs.meta index 634ea8c755..7856461e9c 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/PositionLinearInterpolatorFactory.cs.meta +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d27105c543ddf4083b4918635b19348a +guid: 461703a2c7500460db78a7231310592b MonoImporter: externalObjects: {} serializedVersion: 2 From 2cdbb1b67b1a0b829b3a2d4e5b49a1feba2eb2de Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 15:58:21 -0400 Subject: [PATCH 14/74] # --- .../Interpolator/BufferedLinearInterpolator.cs | 16 +++++----------- .../Prototyping/NetworkTransform.cs | 11 +++++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 27795572a1..2371839df4 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -41,7 +41,7 @@ public void OnNetworkSpawn() private void TryConsumeFromBuffer() { int nbConsumed = 0; - // sorted so newer (bigger) time values are at the beginning. + // sorted so older (smaller) time values are at the end. for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; @@ -79,8 +79,6 @@ public T Update(float deltaTime) float t = (float)((renderTime - timeA.Time) / range); m_CurrentUpdatedValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); - var pos = m_CurrentUpdatedValue is Vector3 value ? value : default; - Debug.DrawLine(pos, pos + Vector3.up, Color.magenta, 10, false); return m_CurrentUpdatedValue; } @@ -90,18 +88,14 @@ public void FixedUpdate(float fixedDeltaTime) public void AddMeasurement(T newMeasurement, NetworkTime sentTime) { - var debugPos = newMeasurement is Vector3 value ? value : default; - Debug.DrawLine(debugPos, debugPos + Vector3.right + Vector3.up, Color.red, 10, false); - - // todo put limit on size, we don't want lag spikes to create 100 entries and have a list that size in memory for ever - if (m_Buffer.Count >= k_BufferSizeLimit) + if (m_Buffer.Count > k_BufferSizeLimit) { - Debug.LogWarning("Going over buffer size limit while adding new interpolation values, interpolation buffering isn't consuming fast enough, removing last value now."); - // todo remove oldest item + Debug.LogWarning("Going over buffer size limit while adding new interpolation values, interpolation buffering isn't consuming fast enough, removing oldest value now."); + m_Buffer.RemoveAt(m_Buffer.Count - 1); } m_Buffer.Add(new BufferedItem {item = newMeasurement, timeSent = sentTime}); - m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); // todo test the reverse, this should actually be the other way + m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); } public T GetInterpolatedValue() diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index e0581d14d7..142657e417 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -306,6 +306,13 @@ public void Start() ScaleInterpolator.Start(); } + public void OnEnable() + { + PositionInterpolator.OnEnable(); + RotationInterpolator.OnEnable(); + ScaleInterpolator.OnEnable(); + } + public override void OnNetworkSpawn() { m_PrevNetworkState = null; @@ -323,6 +330,10 @@ public override void OnNetworkSpawn() private void OnDestroy() { m_NetworkState.OnValueChanged -= OnNetworkStateChanged; + + PositionInterpolator.OnDestroy(); + RotationInterpolator.OnDestroy(); + ScaleInterpolator.OnDestroy(); } private void FixedUpdate() From 07c3d07224e7f817327ca286b5e27d80ffa2246c Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 11 Aug 2021 19:05:28 -0400 Subject: [PATCH 15/74] # --- .../BufferedLinearInterpolator.cs | 1 - .../BufferedLinearInterpolatorVector3.asset | 15 -- ...fferedLinearInterpolatorVector3.asset.meta | 8 - .../Prototyping/NetworkTransform.cs | 30 ++-- testproject/Assets/Scenes/ZooSam.unity | 153 +----------------- 5 files changed, 19 insertions(+), 188 deletions(-) delete mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset delete mode 100644 com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 2371839df4..590b91f8e4 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -112,7 +112,6 @@ public void Reset(T value, NetworkTime sentTime) public void OnDestroy() { - throw new System.NotImplementedException(); } public abstract T Interpolate(T start, T end, float time); diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset deleted file mode 100644 index 82227544b1..0000000000 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset +++ /dev/null @@ -1,15 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 199dd81621cd441c19cc731e8d29a217, type: 3} - m_Name: BufferedLinearInterpolatorVector3 - m_EditorClassIdentifier: - InterpolationTime: 0.1 diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta deleted file mode 100644 index e43ac9cd50..0000000000 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolatorVector3.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a882403a7bf6247cd881a093a9a3f537 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 142657e417..31a84bf42c 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -1,5 +1,4 @@ using System; -using Unity.Netcode; using UnityEngine; namespace Unity.Netcode.Prototyping @@ -66,8 +65,8 @@ public void NetworkSerialize(NetworkSerializer serializer) /// The network channel to use send updates /// [Tooltip("The network channel to use send updates")] - private NetworkChannel Channel = NetworkChannel.SyncChannel; - // private NetworkChannel Channel = NetworkChannel.PositionUpdate; + // private NetworkChannel Channel = NetworkChannel.SyncChannel; + private NetworkChannel Channel = NetworkChannel.PositionUpdate; /// /// Sets whether this transform should sync in local space or in world space. @@ -87,7 +86,6 @@ public void NetworkSerialize(NetworkSerializer serializer) protected virtual IInterpolator PositionInterpolator { get; set; } protected virtual IInterpolator RotationInterpolator { get; set; } protected virtual IInterpolator ScaleInterpolator { get; set; } - // public IInterpolator PositionInterpolator = new BufferedLinearInterpolatorVector3(ScriptableObject.CreateInstance()); // todo tmp, use default value instead private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -216,28 +214,26 @@ private void SendNetworkStateToGhosts(double dirtyTime) private void ApplyNetworkStateFromAuthority(NetworkState netState) { - netState = new NetworkState(netState); - netState.Position = PositionInterpolator.GetInterpolatedValue(); - netState.Rotation = RotationInterpolator.GetInterpolatedValue(); - netState.Scale = ScaleInterpolator.GetInterpolatedValue(); - InLocalSpace = netState.InLocalSpace; if (InLocalSpace) { - m_Transform.localPosition = netState.Position; - m_Transform.localRotation = netState.Rotation; - m_Transform.localScale = netState.Scale; + m_Transform.localPosition = PositionInterpolator.GetInterpolatedValue(); + m_Transform.localRotation = RotationInterpolator.GetInterpolatedValue(); + m_Transform.localScale = ScaleInterpolator.GetInterpolatedValue(); } else { - m_Transform.position = netState.Position; - m_Transform.rotation = netState.Rotation; + m_Transform.position = PositionInterpolator.GetInterpolatedValue(); + m_Transform.rotation = RotationInterpolator.GetInterpolatedValue(); m_Transform.localScale = Vector3.one; var lossyScale = m_Transform.lossyScale; - m_Transform.localScale = new Vector3(netState.Scale.x / lossyScale.x, netState.Scale.y / lossyScale.y, netState.Scale.z / lossyScale.z); + m_Transform.localScale = new Vector3(ScaleInterpolator.GetInterpolatedValue().x / lossyScale.x, ScaleInterpolator.GetInterpolatedValue().y / lossyScale.y, ScaleInterpolator.GetInterpolatedValue().z / lossyScale.z); } m_PrevNetworkState = netState; + m_PrevNetworkState.Position = PositionInterpolator.GetInterpolatedValue(); + m_PrevNetworkState.Rotation = RotationInterpolator.GetInterpolatedValue(); + m_PrevNetworkState.Scale = ScaleInterpolator.GetInterpolatedValue(); } private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) @@ -345,7 +341,7 @@ private void FixedUpdate() if (IsNetworkStateDirty(m_PrevNetworkState)) { - Debug.LogWarning("A local change without authority detected, revert back to latest network state!"); + Debug.LogWarning("A local change without authority detected, revert back to latest network state!", this); ApplyNetworkStateFromAuthority(m_NetworkState.Value); } @@ -354,8 +350,6 @@ private void FixedUpdate() ScaleInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } - private int debugOldTime = 0; - private void Update() { if (!NetworkObject.IsSpawned) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 4e3172792b..6225835beb 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -3672,7 +3672,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &351881178 GameObject: @@ -6187,6 +6187,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} m_Name: m_EditorClassIdentifier: + m_ChannelsCache: [] Port: 7777 Address: 127.0.0.1 PingInterval: 1 @@ -6198,6 +6199,8 @@ MonoBehaviour: SimulatePacketLossChance: 10 SimulateMinLatency: 70 SimulateMaxLatency: 130 + m_MessageBuffer: [] + m_HostType: 0 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7268,7 +7271,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &674940303 GameObject: @@ -7510,7 +7513,7 @@ Transform: m_Children: - {fileID: 702051986} m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &680150732 GameObject: @@ -8644,7 +8647,7 @@ Transform: - {fileID: 398540133} - {fileID: 1399839515} m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &731245575 GameObject: @@ -20834,148 +20837,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1633292495} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1643885206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1643885211} - - component: {fileID: 1643885210} - - component: {fileID: 1643885209} - - component: {fileID: 1643885208} - - component: {fileID: 1643885207} - - component: {fileID: 1643885212} - - component: {fileID: 1643885213} - m_Layer: 0 - m_Name: NetworkTransformLegacy - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1643885207 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!65 &1643885208 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1643885209 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1643885210 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1643885211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10.29, y: 1.55, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1643885212 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: - GlobalObjectIdHash: 3638589847 - AlwaysReplicateAsRoot: 0 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 ---- !u!114 &1643885213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_MoveSpeed: 5 - m_RotationSpeed: 30 - runServerOnly: 0 - runInUpdate: 0 --- !u!1 &1659076779 GameObject: m_ObjectHideFlags: 0 From f6290e0d510f760f0cb9a64423e321a3a584b202 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 13 Aug 2021 15:42:14 -0400 Subject: [PATCH 16/74] cleanup --- .gitignore | 1 - .../Prototyping/NetworkTransform.cs | 42 +++++++------------ .../Runtime/Core/NetworkManager.cs | 4 +- .../NetworkConfigurationException.cs | 2 +- .../Messaging/InternalMessageHandler.cs | 1 - .../Runtime/Timing/NetworkTimeSystem.cs | 20 ++++++++- .../Runtime/Timing/TimeMultiInstanceTest.cs | 9 ---- testproject/Assets/Scripts/MoveInCircle.cs | 37 +++++++--------- testproject/Packages/manifest.json | 2 - testproject/Packages/packages-lock.json | 14 ------- .../ProjectSettings/EditorBuildSettings.asset | 6 +-- 11 files changed, 58 insertions(+), 80 deletions(-) diff --git a/.gitignore b/.gitignore index 3ea975c7b4..2f5d1d5be4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ .vs .vscode .idea -testproject_clone_0 diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 31a84bf42c..f019c14db1 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -31,19 +31,6 @@ private class NetworkState : INetworkSerializable public double SentTime; - public NetworkState(NetworkState copy) - { - InLocalSpace = copy.InLocalSpace; - Position = copy.Position; - Rotation = copy.Rotation; - Scale = copy.Scale; - SentTime = copy.SentTime; - } - - public NetworkState() - { - } - public void NetworkSerialize(NetworkSerializer serializer) { serializer.Serialize(ref InLocalSpace); @@ -65,7 +52,6 @@ public void NetworkSerialize(NetworkSerializer serializer) /// The network channel to use send updates /// [Tooltip("The network channel to use send updates")] - // private NetworkChannel Channel = NetworkChannel.SyncChannel; private NetworkChannel Channel = NetworkChannel.PositionUpdate; /// @@ -145,7 +131,7 @@ private Vector3 TransformScale Authority == NetworkAuthority.Server && IsServer || Authority == NetworkAuthority.Shared; - private bool IsNetworkStateDirty(NetworkState networkState) + private bool IsGhostStateDirty(NetworkState networkState) { if (networkState == null) { @@ -171,7 +157,8 @@ private bool IsNetworkStateDirty(NetworkState networkState) return isDirty; } - private bool IsTransformDirty() + // Is the non-interpolated authoritative state dirty? + private bool IsAuthoritativeTransformDirty() { bool isDirty = false; var networkState = m_NetworkState.Value; @@ -212,7 +199,7 @@ private void SendNetworkStateToGhosts(double dirtyTime) m_NetworkState.SetDirty(true); } - private void ApplyNetworkStateFromAuthority(NetworkState netState) + private void ApplyInterpolatedStateFromAuthority(NetworkState netState) { InLocalSpace = netState.InLocalSpace; if (InLocalSpace) @@ -339,15 +326,18 @@ private void FixedUpdate() return; } - if (IsNetworkStateDirty(m_PrevNetworkState)) + if (!CanUpdateTransform) { - Debug.LogWarning("A local change without authority detected, revert back to latest network state!", this); - ApplyNetworkStateFromAuthority(m_NetworkState.Value); - } + if (IsGhostStateDirty(m_PrevNetworkState)) + { + Debug.LogWarning("A local change without authority detected, revert back to latest network state!", this); + ApplyInterpolatedStateFromAuthority(m_NetworkState.Value); + } - PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - ScaleInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + ScaleInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + } } private void Update() @@ -359,7 +349,7 @@ private void Update() if (CanUpdateTransform) { - if (IsTransformDirty()) + if (IsAuthoritativeTransformDirty()) { // check for time there was a change to the transform SendNetworkStateToGhosts(NetworkManager.LocalTime.Time); @@ -371,7 +361,7 @@ private void Update() PositionInterpolator.Update(Time.deltaTime); RotationInterpolator.Update(Time.deltaTime); ScaleInterpolator.Update(Time.deltaTime); - ApplyNetworkStateFromAuthority(m_NetworkState.Value); + ApplyInterpolatedStateFromAuthority(m_NetworkState.Value); } } diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs index 7222fc0612..770b97cc90 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs @@ -41,6 +41,8 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr private const double k_TimeSyncFrequency = 1.0d; // sync every second, TODO will be removed once timesync is done via snapshots + private const float k_DefaultBufferSizeSec = 0.05f; + internal MessageQueueContainer MessageQueueContainer { get; private set; } @@ -418,7 +420,7 @@ private void Initialize(bool server) } else { - NetworkTimeSystem = new NetworkTimeSystem(1.0 / NetworkConfig.TickRate, 3.0 / NetworkConfig.TickRate, 0.2); + NetworkTimeSystem = new NetworkTimeSystem(1.0 / NetworkConfig.TickRate, k_DefaultBufferSizeSec, 0.2); } NetworkTickSystem = new NetworkTickSystem(NetworkConfig.TickRate, 0, 0); diff --git a/com.unity.multiplayer.mlapi/Runtime/Exceptions/NetworkConfigurationException.cs b/com.unity.multiplayer.mlapi/Runtime/Exceptions/NetworkConfigurationException.cs index a710ac64e2..3e1efd276b 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Exceptions/NetworkConfigurationException.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Exceptions/NetworkConfigurationException.cs @@ -3,7 +3,7 @@ namespace Unity.Netcode { /// - /// Exception thrown when the operation can only be done on the server + /// Exception thrown when a change to a configuration is wrong /// public class NetworkConfigurationException : Exception { diff --git a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs index 8252d65654..59134a528d 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs @@ -251,7 +251,6 @@ public void HandleDestroyObjects(ulong clientId, Stream stream) public void HandleTimeSync(ulong clientId, Stream stream) { - // Assert.IsTrue(clientId == NetworkManager.ServerClientId); using (var reader = PooledNetworkReader.Get(stream)) { int tick = reader.ReadInt32Packed(); diff --git a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs index 4717730e39..95969b7ca9 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs @@ -24,11 +24,29 @@ public class NetworkTimeSystem /// public double LocalBufferSec { get; set; } + private double m_ServerBufferSec; + /// /// Gets or sets the amount of the time in seconds the client should buffer incoming messages from the server. This increases server time. /// A higher value increases latency but makes the game look more smooth in bad networking conditions. + /// This value must be higher than the tick length. /// - public double ServerBufferSec { get; set; } + public double ServerBufferSec + { + get + { + return m_ServerBufferSec; + } + set + { + if (value < 0f || value < 1f / NetworkManager.Singleton.NetworkConfig.TickRate) + { + throw new NetworkConfigurationException("Error setting buffer size, buffer time needs to be bigger than the tick length and bigger than zero"); + } + + m_ServerBufferSec = value; + } + } /// /// Gets or sets a threshold in seconds used to force a hard catchup of network time. diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs index 14238c1775..98330b286d 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/Timing/TimeMultiInstanceTest.cs @@ -39,15 +39,6 @@ private void UpdateTimeStates(NetworkManager[] networkManagers) m_Client2State = new NetworkTimeState(secondClient); } - [UnityTest] - public IEnumerator TestSam() - { - yield return StartSomeClientsAndServerWithPlayersCustom(true, NbClients, 60, 30); - - - - } - [UnityTest] [TestCase(60, 30, ExpectedResult = null)] [TestCase(30, 30, ExpectedResult = null)] diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index 1af7460ad3..e37f898d52 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -10,40 +10,35 @@ public class MoveInCircle : NetworkBehaviour [SerializeField] private float m_RotationSpeed = 30; - public bool runServerOnly; - public bool runInUpdate; - - private Vector3 debug_oldPosition; - - // public override void OnNetworkSpawn() - // { - // base.OnNetworkSpawn();// - // NetworkManager.NetworkTickSystem.Tick += NetworkTickUpdate; - // } + [SerializeField] + private bool m_RunServerOnly; + [SerializeField] + private bool m_RunInUpdate; - private float lastTime; + private Vector3 m_DebugOldPosition; + private float m_DebugLastTime; void FixedUpdate() { - if (runInUpdate) return; + if (m_RunInUpdate) return; Tick(Time.fixedDeltaTime); } + private void Update() + { + if (!m_RunInUpdate) return; + Tick(Time.deltaTime); + } + void Tick(float deltaTime) { - if (NetworkManager.Singleton.IsServer || !runServerOnly) + if (NetworkManager.Singleton.IsServer || !m_RunServerOnly) { - debug_oldPosition = transform.position; + m_DebugOldPosition = transform.position; transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); // Debug.Log($"ewqqwe {Math.Round((transform.position - debug_oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); - lastTime = Time.time; + m_DebugLastTime = Time.time; transform.Rotate(0, m_RotationSpeed * deltaTime, 0); } } - - private void Update() - { - if (!runInUpdate) return; - Tick(Time.deltaTime); - } } diff --git a/testproject/Packages/manifest.json b/testproject/Packages/manifest.json index d05a83f7ce..4bc3118fdb 100644 --- a/testproject/Packages/manifest.json +++ b/testproject/Packages/manifest.json @@ -6,8 +6,6 @@ "com.unity.ide.vscode": "1.2.3", "com.unity.multiplayer.mlapi": "file:../../com.unity.multiplayer.mlapi", "com.unity.multiplayer.transport.utp": "file:../../com.unity.multiplayer.transport.utp", - "com.veriorpies.parrelsync": "https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync", - "com.mlapi.contrib.transport.litenetlib": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#temp/lnl-develop", "com.unity.package-validation-suite": "0.19.2-preview", "com.unity.test-framework": "1.1.27", "com.unity.test-framework.performance": "2.3.1-preview", diff --git a/testproject/Packages/packages-lock.json b/testproject/Packages/packages-lock.json index 567640d458..bc2860bfca 100644 --- a/testproject/Packages/packages-lock.json +++ b/testproject/Packages/packages-lock.json @@ -1,12 +1,5 @@ { "dependencies": { - "com.mlapi.contrib.transport.litenetlib": { - "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#temp/lnl-develop", - "depth": 0, - "source": "git", - "dependencies": {}, - "hash": "46fed6057bc79103e75446eca7b0f69b65ccf16e" - }, "com.unity.burst": { "version": "1.3.2", "depth": 3, @@ -187,13 +180,6 @@ "com.unity.modules.imgui": "1.0.0" } }, - "com.veriorpies.parrelsync": { - "version": "https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync", - "depth": 0, - "source": "git", - "dependencies": {}, - "hash": "bb3d5067e49e403d8b8ba15c036d313b4dd2c696" - }, "com.unity.modules.ai": { "version": "1.0.0", "depth": 0, diff --git a/testproject/ProjectSettings/EditorBuildSettings.asset b/testproject/ProjectSettings/EditorBuildSettings.asset index c21a729381..03433f2219 100644 --- a/testproject/ProjectSettings/EditorBuildSettings.asset +++ b/testproject/ProjectSettings/EditorBuildSettings.asset @@ -5,12 +5,12 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 - path: Assets/Scenes/ZooSam.unity - guid: 4683469c9a191411fbda5e426765b2fc - enabled: 1 path: Assets/MainMenu.unity guid: 21c7fd68cda9dd9488fc0cc01f885e39 + - enabled: 1 + path: Assets/Scenes/ZooSam.unity + guid: 4683469c9a191411fbda5e426765b2fc - enabled: 1 path: Assets/Samples/SamplesMenu.unity guid: 037562c9b1a469f498dfb34256ddf86f From c4923495c26be4e55bec9e95e442e29864515263 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 13 Aug 2021 15:45:05 -0400 Subject: [PATCH 17/74] # --- testproject/Assets/Scenes/ZooSam.unity | 37 ++++---------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 6225835beb..2b162bd325 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6085,7 +6085,6 @@ GameObject: - component: {fileID: 620561612} - component: {fileID: 620561611} - component: {fileID: 620561610} - - component: {fileID: 620561613} m_Layer: 0 m_Name: NetworkManager m_TagString: Untagged @@ -6175,32 +6174,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &620561613 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ChannelsCache: [] - Port: 7777 - Address: 127.0.0.1 - PingInterval: 1 - DisconnectTimeout: 5 - ReconnectDelay: 0.5 - MaxConnectAttempts: 10 - channels: [] - MessageBufferSize: 5120 - SimulatePacketLossChance: 10 - SimulateMinLatency: 70 - SimulateMaxLatency: 130 - m_MessageBuffer: [] - m_HostType: 0 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7195,8 +7168,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_MoveSpeed: 5 m_RotationSpeed: 30 - runServerOnly: 0 - runInUpdate: 1 + m_RunServerOnly: 0 + m_RunInUpdate: 0 --- !u!65 &674930890 BoxCollider: m_ObjectHideFlags: 0 @@ -7405,8 +7378,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_MoveSpeed: 5 m_RotationSpeed: 30 - runServerOnly: 1 - runInUpdate: 0 + m_RunServerOnly: 0 + m_RunInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -7419,7 +7392,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: - GlobalObjectIdHash: 3301752843 + GlobalObjectIdHash: 162145450 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 From 6b6c5cabe1d793354199ced5ce8551ac021913c1 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 13 Aug 2021 15:52:06 -0400 Subject: [PATCH 18/74] # --- .../Runtime/Core/NetworkManager.cs | 2 +- .../Runtime/Timing/NetworkTimeSystem.cs | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs index 770b97cc90..019512e85f 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs @@ -41,7 +41,7 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr private const double k_TimeSyncFrequency = 1.0d; // sync every second, TODO will be removed once timesync is done via snapshots - private const float k_DefaultBufferSizeSec = 0.05f; + private const float k_DefaultBufferSizeSec = 0.05f; // todo talk with UX/Product, find good default value for this internal MessageQueueContainer MessageQueueContainer { get; private set; } diff --git a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs index 95969b7ca9..94245f269e 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs @@ -1,4 +1,5 @@ using System; +using UnityEngine; namespace Unity.Netcode { @@ -41,7 +42,8 @@ public double ServerBufferSec { if (value < 0f || value < 1f / NetworkManager.Singleton.NetworkConfig.TickRate) { - throw new NetworkConfigurationException("Error setting buffer size, buffer time needs to be bigger than the tick length and bigger than zero"); + Debug.LogError($"Error setting buffer size to {value}, buffer time needs to be bigger than the tick length and bigger than zero. Setting value to minimum buffer size: {MinBufferSizeSec}"); + value = MinBufferSizeSec; } m_ServerBufferSec = value; @@ -66,6 +68,8 @@ public double ServerBufferSec internal double LastSyncedRttSec { get; private set; } + public static double MinBufferSizeSec => 1f / NetworkManager.Singleton.NetworkConfig.TickRate; + public NetworkTimeSystem(double localBufferSec, double serverBufferSec, double hardResetThresholdSec, double adjustmentRatio = 0.01d) { LocalBufferSec = localBufferSec; @@ -81,7 +85,7 @@ public NetworkTimeSystem(double localBufferSec, double serverBufferSec, double h /// The instance. public static NetworkTimeSystem ServerTimeSystem() { - return new NetworkTimeSystem(0, 0, double.MaxValue); + return new NetworkTimeSystem(0, MinBufferSizeSec, double.MaxValue); } /// From 890420e10356f0169ceceec7a267ab47fcc4a9b7 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 13 Aug 2021 16:24:25 -0400 Subject: [PATCH 19/74] # --- .../BufferedLinearInterpolator.cs | 37 +++++---- testproject/Assets/Materials/Black.mat | 78 +++++++++++++++++++ testproject/Assets/Materials/Black.mat.meta | 8 ++ testproject/Assets/Materials/Brown.mat | 78 +++++++++++++++++++ testproject/Assets/Materials/Brown.mat.meta | 8 ++ testproject/Assets/Materials/Green.mat | 78 +++++++++++++++++++ testproject/Assets/Materials/Green.mat.meta | 8 ++ 7 files changed, 276 insertions(+), 19 deletions(-) create mode 100644 testproject/Assets/Materials/Black.mat create mode 100644 testproject/Assets/Materials/Black.mat.meta create mode 100644 testproject/Assets/Materials/Brown.mat create mode 100644 testproject/Assets/Materials/Brown.mat.meta create mode 100644 testproject/Assets/Materials/Green.mat create mode 100644 testproject/Assets/Materials/Green.mat.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 590b91f8e4..2b63f41bd6 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -15,13 +15,12 @@ private struct BufferedItem protected virtual double ServerTimeBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering - private T m_LerpStartValue; - private T m_LerpEndValue; + private T m_InterpStartValue; + private T m_CurrentInterpValue; + private T m_InterpEndValue; - private T m_CurrentUpdatedValue; - - private NetworkTime m_CurrentTimeConsumed; - private NetworkTime m_PreviousTimeConsumed; + private NetworkTime m_EndTimeConsumed; + private NetworkTime m_StartTimeConsumed; private readonly List m_Buffer = new List(); private const int k_BufferSizeLimit = 100; @@ -49,12 +48,12 @@ private void TryConsumeFromBuffer() { if (nbConsumed == 0) { - m_PreviousTimeConsumed = m_CurrentTimeConsumed; - m_LerpStartValue = m_LerpEndValue; + m_StartTimeConsumed = m_EndTimeConsumed; + m_InterpStartValue = m_InterpEndValue; } - m_LerpEndValue = bufferedValue.item; - m_CurrentTimeConsumed = bufferedValue.timeSent; + m_InterpEndValue = bufferedValue.item; + m_EndTimeConsumed = bufferedValue.timeSent; m_Buffer.RemoveAt(i); nbConsumed++; } @@ -63,7 +62,7 @@ private void TryConsumeFromBuffer() public T Update(float deltaTime) { - if (!NetworkManager.Singleton.IsConnectedClient) return default; + if (!NetworkManager.Singleton.IsConnectedClient && !NetworkManager.Singleton.IsListening) return default; TryConsumeFromBuffer(); @@ -72,14 +71,14 @@ public T Update(float deltaTime) // | | | | // A render B Server - var timeB = m_CurrentTimeConsumed; - var timeA = m_PreviousTimeConsumed; + var timeB = m_EndTimeConsumed; + var timeA = m_StartTimeConsumed; double range = timeB.Time - timeA.Time; var renderTime = ServerTimeBeingHandledForBuffering - range; float t = (float)((renderTime - timeA.Time) / range); - m_CurrentUpdatedValue = Interpolate(m_LerpStartValue, m_LerpEndValue, t); + m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); - return m_CurrentUpdatedValue; + return m_CurrentInterpValue; } public void FixedUpdate(float fixedDeltaTime) @@ -100,14 +99,14 @@ public void AddMeasurement(T newMeasurement, NetworkTime sentTime) public T GetInterpolatedValue() { - return m_CurrentUpdatedValue; + return m_CurrentInterpValue; } public void Reset(T value, NetworkTime sentTime) { - m_CurrentUpdatedValue = value; - m_LerpEndValue = value; - m_LerpStartValue = value; + m_CurrentInterpValue = value; + m_InterpEndValue = value; + m_InterpStartValue = value; } public void OnDestroy() diff --git a/testproject/Assets/Materials/Black.mat b/testproject/Assets/Materials/Black.mat new file mode 100644 index 0000000000..73828acf95 --- /dev/null +++ b/testproject/Assets/Materials/Black.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Black + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.028301895, g: 0.028301895, b: 0.028301895, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/testproject/Assets/Materials/Black.mat.meta b/testproject/Assets/Materials/Black.mat.meta new file mode 100644 index 0000000000..29f556f8ae --- /dev/null +++ b/testproject/Assets/Materials/Black.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d255f11ce58034f15b98a74b2dce910d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Materials/Brown.mat b/testproject/Assets/Materials/Brown.mat new file mode 100644 index 0000000000..fdcdd5362c --- /dev/null +++ b/testproject/Assets/Materials/Brown.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Brown + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.6431373, g: 0.43448904, b: 0.2980392, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/testproject/Assets/Materials/Brown.mat.meta b/testproject/Assets/Materials/Brown.mat.meta new file mode 100644 index 0000000000..e0a0fe15ac --- /dev/null +++ b/testproject/Assets/Materials/Brown.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d2f6bf650dfcc483794cdacf53f9fe2b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Materials/Green.mat b/testproject/Assets/Materials/Green.mat new file mode 100644 index 0000000000..fc1ea4585a --- /dev/null +++ b/testproject/Assets/Materials/Green.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Green + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.32823423, g: 0.6415094, b: 0.29957277, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/testproject/Assets/Materials/Green.mat.meta b/testproject/Assets/Materials/Green.mat.meta new file mode 100644 index 0000000000..2b88172537 --- /dev/null +++ b/testproject/Assets/Materials/Green.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16358fcb4e0c94cc8b980fbb17259843 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: From a2b885f9086c687ac5a53fde8d5aaf9e32498b24 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 13 Aug 2021 20:29:45 -0400 Subject: [PATCH 20/74] adding interface for testing --- .../BufferedLinearInterpolator.cs | 56 ++++++++++++------- .../Prototyping/Interpolator/IInterpolator.cs | 1 - .../Interpolator/NoInterpolationFactory.cs | 5 -- .../Interpolator/SimpleInterpolator.cs | 5 -- .../Prototyping/NetworkTransform.cs | 6 +- .../com.unity.netcode.editortests.asmdef | 3 +- testproject/Assets/Scenes/ZooSam.unity | 28 +++++++++- testproject/Assets/Scripts/MoveInCircle.cs | 6 ++ 8 files changed, 72 insertions(+), 38 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 2b63f41bd6..98629297d1 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using NUnit.Framework; using UnityEngine; namespace Unity.Netcode @@ -7,13 +8,26 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : { // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code + public interface IServerTime + { + public double Time { get; } + public int TickRate { get; } + } + + private class ServerTime : IServerTime + { + public double Time => NetworkManager.Singleton.ServerTime.Time; + public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; + } + private struct BufferedItem { public T item; public NetworkTime timeSent; } - protected virtual double ServerTimeBeingHandledForBuffering => NetworkManager.Singleton.ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering + internal IServerTime m_ServerTime = new ServerTime(); + protected virtual double ServerTimeBeingHandledForBuffering => m_ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -25,6 +39,8 @@ private struct BufferedItem private readonly List m_Buffer = new List(); private const int k_BufferSizeLimit = 100; + private int m_LifetimeConsumedCount; + public void Start() { } @@ -44,8 +60,9 @@ private void TryConsumeFromBuffer() for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; - if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering) + if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && renderTime >= m_EndTimeConsumed.Time) { + if (nbConsumed == 0) { m_StartTimeConsumed = m_EndTimeConsumed; @@ -56,14 +73,16 @@ private void TryConsumeFromBuffer() m_EndTimeConsumed = bufferedValue.timeSent; m_Buffer.RemoveAt(i); nbConsumed++; + m_LifetimeConsumedCount++; } } } + private double range => m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; + private double renderTime => ServerTimeBeingHandledForBuffering - range; + public T Update(float deltaTime) { - if (!NetworkManager.Singleton.IsConnectedClient && !NetworkManager.Singleton.IsListening) return default; - TryConsumeFromBuffer(); // Interpolation example to understand the math below @@ -71,12 +90,15 @@ public T Update(float deltaTime) // | | | | // A render B Server - var timeB = m_EndTimeConsumed; - var timeA = m_StartTimeConsumed; - double range = timeB.Time - timeA.Time; - var renderTime = ServerTimeBeingHandledForBuffering - range; - float t = (float)((renderTime - timeA.Time) / range); - m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); + if (m_LifetimeConsumedCount >= 2) // shouldn't interpolate between default value and first measurement, should only interpolate between real measurements + { + // var timeB = m_EndTimeConsumed; + // var timeA = m_StartTimeConsumed; + // double range = timeB.Time - timeA.Time; + float t = (float) ((renderTime - m_StartTimeConsumed.Time) / range); + Debug.Assert(t >= 0, "t must be bigger or equal than 0"); + m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); + } return m_CurrentInterpValue; } @@ -93,8 +115,11 @@ public void AddMeasurement(T newMeasurement, NetworkTime sentTime) m_Buffer.RemoveAt(m_Buffer.Count - 1); } - m_Buffer.Add(new BufferedItem {item = newMeasurement, timeSent = sentTime}); - m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); + if (sentTime.Time > m_EndTimeConsumed.Time || m_LifetimeConsumedCount == 0) // treat only if value is newer than the one being interpolated to right now + { + m_Buffer.Add(new BufferedItem {item = newMeasurement, timeSent = sentTime}); + m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); + } } public T GetInterpolatedValue() @@ -102,13 +127,6 @@ public T GetInterpolatedValue() return m_CurrentInterpValue; } - public void Reset(T value, NetworkTime sentTime) - { - m_CurrentInterpValue = value; - m_InterpEndValue = value; - m_InterpStartValue = value; - } - public void OnDestroy() { } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs index eaccaa52b6..5d1022287b 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs @@ -11,7 +11,6 @@ public interface IInterpolator public void FixedUpdate(float tickDeltaTime); public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); - public void Reset(T value, NetworkTime sentTime); public void OnDestroy(); } } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs index b15a338346..5881d00e52 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs @@ -40,11 +40,6 @@ public T GetInterpolatedValue() return m_Current; } - public void Reset(T value, NetworkTime sentTick) - { - m_Current = value; - } - public void OnDestroy() { throw new System.NotImplementedException(); diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs index 5e5b8768a5..b82c1a17c6 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs @@ -47,11 +47,6 @@ public Vector3 GetInterpolatedValue() return m_UpdatedVector; } - public void Reset(Vector3 value, NetworkTime sentTick) - { - m_UpdatedVector = value; - } - public void OnDestroy() { throw new NotImplementedException(); diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index f019c14db1..3395a44aa5 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -301,9 +301,6 @@ public override void OnNetworkSpawn() m_PrevNetworkState = null; var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTime); - PositionInterpolator.Reset(TransformPosition, currentTime); - RotationInterpolator.Reset(TransformRotation, currentTime); - ScaleInterpolator.Reset(TransformScale, currentTime); PositionInterpolator.OnNetworkSpawn(); RotationInterpolator.OnNetworkSpawn(); @@ -355,8 +352,7 @@ private void Update() SendNetworkStateToGhosts(NetworkManager.LocalTime.Time); } } - - if (!CanUpdateTransform) + else if (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening) { PositionInterpolator.Update(Time.deltaTime); RotationInterpolator.Update(Time.deltaTime); diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/com.unity.netcode.editortests.asmdef b/com.unity.multiplayer.mlapi/Tests/Editor/com.unity.netcode.editortests.asmdef index 35dcb1ce8d..42ade9ce52 100644 --- a/com.unity.multiplayer.mlapi/Tests/Editor/com.unity.netcode.editortests.asmdef +++ b/com.unity.multiplayer.mlapi/Tests/Editor/com.unity.netcode.editortests.asmdef @@ -3,7 +3,8 @@ "rootNamespace": "Unity.Netcode.EditorTests", "references": [ "Unity.Netcode.Runtime", - "Unity.Netcode.Editor" + "Unity.Netcode.Editor", + "Unity.Netcode.Prototyping" ], "optionalUnityReferences": [ "TestAssemblies" diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 2b162bd325..4232f71ae3 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6085,6 +6085,7 @@ GameObject: - component: {fileID: 620561612} - component: {fileID: 620561611} - component: {fileID: 620561610} + - component: {fileID: 620561613} m_Layer: 0 m_Name: NetworkManager m_TagString: Untagged @@ -6134,7 +6135,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561610} + NetworkTransport: {fileID: 620561613} RegisteredScenes: - SampleScene - ZooSam @@ -6174,6 +6175,29 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &620561613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620561609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} + m_Name: + m_EditorClassIdentifier: + Port: 7777 + Address: 127.0.0.1 + PingInterval: 1 + DisconnectTimeout: 5 + ReconnectDelay: 0.5 + MaxConnectAttempts: 10 + channels: [] + MessageBufferSize: 5120 + SimulatePacketLossChance: 10 + SimulateMinLatency: 70 + SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7392,7 +7416,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: - GlobalObjectIdHash: 162145450 + GlobalObjectIdHash: 3301752843 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index e37f898d52..6f809325da 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -18,6 +18,12 @@ public class MoveInCircle : NetworkBehaviour private Vector3 m_DebugOldPosition; private float m_DebugLastTime; + public override void OnNetworkSpawn() + { + base.OnNetworkSpawn(); + NetworkManager.Singleton.NetworkTimeSystem.ServerBufferSec = 0.15f; + } + void FixedUpdate() { if (m_RunInUpdate) return; From d5936cc6eec62f6eeb76dd1211b4f625ea2bf929 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Sat, 14 Aug 2021 19:19:09 -0400 Subject: [PATCH 21/74] smooth --- .../BufferedLinearInterpolator.cs | 21 ++++++++++++------- testproject/Assets/Scenes/ZooSam.unity | 8 +++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 98629297d1..93007c4562 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -8,15 +8,17 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : { // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code - public interface IServerTime + public interface IInterpolatorTime { - public double Time { get; } + public double ServerTime { get; } + public double LocalTime { get; } public int TickRate { get; } } - private class ServerTime : IServerTime + private class InterpolatorTime : IInterpolatorTime { - public double Time => NetworkManager.Singleton.ServerTime.Time; + public double ServerTime => NetworkManager.Singleton.ServerTime.Time; + public double LocalTime => NetworkManager.Singleton.LocalTime.Time; public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } @@ -26,8 +28,8 @@ private struct BufferedItem public NetworkTime timeSent; } - internal IServerTime m_ServerTime = new ServerTime(); - protected virtual double ServerTimeBeingHandledForBuffering => m_ServerTime.Time; // override this if you want configurable buffering, right now using ServerTick's own global buffering + internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); + protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.ServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -79,7 +81,12 @@ private void TryConsumeFromBuffer() } private double range => m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; - private double renderTime => ServerTimeBeingHandledForBuffering - range; + private double renderTime => ServerTimeBeingHandledForBuffering - 1f / interpolatorTime.TickRate; //ServerTimeBeingHandledForBuffering - range; + // private double renderTime => ServerTimeBeingHandledForBuffering - range; + + // buffer=4 + // t=100 101 101.2 101.5 105.2 + // A B S C RS public T Update(float deltaTime) { diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 4232f71ae3..bf271492e6 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6195,9 +6195,9 @@ MonoBehaviour: MaxConnectAttempts: 10 channels: [] MessageBufferSize: 5120 - SimulatePacketLossChance: 10 - SimulateMinLatency: 70 - SimulateMaxLatency: 130 + SimulatePacketLossChance: 0 + SimulateMinLatency: 95 + SimulateMaxLatency: 105 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7403,7 +7403,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 m_RunServerOnly: 0 - m_RunInUpdate: 0 + m_RunInUpdate: 1 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 From 3817962e7fce8e5a74a9e864bc7d251767be5c38 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 14:16:09 -0400 Subject: [PATCH 22/74] Adding basis for tests --- .../BufferedLinearInterpolator.cs | 11 +- .../Prototyping/NetworkTransform.cs | 5 +- .../Tests/Editor/InterpolatorTests.cs | 184 ++++++++++++++++++ .../Tests/Editor/InterpolatorTests.cs.meta | 3 + testproject/Assets/Scenes/ZooSam.unity | 4 +- 5 files changed, 200 insertions(+), 7 deletions(-) create mode 100644 com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs create mode 100644 com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 93007c4562..d09d37bf90 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -4,20 +4,25 @@ namespace Unity.Netcode { + /// + /// Solves for jittered incoming values + /// Doesn't solve for message loss + /// + /// public abstract class BufferedLinearInterpolator : IInterpolator where T : struct { // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code public interface IInterpolatorTime { - public double ServerTime { get; } + public double BufferedServerTime { get; } public double LocalTime { get; } public int TickRate { get; } } private class InterpolatorTime : IInterpolatorTime { - public double ServerTime => NetworkManager.Singleton.ServerTime.Time; + public double BufferedServerTime => NetworkManager.Singleton.ServerTime.Time; public double LocalTime => NetworkManager.Singleton.LocalTime.Time; public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } @@ -29,7 +34,7 @@ private struct BufferedItem } internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); - protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.ServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering + protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering private T m_InterpStartValue; private T m_CurrentInterpValue; diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 3395a44aa5..2be4a5235c 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -179,7 +179,7 @@ private bool IsAuthoritativeTransformDirty() return isDirty; } - private void SendNetworkStateToGhosts(double dirtyTime) + private void SetNetworkStateDirtyToGhosts(double dirtyTime) { m_NetworkState.Value.InLocalSpace = InLocalSpace; m_NetworkState.Value.SentTime = dirtyTime; @@ -349,7 +349,8 @@ private void Update() if (IsAuthoritativeTransformDirty()) { // check for time there was a change to the transform - SendNetworkStateToGhosts(NetworkManager.LocalTime.Time); + // this needs to be done in Update to catch that time change as soon as it happens. + SetNetworkStateDirtyToGhosts(NetworkManager.LocalTime.Time); } } else if (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening) diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs new file mode 100644 index 0000000000..fd807f2ea7 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs @@ -0,0 +1,184 @@ +using NUnit.Framework; + +namespace Unity.Netcode.EditorTests +{ + public class BufferedInterpolatorTests + { + private const float k_Precision = 0.00000001f; + + private class MockInterpolatorTime : BufferedLinearInterpolator.IInterpolatorTime + { + public double BufferedServerTime { get; set; } + public double LocalTime { get; } + public int TickRate { get; set; } + + public MockInterpolatorTime(double serverTime, int tickRate) + { + BufferedServerTime = serverTime; + TickRate = tickRate; + LocalTime = serverTime; // todo + } + } + + /* + * TODO + * test normal interpolation + * test with some jitter + * test with high jitter + * test with too high jitter + * test with packet loss + * test with out of order because of network measurements + * test with negative time should fail + * check https://github.com/vis2k/Mirror/blob/02cc3de7b8889f477118e20379b584eaf8bd43b6/Assets/Mirror/Tests/Editor/SnapshotInterpolationTests.cs + * for examples of tests + * Test every single public API + */ + + [Test] + public void NormalUsage() + { + // Testing float instead of Vector3. The only difference with Vector3 is the lerp method used. + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); + + interpolator.AddMeasurement(0f, new NetworkTime(mockTickRate, 1.0)); + interpolator.AddMeasurement(1f, new NetworkTime(mockTickRate, 2.0)); + + // too small update, nothing happens, doesn't consume from buffer yet + float deltaTime = 0.01f; + mockBufferedTime.BufferedServerTime = 0.01f; + interpolator.Update(deltaTime); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); + + // consume first measurement, still can't interpolate with just one tick consumed + mockBufferedTime.BufferedServerTime = 1.01f; + interpolator.Update(1.0f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); + + // consume second measurement, start to interpolate + mockBufferedTime.BufferedServerTime = 2.01f; + var valueFromUpdate = interpolator.Update(1.0f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0.01f).Within(k_Precision)); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0.01f).Within(k_Precision)); // test a second time, to make sure the get doesn't update the value + Assert.That(valueFromUpdate, Is.EqualTo(interpolator.GetInterpolatedValue()).Within(k_Precision)); + + // continue interpolation + mockBufferedTime.BufferedServerTime = 2.5f; + interpolator.Update(2.5f - 2.01f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0.5f).Within(k_Precision)); + // check when reaching end + mockBufferedTime.BufferedServerTime = 3f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1f).Within(k_Precision)); + } + + /// + /// Out of order or 'ACB' problem + /// Given two measurements have already arrived A and C, if a new measurement B arrives, the interpolation shouldn't go to B, but continue + /// to C. + /// Adding B should be ignored if interpolation is already interpolating between A and C + /// + [Test] + public void OutOfOrderShouldStillWork() + { + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + interpolator.AddMeasurement(0, T(0f)); + interpolator.AddMeasurement(2, T(2f)); + + mockBufferedTime.BufferedServerTime = 1.5; + interpolator.Update(1.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f).Within(k_Precision)); + + mockBufferedTime.BufferedServerTime = 2f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f).Within(k_Precision)); + + mockBufferedTime.BufferedServerTime = 2.5; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0.5f).Within(k_Precision)); + + mockBufferedTime.BufferedServerTime = 3.5; + interpolator.Update(1f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1.5f).Within(k_Precision)); + + // makes sure that interpolation still continues in right direction + interpolator.AddMeasurement(1, T(1f)); + mockBufferedTime.BufferedServerTime = 4; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f).Within(k_Precision)); + } + + [Test] + public void MessageLoss() + { + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + interpolator.AddMeasurement(1f, T(1f)); + interpolator.AddMeasurement(2f, T(2f)); + // message time=3 was lost + interpolator.AddMeasurement(4f, T(4f)); + interpolator.AddMeasurement(5f, T(5f)); + + mockBufferedTime.BufferedServerTime = 2f; + interpolator.Update(2f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1f)); + + mockBufferedTime.BufferedServerTime = 2.5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1.5f)); + + mockBufferedTime.BufferedServerTime = 3f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f)); + + // pausing until buffer reaches next value in buffer, should have been 2.5f, pausing to last value 2f + mockBufferedTime.BufferedServerTime = 3.5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f)); + + // next value skips to where it was supposed to be once buffer time is showing the next value + mockBufferedTime.BufferedServerTime = 4f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(3f)); + + // interpolation continues as expected + mockBufferedTime.BufferedServerTime = 4.5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(3.5f)); + + mockBufferedTime.BufferedServerTime = 5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(4f)); + } + } +} \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs.meta b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs.meta new file mode 100644 index 0000000000..57c242b869 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab8e37e768b14b4fa3b7dfc8948813a5 +timeCreated: 1628885202 \ No newline at end of file diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index bf271492e6..60d8a94c3e 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6196,8 +6196,8 @@ MonoBehaviour: channels: [] MessageBufferSize: 5120 SimulatePacketLossChance: 0 - SimulateMinLatency: 95 - SimulateMaxLatency: 105 + SimulateMinLatency: 70 + SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 From 7ca5cedcc0ab88438ce512da35d39f636acfe993 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 14:24:29 -0400 Subject: [PATCH 23/74] # --- .../BufferedLinearInterpolator.cs | 21 ++++++------------- ...erpolationFactory.cs => NoInterpolator.cs} | 2 +- ...Factory.cs.meta => NoInterpolator.cs.meta} | 2 +- 3 files changed, 8 insertions(+), 17 deletions(-) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{NoInterpolationFactory.cs => NoInterpolator.cs} (93%) rename com.unity.multiplayer.mlapi/Prototyping/Interpolator/{NoInterpolationFactory.cs.meta => NoInterpolator.cs.meta} (83%) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index d09d37bf90..b755ecd4b0 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -13,6 +13,7 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : { // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code + // interface for mock testing, abstracting away external systems public interface IInterpolatorTime { public double BufferedServerTime { get; } @@ -35,6 +36,7 @@ private struct BufferedItem internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering + private double RenderTime => ServerTimeBeingHandledForBuffering - 1f / interpolatorTime.TickRate; private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -63,13 +65,12 @@ public void OnNetworkSpawn() private void TryConsumeFromBuffer() { int nbConsumed = 0; - // sorted so older (smaller) time values are at the end. + // buffer is sorted so older (smaller) time values are at the end. for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; - if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && renderTime >= m_EndTimeConsumed.Time) + if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && RenderTime >= m_EndTimeConsumed.Time) { - if (nbConsumed == 0) { m_StartTimeConsumed = m_EndTimeConsumed; @@ -85,14 +86,6 @@ private void TryConsumeFromBuffer() } } - private double range => m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; - private double renderTime => ServerTimeBeingHandledForBuffering - 1f / interpolatorTime.TickRate; //ServerTimeBeingHandledForBuffering - range; - // private double renderTime => ServerTimeBeingHandledForBuffering - range; - - // buffer=4 - // t=100 101 101.2 101.5 105.2 - // A B S C RS - public T Update(float deltaTime) { TryConsumeFromBuffer(); @@ -104,10 +97,8 @@ public T Update(float deltaTime) if (m_LifetimeConsumedCount >= 2) // shouldn't interpolate between default value and first measurement, should only interpolate between real measurements { - // var timeB = m_EndTimeConsumed; - // var timeA = m_StartTimeConsumed; - // double range = timeB.Time - timeA.Time; - float t = (float) ((renderTime - m_StartTimeConsumed.Time) / range); + double range = m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; + float t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); Debug.Assert(t >= 0, "t must be bigger or equal than 0"); m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); } diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs similarity index 93% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs index 5881d00e52..f6b4fd2f08 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs @@ -1,6 +1,6 @@ namespace Unity.Netcode { - public class NoInterpolation : IInterpolator + public class NoInterpolator : IInterpolator { private T m_Current; diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs.meta similarity index 83% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta rename to com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs.meta index 46b8fdc1d8..b5c15e25de 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolationFactory.cs.meta +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6fd1b15ec60324368a3c724e031254f4 +guid: 9f4a8ff3425ce44f1abd995d1a4f88cb MonoImporter: externalObjects: {} serializedVersion: 2 From e9ee9fd41156741fa8ae87fd53703cf8aef601ca Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 14:27:38 -0400 Subject: [PATCH 24/74] # --- .../Prototyping/Interpolator/NoInterpolator.cs | 1 - .../Prototyping/Interpolator/SimpleInterpolator.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs index f6b4fd2f08..4ed406c55e 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs @@ -42,7 +42,6 @@ public T GetInterpolatedValue() public void OnDestroy() { - throw new System.NotImplementedException(); } } } \ No newline at end of file diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs index b82c1a17c6..6872c116d5 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs @@ -49,7 +49,6 @@ public Vector3 GetInterpolatedValue() public void OnDestroy() { - throw new NotImplementedException(); } } } \ No newline at end of file From c3cc8b9ff60fe09f95092628dc70493b893f591d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 15:51:47 -0400 Subject: [PATCH 25/74] # --- .../BufferedLinearInterpolator.cs | 26 +++- .../Tests/Editor/InterpolatorTests.cs | 117 +++++++++++++++++- 2 files changed, 131 insertions(+), 12 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index b755ecd4b0..55f620914e 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -64,23 +64,28 @@ public void OnNetworkSpawn() private void TryConsumeFromBuffer() { - int nbConsumed = 0; + int consumedCount = 0; // buffer is sorted so older (smaller) time values are at the end. for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && RenderTime >= m_EndTimeConsumed.Time) { - if (nbConsumed == 0) + if (m_LifetimeConsumedCount == 0) + { + m_StartTimeConsumed = bufferedValue.timeSent; + m_InterpStartValue = bufferedValue.item; + } + else if (consumedCount == 0) { m_StartTimeConsumed = m_EndTimeConsumed; m_InterpStartValue = m_InterpEndValue; } - m_InterpEndValue = bufferedValue.item; m_EndTimeConsumed = bufferedValue.timeSent; + m_InterpEndValue = bufferedValue.item; m_Buffer.RemoveAt(i); - nbConsumed++; + consumedCount++; m_LifetimeConsumedCount++; } } @@ -95,10 +100,19 @@ public T Update(float deltaTime) // | | | | // A render B Server - if (m_LifetimeConsumedCount >= 2) // shouldn't interpolate between default value and first measurement, should only interpolate between real measurements + if (m_LifetimeConsumedCount >= 1) // shouldn't interpolate between default values, let's wait to receive data first, should only interpolate between real measurements { double range = m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; - float t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); + float t; + if (range == 0) + { + t = 1; + } + else + { + t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); + } + Debug.Assert(t >= 0, "t must be bigger or equal than 0"); m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); } diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs index fd807f2ea7..6302368a87 100644 --- a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs @@ -111,19 +111,16 @@ NetworkTime T(float time) mockBufferedTime.BufferedServerTime = 2f; interpolator.Update(0.5f); - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f).Within(k_Precision)); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1f).Within(k_Precision)); mockBufferedTime.BufferedServerTime = 2.5; interpolator.Update(0.5f); - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0.5f).Within(k_Precision)); - - mockBufferedTime.BufferedServerTime = 3.5; - interpolator.Update(1f); Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(1.5f).Within(k_Precision)); // makes sure that interpolation still continues in right direction interpolator.AddMeasurement(1, T(1f)); - mockBufferedTime.BufferedServerTime = 4; + + mockBufferedTime.BufferedServerTime = 3f; interpolator.Update(0.5f); Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f).Within(k_Precision)); } @@ -180,5 +177,113 @@ NetworkTime T(float time) interpolator.Update(0.5f); Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(4f)); } + + [Test] + public void AddFirstMeasurement() + { + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + interpolator.AddMeasurement(2f, T(1f)); + interpolator.AddMeasurement(3f, T(2f)); + mockBufferedTime.BufferedServerTime = 1f; + var interpolatedValue = interpolator.Update(1f); + // when consuming only one measurement and it's the first one consumed, teleport to it + Assert.That(interpolatedValue, Is.EqualTo(2f)); + + // then interpolation should work as usual + mockBufferedTime.BufferedServerTime = 2f; + interpolatedValue = interpolator.Update(1f); + Assert.That(interpolatedValue, Is.EqualTo(2f)); + + mockBufferedTime.BufferedServerTime = 2.5f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(2.5f)); + + mockBufferedTime.BufferedServerTime = 3f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(3f)); + } + + [Test] + public void JumpToEachValueIfDeltaTimeTooBig() + { + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + interpolator.AddMeasurement(2f, T(1f)); + interpolator.AddMeasurement(3f, T(2f)); + mockBufferedTime.BufferedServerTime = 1f; + var interpolatedValue = interpolator.Update(1f); + Assert.That(interpolatedValue, Is.EqualTo(2f)); + + // big deltaTime, jumping to latest value + mockBufferedTime.BufferedServerTime = 10f; + interpolatedValue = interpolator.Update(8f); + Assert.That(interpolatedValue, Is.EqualTo(3)); + } + + [Test] + public void JumpToLastValueFromStart() + { + const int mockTickRate = 1; + float deltaTick = 1f / mockTickRate; + + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + NetworkTime T(float time) + { + return new NetworkTime(mockTickRate, timeSec: time); + } + + interpolator.AddMeasurement(1f, T(1f)); + interpolator.AddMeasurement(2f, T(2f)); + interpolator.AddMeasurement(3f, T(3f)); + + mockBufferedTime.BufferedServerTime = 10f; + var interpolatedValue = interpolator.Update(10f); + Assert.That(interpolatedValue, Is.EqualTo(3f)); + + // interpolation continues as normal + interpolator.AddMeasurement(11f, T(11f)); + mockBufferedTime.BufferedServerTime = 10.5f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(3f)); + mockBufferedTime.BufferedServerTime = 11f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(10f)); + mockBufferedTime.BufferedServerTime = 11.5f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(10.5f)); + mockBufferedTime.BufferedServerTime = 12f; + interpolatedValue = interpolator.Update(0.5f); + Assert.That(interpolatedValue, Is.EqualTo(11f)); + } + + [Test] + public void TestBufferSizeLimit() + { + + } } } \ No newline at end of file From e2b85c18379ff6a5726868705af23a9a7839c5cc Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 15:56:18 -0400 Subject: [PATCH 26/74] cleanup --- .../Tests/Editor/InterpolatorTests.cs | 76 ++++++------------- 1 file changed, 23 insertions(+), 53 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs index 6302368a87..31cc1398c5 100644 --- a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs @@ -20,6 +20,12 @@ public MockInterpolatorTime(double serverTime, int tickRate) } } + const int k_MockTickRate = 1; + NetworkTime T(float time, int tickRate = k_MockTickRate) + { + return new NetworkTime(tickRate, timeSec: time); + } + /* * TODO * test normal interpolation @@ -38,21 +44,15 @@ public MockInterpolatorTime(double serverTime, int tickRate) public void NormalUsage() { // Testing float instead of Vector3. The only difference with Vector3 is the lerp method used. - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); - interpolator.AddMeasurement(0f, new NetworkTime(mockTickRate, 1.0)); - interpolator.AddMeasurement(1f, new NetworkTime(mockTickRate, 2.0)); + interpolator.AddMeasurement(0f, T(1.0f)); + interpolator.AddMeasurement(1f, T(2.0f)); // too small update, nothing happens, doesn't consume from buffer yet float deltaTime = 0.01f; @@ -91,15 +91,8 @@ NetworkTime T(float time) [Test] public void OutOfOrderShouldStillWork() { - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } - var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; interpolator.AddMeasurement(0, T(0f)); @@ -128,18 +121,10 @@ NetworkTime T(float time) [Test] public void MessageLoss() { - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } - interpolator.AddMeasurement(1f, T(1f)); interpolator.AddMeasurement(2f, T(2f)); // message time=3 was lost @@ -181,18 +166,10 @@ NetworkTime T(float time) [Test] public void AddFirstMeasurement() { - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } - interpolator.AddMeasurement(2f, T(1f)); interpolator.AddMeasurement(3f, T(2f)); mockBufferedTime.BufferedServerTime = 1f; @@ -217,18 +194,10 @@ NetworkTime T(float time) [Test] public void JumpToEachValueIfDeltaTimeTooBig() { - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } - interpolator.AddMeasurement(2f, T(1f)); interpolator.AddMeasurement(3f, T(2f)); mockBufferedTime.BufferedServerTime = 1f; @@ -244,18 +213,10 @@ NetworkTime T(float time) [Test] public void JumpToLastValueFromStart() { - const int mockTickRate = 1; - float deltaTick = 1f / mockTickRate; - var interpolator = new BufferedLinearInterpolatorFloat(); - var mockBufferedTime = new MockInterpolatorTime(0, mockTickRate); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; - NetworkTime T(float time) - { - return new NetworkTime(mockTickRate, timeSec: time); - } - interpolator.AddMeasurement(1f, T(1f)); interpolator.AddMeasurement(2f, T(2f)); interpolator.AddMeasurement(3f, T(3f)); @@ -283,7 +244,16 @@ NetworkTime T(float time) [Test] public void TestBufferSizeLimit() { + float deltaTick = 1f / k_MockTickRate; + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + for (int i = 0; i < 101; i++) + { + interpolator.AddMeasurement(i, T(i)); + } } } } \ No newline at end of file From 9fb4e302f7228e65af2a4b38bc4262db20c60ca2 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 16:40:37 -0400 Subject: [PATCH 27/74] # --- .../BufferedLinearInterpolator.cs | 9 ++++- .../Tests/Editor/InterpolatorTests.cs | 36 +++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 55f620914e..f5f1f89542 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using NUnit.Framework; using UnityEngine; @@ -69,6 +70,7 @@ private void TryConsumeFromBuffer() for (int i = m_Buffer.Count - 1; i >= 0; i--) { var bufferedValue = m_Buffer[i]; + // check render time so we only try to consume one value at once if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && RenderTime >= m_EndTimeConsumed.Time) { if (m_LifetimeConsumedCount == 0) @@ -95,6 +97,11 @@ public T Update(float deltaTime) { TryConsumeFromBuffer(); + if (m_LifetimeConsumedCount == 0 && m_Buffer.Count == 0) + { + throw new InvalidOperationException("trying to update interpolator when no data has been added to it yet"); + } + // Interpolation example to understand the math below // 4 4.5 6 6.5 // | | | | @@ -126,7 +133,7 @@ public void FixedUpdate(float fixedDeltaTime) public void AddMeasurement(T newMeasurement, NetworkTime sentTime) { - if (m_Buffer.Count > k_BufferSizeLimit) + if (m_Buffer.Count >= k_BufferSizeLimit) { Debug.LogWarning("Going over buffer size limit while adding new interpolation values, interpolation buffering isn't consuming fast enough, removing oldest value now."); m_Buffer.RemoveAt(m_Buffer.Count - 1); diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs index 31cc1398c5..1247c859f8 100644 --- a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs @@ -1,3 +1,4 @@ +using System; using NUnit.Framework; namespace Unity.Netcode.EditorTests @@ -244,16 +245,45 @@ public void JumpToLastValueFromStart() [Test] public void TestBufferSizeLimit() { - float deltaTick = 1f / k_MockTickRate; - var interpolator = new BufferedLinearInterpolatorFloat(); var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; - for (int i = 0; i < 101; i++) + // set first value + interpolator.AddMeasurement(-1f, T(1f)); + mockBufferedTime.BufferedServerTime = 1f; + interpolator.Update(1f); + + // max + 1 + interpolator.AddMeasurement(2, T(2)); // this value should disappear + for (int i = 3; i < 103; i++) { interpolator.AddMeasurement(i, T(i)); } + + // make sure the first value isn't there anymore and that we're already using the second value + // the following shouldn't happen in real life, since the server time should catchup to the real time and not stay behind like this + mockBufferedTime.BufferedServerTime = 2f; + // if there was no buffer limit, we'd still be consuming the first "1" value + var interpolatedValue = interpolator.Update(1f); + // but now, we're still at the initial -1f + Assert.That(interpolatedValue, Is.EqualTo(-1f)); + + // interpolation continues as expected, interpolating between -1 and 3 + mockBufferedTime.BufferedServerTime = 3f; + interpolatedValue = interpolator.Update(1f); + Assert.That(interpolatedValue, Is.EqualTo(1f)); + } + + [Test] + public void TestUpdatingInterpolatorWithNoData() + { + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + // invalid case, this is undefined behaviour + Assert.Throws(() => interpolator.Update(1f)); } } } \ No newline at end of file From 796ab67004955973f64baf8a9cf135707c871d99 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 16:48:25 -0400 Subject: [PATCH 28/74] # --- .../Tests/Editor/InterpolatorTests.cs | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs index 1247c859f8..ea18a14f19 100644 --- a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs @@ -33,8 +33,6 @@ NetworkTime T(float time, int tickRate = k_MockTickRate) * test with some jitter * test with high jitter * test with too high jitter - * test with packet loss - * test with out of order because of network measurements * test with negative time should fail * check https://github.com/vis2k/Mirror/blob/02cc3de7b8889f477118e20379b584eaf8bd43b6/Assets/Mirror/Tests/Editor/SnapshotInterpolationTests.cs * for examples of tests @@ -285,5 +283,33 @@ public void TestUpdatingInterpolatorWithNoData() // invalid case, this is undefined behaviour Assert.Throws(() => interpolator.Update(1f)); } + + [Test] + public void TestDuplicatedValues() + { + var interpolator = new BufferedLinearInterpolatorFloat(); + var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); + interpolator.interpolatorTime = mockBufferedTime; + + interpolator.AddMeasurement(1f, T(1f)); + interpolator.AddMeasurement(2f, T(2f)); + interpolator.AddMeasurement(2f, T(2f)); + + mockBufferedTime.BufferedServerTime = 2f; + var interp = interpolator.Update(1f); + Assert.That(interp, Is.EqualTo(1f)); + mockBufferedTime.BufferedServerTime = 2.5f; + interp = interpolator.Update(0.5f); + Assert.That(interp, Is.EqualTo(1.5f)); + mockBufferedTime.BufferedServerTime = 3f; + interp = interpolator.Update(0.5f); + Assert.That(interp, Is.EqualTo(2f)); + mockBufferedTime.BufferedServerTime = 3.5f; + interp = interpolator.Update(0.5f); + Assert.That(interp, Is.EqualTo(2f)); + mockBufferedTime.BufferedServerTime = 4f; + interp = interpolator.Update(0.5f); + Assert.That(interp, Is.EqualTo(2f)); + } } } \ No newline at end of file From ebdc1fdca874d864e892c11207c5dabc7da884cf Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 17 Aug 2021 18:02:47 -0400 Subject: [PATCH 29/74] # --- .../Interpolator/BufferedLinearInterpolator.cs | 11 ++++++++++- .../Prototyping/NetworkTransform.cs | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs index f5f1f89542..2309792dbb 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using NUnit.Framework; using UnityEngine; namespace Unity.Netcode @@ -164,6 +163,11 @@ public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) { return Vector3.Lerp(start, end, time); } + + public BufferedLinearInterpolatorVector3(Vector3 startValue) + { + AddMeasurement(startValue, new NetworkTime(0, 0.0)); + } } public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator @@ -172,6 +176,11 @@ public override Quaternion Interpolate(Quaternion start, Quaternion end, float t { return Quaternion.Slerp(start, end, time); } + + public BufferedLinearInterpolatorQuaternion(Quaternion startValue) + { + AddMeasurement(startValue, new NetworkTime(0, 0.0)); + } } public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index 2be4a5235c..f0427b69e6 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -7,7 +7,7 @@ namespace Unity.Netcode.Prototyping /// A prototype component for syncing transforms /// [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] - [DefaultExecutionOrder(1000000)] + [DefaultExecutionOrder(1000000)] // this is needed to catch the update time after the transform was updated by user scripts public class NetworkTransform : NetworkBehaviour { /// @@ -270,9 +270,9 @@ private void UpdateNetVarPerms() private void Awake() { m_Transform = transform; - PositionInterpolator = new BufferedLinearInterpolatorVector3(); - RotationInterpolator = new BufferedLinearInterpolatorQuaternion(); - ScaleInterpolator = new BufferedLinearInterpolatorVector3(); + PositionInterpolator = new BufferedLinearInterpolatorVector3(TransformPosition); + RotationInterpolator = new BufferedLinearInterpolatorQuaternion(TransformRotation); + ScaleInterpolator = new BufferedLinearInterpolatorVector3(TransformScale); UpdateNetVarPerms(); From 2efc972864d041e50c080b34513c38c4c8aae09d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 19 Aug 2021 21:22:56 -0400 Subject: [PATCH 30/74] fix, server can have 0 buffer --- .../Runtime/Timing/NetworkTimeSystem.cs | 24 +++---------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs index 94245f269e..e7a7e80f60 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Timing/NetworkTimeSystem.cs @@ -30,25 +30,9 @@ public class NetworkTimeSystem /// /// Gets or sets the amount of the time in seconds the client should buffer incoming messages from the server. This increases server time. /// A higher value increases latency but makes the game look more smooth in bad networking conditions. - /// This value must be higher than the tick length. + /// This value must be higher than the tick length client side. /// - public double ServerBufferSec - { - get - { - return m_ServerBufferSec; - } - set - { - if (value < 0f || value < 1f / NetworkManager.Singleton.NetworkConfig.TickRate) - { - Debug.LogError($"Error setting buffer size to {value}, buffer time needs to be bigger than the tick length and bigger than zero. Setting value to minimum buffer size: {MinBufferSizeSec}"); - value = MinBufferSizeSec; - } - - m_ServerBufferSec = value; - } - } + public double ServerBufferSec { get; set; } /// /// Gets or sets a threshold in seconds used to force a hard catchup of network time. @@ -68,8 +52,6 @@ public double ServerBufferSec internal double LastSyncedRttSec { get; private set; } - public static double MinBufferSizeSec => 1f / NetworkManager.Singleton.NetworkConfig.TickRate; - public NetworkTimeSystem(double localBufferSec, double serverBufferSec, double hardResetThresholdSec, double adjustmentRatio = 0.01d) { LocalBufferSec = localBufferSec; @@ -85,7 +67,7 @@ public NetworkTimeSystem(double localBufferSec, double serverBufferSec, double h /// The instance. public static NetworkTimeSystem ServerTimeSystem() { - return new NetworkTimeSystem(0, MinBufferSizeSec, double.MaxValue); + return new NetworkTimeSystem(0, 0, double.MaxValue); } /// From ce03d581ef71c82f67a666819c819cda8635162e Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 23 Aug 2021 11:31:59 -0400 Subject: [PATCH 31/74] test fixes --- .../Prototyping/NetworkTransform.cs | 6 +++--- .../Tests/Runtime/NetworkTransformTests.cs | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index f0427b69e6..32b78c75f8 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -69,9 +69,9 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; - protected virtual IInterpolator PositionInterpolator { get; set; } - protected virtual IInterpolator RotationInterpolator { get; set; } - protected virtual IInterpolator ScaleInterpolator { get; set; } + public virtual IInterpolator PositionInterpolator { get; set; } + public virtual IInterpolator RotationInterpolator { get; set; } + public virtual IInterpolator ScaleInterpolator { get; set; } private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkTransformTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkTransformTests.cs index 60960d57a1..ba19f9629c 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkTransformTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkTransformTests.cs @@ -56,9 +56,15 @@ public IEnumerator TestAuthoritativeTransformChangeOneAtATime(bool testLocalTran var networkTransform = (authorityToTest == NetworkAuthority.Client ? m_ClientSideClientPlayer : m_ServerSideClientPlayer).GetComponent(); networkTransform.SetAuthority(authorityToTest); + networkTransform.PositionInterpolator = new NoInterpolator(); + networkTransform.RotationInterpolator = new NoInterpolator(); + networkTransform.ScaleInterpolator = new NoInterpolator(); var otherSideNetworkTransform = (authorityToTest == NetworkAuthority.Client ? m_ServerSideClientPlayer : m_ClientSideClientPlayer).GetComponent(); otherSideNetworkTransform.SetAuthority(authorityToTest); + otherSideNetworkTransform.PositionInterpolator = new NoInterpolator(); + otherSideNetworkTransform.RotationInterpolator = new NoInterpolator(); + otherSideNetworkTransform.ScaleInterpolator = new NoInterpolator(); static bool HasAuthorityFunc(NetworkTransform transform) { @@ -128,9 +134,15 @@ public IEnumerator TestCantChangeTransformFromOtherSideAuthority(NetworkAuthorit // test server can't change client authoritative transform var networkTransform = (authorityToTest == NetworkAuthority.Client ? m_ClientSideClientPlayer : m_ServerSideClientPlayer).GetComponent(); networkTransform.SetAuthority(authorityToTest); + networkTransform.PositionInterpolator = new NoInterpolator(); + networkTransform.RotationInterpolator = new NoInterpolator(); + networkTransform.ScaleInterpolator = new NoInterpolator(); var otherSideNetworkTransform = (authorityToTest == NetworkAuthority.Client ? m_ServerSideClientPlayer : m_ClientSideClientPlayer).GetComponent(); otherSideNetworkTransform.SetAuthority(authorityToTest); + otherSideNetworkTransform.PositionInterpolator = new NoInterpolator(); + otherSideNetworkTransform.RotationInterpolator = new NoInterpolator(); + otherSideNetworkTransform.ScaleInterpolator = new NoInterpolator(); Assert.AreEqual(Vector3.zero, otherSideNetworkTransform.transform.position, "other side pos should be zero at first"); // sanity check otherSideNetworkTransform.transform.position = new Vector3(4, 5, 6); From ad5d9ac59100983d9a32f451859bb0356e8e226c Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 23 Aug 2021 12:05:23 -0400 Subject: [PATCH 32/74] moving things to right place for future merge --- .../Prototyping/Interpolator.meta | 0 .../Prototyping/Interpolator/BufferedLinearInterpolator.cs | 0 .../Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta | 0 .../Prototyping/Interpolator/IInterpolator.cs | 0 .../Prototyping/Interpolator/IInterpolator.cs.meta | 0 .../Prototyping/Interpolator/NoInterpolator.cs | 0 .../Prototyping/Interpolator/NoInterpolator.cs.meta | 0 .../Prototyping/Interpolator/SimpleInterpolator.cs | 0 .../Prototyping/Interpolator/SimpleInterpolator.cs.meta | 0 .../Prototyping/NetworkTransform.cs | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator.meta (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/BufferedLinearInterpolator.cs (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/IInterpolator.cs (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/IInterpolator.cs.meta (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/NoInterpolator.cs (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/NoInterpolator.cs.meta (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/SimpleInterpolator.cs (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/Interpolator/SimpleInterpolator.cs.meta (100%) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Prototyping/NetworkTransform.cs (100%) diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator.meta rename to com.unity.netcode.gameobjects/Prototyping/Interpolator.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/IInterpolator.cs.meta rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/NoInterpolator.cs.meta rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs diff --git a/com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/Interpolator/SimpleInterpolator.cs.meta rename to com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs rename to com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs From 43ef52481a0de51ea4c44e91b1ca1398192ee58c Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 23 Aug 2021 15:06:56 -0400 Subject: [PATCH 33/74] moving tests too --- .../Tests/Editor/InterpolatorTests.cs | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {com.unity.multiplayer.mlapi => com.unity.netcode.gameobjects}/Tests/Editor/InterpolatorTests.cs (100%) diff --git a/com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Tests/Editor/InterpolatorTests.cs rename to com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs From f3d14f9c214b1e7c4e1a5258e0ad66e07f69b10d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 23 Aug 2021 16:42:09 -0400 Subject: [PATCH 34/74] fix --- .../BufferedLinearInterpolator.cs | 34 +- .../Prototyping/NetworkTransform.cs | 359 +++++++++++------- .../NetworkTransformStateTests.cs | 102 ++--- testproject/Assets/Scenes/ZooSam.unity | 21 +- 4 files changed, 288 insertions(+), 228 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 2309792dbb..a78f161de0 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -50,6 +50,10 @@ private struct BufferedItem private int m_LifetimeConsumedCount; + public BufferedLinearInterpolator() + { + } + public void Start() { } @@ -157,37 +161,15 @@ public void OnDestroy() public abstract T Interpolate(T start, T end, float time); } - public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator - { - public override Vector3 Interpolate(Vector3 start, Vector3 end, float time) - { - return Vector3.Lerp(start, end, time); - } - - public BufferedLinearInterpolatorVector3(Vector3 startValue) - { - AddMeasurement(startValue, new NetworkTime(0, 0.0)); - } - } - - public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator - { - public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) - { - return Quaternion.Slerp(start, end, time); - } - - public BufferedLinearInterpolatorQuaternion(Quaternion startValue) - { - AddMeasurement(startValue, new NetworkTime(0, 0.0)); - } - } - public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator { public override float Interpolate(float start, float end, float time) { return Mathf.Lerp(start, end, time); } + + public BufferedLinearInterpolatorFloat() + { + } } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 3191add242..fdf731f621 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -1,4 +1,6 @@ using System; +using System.Collections; +using System.Collections.Generic; using UnityEngine; namespace Unity.Netcode.Prototyping @@ -82,7 +84,49 @@ public bool HasScaleZ public float PositionX, PositionY, PositionZ; public float RotAngleX, RotAngleY, RotAngleZ; public float ScaleX, ScaleY, ScaleZ; - public double SentTime; + public double SentTime; + + public Vector3 Position + { + get + { + return new Vector3(PositionX, PositionY, PositionZ); + } + set + { + PositionX = value.x; + PositionY = value.y; + PositionZ = value.z; + } + } + + public Vector3 Rotation + { + get + { + return new Vector3(RotAngleX, RotAngleY, RotAngleZ); + } + set + { + RotAngleX = value.x; + RotAngleY = value.y; + RotAngleZ = value.z; + } + } + + public Vector3 Scale + { + get + { + return new Vector3(ScaleX, ScaleY, ScaleZ); + } + set + { + ScaleX = value.x; + ScaleY = value.y; + ScaleZ = value.z; + } + } public void NetworkSerialize(NetworkSerializer serializer) { @@ -158,9 +202,52 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; - public virtual IInterpolator PositionInterpolator { get; set; } - public virtual IInterpolator RotationInterpolator { get; set; } - public virtual IInterpolator ScaleInterpolator { get; set; } + public virtual IInterpolator PositionXInterpolator { get; set; } + public virtual IInterpolator PositionYInterpolator { get; set; } + public virtual IInterpolator PositionZInterpolator { get; set; } + + public virtual IInterpolator RotationXInterpolator { get; set; } + public virtual IInterpolator RotationYInterpolator { get; set; } + public virtual IInterpolator RotationZInterpolator { get; set; } + public virtual IInterpolator ScaleXInterpolator { get; set; } + public virtual IInterpolator ScaleYInterpolator { get; set; } + public virtual IInterpolator ScaleZInterpolator { get; set; } + + public void SetInterpolator() where T : IInterpolator, new() + { + var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; + PositionXInterpolator = new T(); + PositionXInterpolator.AddMeasurement(TransformPosition.x, new NetworkTime(tickRate, 0.0)); + PositionYInterpolator = new T(); + PositionYInterpolator.AddMeasurement(TransformPosition.y, new NetworkTime(tickRate, 0.0)); + PositionZInterpolator = new T(); + PositionZInterpolator.AddMeasurement(TransformPosition.z, new NetworkTime(tickRate, 0.0)); + RotationXInterpolator = new T(); + RotationXInterpolator.AddMeasurement(TransformRotation.eulerAngles.x, new NetworkTime(tickRate, 0.0)); + RotationYInterpolator = new T(); + RotationYInterpolator.AddMeasurement(TransformRotation.eulerAngles.y, new NetworkTime(tickRate, 0.0)); + RotationZInterpolator = new T(); + RotationZInterpolator.AddMeasurement(TransformRotation.eulerAngles.z, new NetworkTime(tickRate, 0.0)); + ScaleXInterpolator = new T(); + ScaleXInterpolator.AddMeasurement(TransformScale.x, new NetworkTime(tickRate, 0.0)); + ScaleYInterpolator = new T(); + ScaleYInterpolator.AddMeasurement(TransformScale.y, new NetworkTime(tickRate, 0.0)); + ScaleZInterpolator = new T(); + ScaleZInterpolator.AddMeasurement(TransformScale.z, new NetworkTime(tickRate, 0.0)); + } + + public IEnumerable> AllInterpolators() + { + yield return PositionXInterpolator; + yield return PositionYInterpolator; + yield return PositionZInterpolator; + yield return RotationXInterpolator; + yield return RotationYInterpolator; + yield return RotationZInterpolator; + yield return ScaleXInterpolator; + yield return ScaleYInterpolator; + yield return ScaleZInterpolator; + } private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -214,7 +301,7 @@ private Vector3 TransformScale // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made // returned boolean would be useful to change encapsulating `NetworkVariable`'s dirty state, e.g. ReplNetworkState.SetDirty(isDirty); - internal bool UpdateNetworkState(ref NetworkState networkState) + internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double dirtyTime) { var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; @@ -309,90 +396,109 @@ internal bool UpdateNetworkState(ref NetworkState networkState) isDirty |= true; } + if (isDirty) + { + networkState.SentTime = dirtyTime; + } + return isDirty; } - // TODO: temporary! the function body below probably needs to be rewritten later with interpolation in mind - internal void ApplyNetworkState(NetworkState networkState) + internal void ApplyNetworkStateFromAuthority(NetworkState networkState) { PrevNetworkState = networkState; - var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; - var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; - var scale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; + var interpolatedPosition = InLocalSpace ? m_Transform.localPosition : m_Transform.position; + var interpolatedRotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; + var interpolatedScale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; // InLocalSpace Read InLocalSpace = networkState.InLocalSpace; // Position Read if (networkState.HasPositionX) { - position.x = networkState.PositionX; + interpolatedPosition.x = PositionXInterpolator.GetInterpolatedValue(); } + if (networkState.HasPositionY) { - position.y = networkState.PositionY; + interpolatedPosition.y = PositionYInterpolator.GetInterpolatedValue(); } + if (networkState.HasPositionZ) { - position.z = networkState.PositionZ; + interpolatedPosition.z = PositionZInterpolator.GetInterpolatedValue(); } + // RotAngles Read if (networkState.HasRotAngleX) { - rotAngles.x = networkState.RotAngleX; + interpolatedRotAngles.x = RotationXInterpolator.GetInterpolatedValue(); } + if (networkState.HasRotAngleY) { - rotAngles.y = networkState.RotAngleY; + interpolatedRotAngles.y = RotationYInterpolator.GetInterpolatedValue(); } + if (networkState.HasRotAngleZ) { - rotAngles.z = networkState.RotAngleZ; + interpolatedRotAngles.z = RotationZInterpolator.GetInterpolatedValue(); } + // Scale Read if (networkState.HasScaleX) { - scale.x = networkState.ScaleX; + interpolatedScale.x = ScaleXInterpolator.GetInterpolatedValue(); } + if (networkState.HasScaleY) { - scale.y = networkState.ScaleY; + interpolatedScale.y = ScaleYInterpolator.GetInterpolatedValue(); } + if (networkState.HasScaleZ) { - scale.z = networkState.ScaleZ; + interpolatedScale.z = ScaleZInterpolator.GetInterpolatedValue(); } + PrevNetworkState = networkState; // Position Apply if (networkState.HasPositionX || networkState.HasPositionY || networkState.HasPositionZ) { if (InLocalSpace) { - m_Transform.localPosition = position; + m_Transform.localPosition = interpolatedPosition; } else { - m_Transform.position = position; + m_Transform.position = interpolatedPosition; } + + PrevNetworkState.Position = interpolatedPosition; } + // RotAngles Apply if (networkState.HasRotAngleX || networkState.HasRotAngleY || networkState.HasRotAngleZ) { if (InLocalSpace) { - m_Transform.localEulerAngles = rotAngles; + m_Transform.localEulerAngles = interpolatedRotAngles; } else { - m_Transform.eulerAngles = rotAngles; + m_Transform.eulerAngles = interpolatedRotAngles; } + + PrevNetworkState.Rotation = interpolatedRotAngles; } + // Scale Apply if (networkState.HasScaleX || networkState.HasScaleY || networkState.HasScaleZ) { if (InLocalSpace) { - m_Transform.localScale = scale; + m_Transform.localScale = interpolatedScale; } else { @@ -400,125 +506,99 @@ internal void ApplyNetworkState(NetworkState networkState) var lossyScale = m_Transform.lossyScale; m_Transform.localScale = new Vector3(networkState.ScaleX / lossyScale.x, networkState.ScaleY / lossyScale.y, networkState.ScaleZ / lossyScale.z); } - } - } - private bool IsGhostStateDirty(NetworkState networkState) - { - if (networkState == null) - { - return false; - } - bool isDirty = false; - - isDirty |= networkState.InLocalSpace != InLocalSpace; - if (InLocalSpace) - { - isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Scale != ScaleInterpolator.GetInterpolatedValue(); + PrevNetworkState.Scale = interpolatedScale; } - else - { - isDirty |= networkState.Position != PositionInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Rotation != RotationInterpolator.GetInterpolatedValue(); - isDirty |= networkState.Scale != ScaleInterpolator.GetInterpolatedValue(); - } - - return isDirty; } // Is the non-interpolated authoritative state dirty? private bool IsAuthoritativeTransformDirty() { bool isDirty = false; - var networkState = m_NetworkState.Value; + var networkState = ReplNetworkState.Value; isDirty |= networkState.InLocalSpace != InLocalSpace; if (InLocalSpace) { isDirty |= networkState.Position != m_Transform.localPosition; - isDirty |= networkState.Rotation != m_Transform.localRotation; + isDirty |= networkState.Rotation != m_Transform.localEulerAngles; isDirty |= networkState.Scale != m_Transform.localScale; } else { isDirty |= networkState.Position != m_Transform.position; - isDirty |= networkState.Rotation != m_Transform.rotation; + isDirty |= networkState.Rotation != m_Transform.eulerAngles; isDirty |= networkState.Scale != m_Transform.lossyScale; } return isDirty; } - private void SetNetworkStateDirtyToGhosts(double dirtyTime) + private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { - m_NetworkState.Value.InLocalSpace = InLocalSpace; - m_NetworkState.Value.SentTime = dirtyTime; - if (InLocalSpace) + if (!NetworkObject.IsSpawned) { - m_NetworkState.Value.Position = m_Transform.localPosition; - m_NetworkState.Value.Rotation = m_Transform.localRotation; - m_NetworkState.Value.Scale = m_Transform.localScale; + // todo MTT-849 should never happen but yet it does! maybe revisit/dig after NetVar updates and snapshot system lands? + return; } - else + + // todo for teleport, check teleport flag + // if (newState.Teleporting) + // { + // PositionInterpolator.Reset(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); + // } + + var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); + + if (newState.HasPositionX) { - m_NetworkState.Value.Position = m_Transform.position; - m_NetworkState.Value.Rotation = m_Transform.rotation; - m_NetworkState.Value.Scale = m_Transform.lossyScale; + PositionXInterpolator.AddMeasurement(newState.Position.x, sentTime); } - m_NetworkState.SetDirty(true); - } + if (newState.HasPositionY) + { + PositionYInterpolator.AddMeasurement(newState.Position.y, sentTime); + } - private void ApplyInterpolatedStateFromAuthority(NetworkState netState) - { - InLocalSpace = netState.InLocalSpace; - if (InLocalSpace) + if (newState.HasPositionZ) { - m_Transform.localPosition = PositionInterpolator.GetInterpolatedValue(); - m_Transform.localRotation = RotationInterpolator.GetInterpolatedValue(); - m_Transform.localScale = ScaleInterpolator.GetInterpolatedValue(); + PositionZInterpolator.AddMeasurement(newState.Position.z, sentTime); } - else + + if (newState.HasRotAngleX) { - m_Transform.position = PositionInterpolator.GetInterpolatedValue(); - m_Transform.rotation = RotationInterpolator.GetInterpolatedValue(); - m_Transform.localScale = Vector3.one; - var lossyScale = m_Transform.lossyScale; - m_Transform.localScale = new Vector3(ScaleInterpolator.GetInterpolatedValue().x / lossyScale.x, ScaleInterpolator.GetInterpolatedValue().y / lossyScale.y, ScaleInterpolator.GetInterpolatedValue().z / lossyScale.z); + RotationXInterpolator.AddMeasurement(newState.RotAngleX, sentTime); } - m_PrevNetworkState = netState; - m_PrevNetworkState.Position = PositionInterpolator.GetInterpolatedValue(); - m_PrevNetworkState.Rotation = RotationInterpolator.GetInterpolatedValue(); - m_PrevNetworkState.Scale = ScaleInterpolator.GetInterpolatedValue(); - } - private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) - { - if (!NetworkObject.IsSpawned) + if (newState.HasRotAngleY) { - // todo MTT-849 should never happen but yet it does! maybe revisit/dig after NetVar updates and snapshot system lands? - return; + RotationYInterpolator.AddMeasurement(newState.RotAngleY, sentTime); } - // todo for teleport, check teleport flag - // if (newState.Teleporting) - // { - // PositionInterpolator.Reset(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); - // } + if (newState.HasRotAngleZ) + { + RotationZInterpolator.AddMeasurement(newState.RotAngleZ, sentTime); + } - var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); - PositionInterpolator.AddMeasurement(newState.Position, sentTime); - RotationInterpolator.AddMeasurement(newState.Rotation, sentTime); - ScaleInterpolator.AddMeasurement(newState.Scale, sentTime); + if (newState.HasScaleX) + { + ScaleXInterpolator.AddMeasurement(newState.ScaleX, sentTime); + } + + if (newState.HasScaleY) + { + ScaleYInterpolator.AddMeasurement(newState.ScaleY, sentTime); + } + + if (newState.HasScaleZ) + { + ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); + } } private void Awake() { m_Transform = transform; - PositionInterpolator = new BufferedLinearInterpolatorVector3(TransformPosition); - RotationInterpolator = new BufferedLinearInterpolatorQuaternion(TransformRotation); - ScaleInterpolator = new BufferedLinearInterpolatorVector3(TransformScale); + SetInterpolator(); ReplNetworkState.Settings.SendNetworkChannel = Channel; ReplNetworkState.Settings.SendTickrate = FixedSendsPerSecond; @@ -528,54 +608,37 @@ private void Awake() public void Start() { - PositionInterpolator.Start(); - RotationInterpolator.Start(); - ScaleInterpolator.Start(); + foreach (var interpolator in AllInterpolators()) + { + interpolator.Start(); + } } public void OnEnable() { - PositionInterpolator.OnEnable(); - RotationInterpolator.OnEnable(); - ScaleInterpolator.OnEnable(); + foreach (var interpolator in AllInterpolators()) + { + interpolator.OnEnable(); + } } public override void OnNetworkSpawn() { - m_PrevNetworkState = null; + var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, ReplNetworkState.Value.SentTime); - var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, m_NetworkState.Value.SentTime); - - PositionInterpolator.OnNetworkSpawn(); - RotationInterpolator.OnNetworkSpawn(); - ScaleInterpolator.OnNetworkSpawn(); + foreach (var interpolator in AllInterpolators()) + { + interpolator.OnNetworkSpawn(); + } } + private void OnDestroy() { ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; - PositionInterpolator.OnDestroy(); - RotationInterpolator.OnDestroy(); - ScaleInterpolator.OnDestroy(); - } - - private void FixedUpdate() - { - if (!NetworkObject.IsSpawned) - { - return; - } - - if (IsServer) + foreach (var interpolator in AllInterpolators()) { - ReplNetworkState.SetDirty(UpdateNetworkState(ref ReplNetworkState.ValueRef)); - } - // try to update previously consumed NetworkState - // if we have any changes, that means made some updates locally - // we apply the latest ReplNetworkState again to revert our changes - else if (UpdateNetworkState(ref PrevNetworkState)) - { - ApplyNetworkState(ReplNetworkState.Value); + interpolator.OnDestroy(); } } @@ -586,17 +649,21 @@ private void FixedUpdate() return; } - if (!CanUpdateTransform) + // try to update previously consumed NetworkState + // if we have any changes, that means made some updates locally + // we apply the latest ReplNetworkState again to revert our changes + if (!IsServer) { - if (IsGhostStateDirty(m_PrevNetworkState)) + if (UpdateNetworkStateCheckDirty(ref PrevNetworkState, 0)) // todo figure what time should be here { - Debug.LogWarning("A local change without authority detected, revert back to latest network state!", this); - ApplyInterpolatedStateFromAuthority(m_NetworkState.Value); + Debug.LogWarning("A local change without authority detected, reverting back to latest network state!", this); + ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } - PositionInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - ScaleInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + foreach (var interpolator in AllInterpolators()) + { + interpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); + } } } @@ -607,21 +674,23 @@ private void Update() return; } - if (CanUpdateTransform) + if (IsServer) { if (IsAuthoritativeTransformDirty()) { // check for time there was a change to the transform // this needs to be done in Update to catch that time change as soon as it happens. - SetNetworkStateDirtyToGhosts(NetworkManager.LocalTime.Time); + ReplNetworkState.SetDirty(UpdateNetworkStateCheckDirty(ref ReplNetworkState.ValueRef, NetworkManager.LocalTime.Time)); } } else if (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening) { - PositionInterpolator.Update(Time.deltaTime); - RotationInterpolator.Update(Time.deltaTime); - ScaleInterpolator.Update(Time.deltaTime); - ApplyInterpolatedStateFromAuthority(m_NetworkState.Value); + foreach (var interpolator in AllInterpolators()) + { + interpolator.Update(Time.deltaTime); + } + + ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformStateTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformStateTests.cs index 1cae896568..3d5c94c090 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformStateTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformStateTests.cs @@ -66,16 +66,16 @@ public void TestSyncAxes( networkTransform.transform.eulerAngles = new Vector3(30, 45, 90); networkTransform.transform.localScale = new Vector3(1.1f, 0.5f, 2.5f); - bool isDirty = networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef); + bool isDirty = networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0); networkTransform.ReplNetworkState.SetDirty(isDirty); Assert.IsTrue(isDirty); } // Step 2: apply current state locally, expect state to be not dirty/different { - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); - bool isDirty = networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef); + bool isDirty = networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0); Assert.IsFalse(isDirty); } @@ -92,7 +92,7 @@ public void TestSyncAxes( position.x++; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncPositionY { @@ -101,7 +101,7 @@ public void TestSyncAxes( position.y++; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncPositionZ { @@ -110,7 +110,7 @@ public void TestSyncAxes( position.z++; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncRotAngleX @@ -120,7 +120,7 @@ public void TestSyncAxes( rotAngles.x++; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncRotAngleY { @@ -129,7 +129,7 @@ public void TestSyncAxes( rotAngles.y++; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncRotAngleZ { @@ -138,7 +138,7 @@ public void TestSyncAxes( rotAngles.z++; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncScaleX @@ -148,7 +148,7 @@ public void TestSyncAxes( scale.x++; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncScaleY { @@ -157,7 +157,7 @@ public void TestSyncAxes( scale.y++; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // SyncScaleZ { @@ -166,7 +166,7 @@ public void TestSyncAxes( scale.z++; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } } @@ -227,16 +227,16 @@ public void TestThresholds( networkTransform.transform.eulerAngles = new Vector3(30, 45, 90); networkTransform.transform.localScale = new Vector3(1.1f, 0.5f, 2.5f); - bool isDirty = networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef); + bool isDirty = networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0); networkTransform.ReplNetworkState.SetDirty(isDirty); Assert.IsTrue(isDirty); } // Step 2: apply current state locally, expect state to be not dirty/different { - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); - bool isDirty = networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef); + bool isDirty = networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0); Assert.IsFalse(isDirty); } @@ -253,42 +253,42 @@ public void TestThresholds( { position.x += positionThreshold / 2; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); position.x += positionThreshold * 2; networkTransform.transform.position = position; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // PositionY { position.y += positionThreshold / 2; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); position.y += positionThreshold * 2; networkTransform.transform.position = position; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // PositionZ { position.z += positionThreshold / 2; networkTransform.transform.position = position; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); position.z += positionThreshold * 2; networkTransform.transform.position = position; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } } @@ -301,42 +301,42 @@ public void TestThresholds( { rotAngles.x += rotAngleThreshold / 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); rotAngles.x += rotAngleThreshold * 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // RotAngleY { rotAngles.y += rotAngleThreshold / 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); rotAngles.y += rotAngleThreshold * 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // RotAngleZ { rotAngles.z += rotAngleThreshold / 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); rotAngles.z += rotAngleThreshold * 2; networkTransform.transform.eulerAngles = rotAngles; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } } @@ -349,42 +349,42 @@ public void TestThresholds( { scale.x += scaleThreshold / 2; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); scale.x += scaleThreshold * 2; networkTransform.transform.localScale = scale; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // ScaleY { scale.y += scaleThreshold / 2; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); scale.y += scaleThreshold * 2; networkTransform.transform.localScale = scale; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } // ScaleZ { scale.z += scaleThreshold / 2; networkTransform.transform.localScale = scale; - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); scale.z += scaleThreshold * 2; networkTransform.transform.localScale = scale; - Assert.IsTrue(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + Assert.IsTrue(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); - networkTransform.ApplyNetworkState(networkTransform.ReplNetworkState.Value); - Assert.IsFalse(networkTransform.UpdateNetworkState(ref networkTransform.ReplNetworkState.ValueRef)); + networkTransform.ApplyNetworkStateFromAuthority(networkTransform.ReplNetworkState.Value); + Assert.IsFalse(networkTransform.UpdateNetworkStateCheckDirty(ref networkTransform.ReplNetworkState.ValueRef, 0)); } } } diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 60d8a94c3e..d828af14fd 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6159,8 +6159,6 @@ MonoBehaviour: LoadSceneTimeOut: 120 MessageBufferTimeout: 20 EnableNetworkLogs: 1 - UseSnapshotDelta: 0 - UseSnapshotSpawn: 0 --- !u!4 &620561612 Transform: m_ObjectHideFlags: 0 @@ -6196,8 +6194,8 @@ MonoBehaviour: channels: [] MessageBufferSize: 5120 SimulatePacketLossChance: 0 - SimulateMinLatency: 70 - SimulateMaxLatency: 130 + SimulateMinLatency: 0 + SimulateMaxLatency: 0 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7402,7 +7400,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_MoveSpeed: 5 m_RotationSpeed: 30 - m_RunServerOnly: 0 + m_RunServerOnly: 1 m_RunInUpdate: 1 --- !u!114 &678326394 MonoBehaviour: @@ -7432,8 +7430,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 InLocalSpace: 0 + SyncPositionX: 0 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 0 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 FixedSendsPerSecond: 30 --- !u!65 &678326396 BoxCollider: From 496fa826455d5388ed19a5a152cfce29c700e501 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 25 Aug 2021 21:05:29 -0400 Subject: [PATCH 35/74] some fixes --- .../BufferedLinearInterpolator.cs | 17 ++ .../Prototyping/Interpolator/IInterpolator.cs | 1 + .../Interpolator/SimpleInterpolator.cs | 5 + .../Prototyping/NetworkTransform.cs | 240 ++++++++++++------ 4 files changed, 190 insertions(+), 73 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index a78f161de0..7ec38b75ca 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -62,8 +62,13 @@ public void OnEnable() { } + public void Awake() + { + } + public void OnNetworkSpawn() { + Update(0); } private void TryConsumeFromBuffer() @@ -172,4 +177,16 @@ public BufferedLinearInterpolatorFloat() { } } + + public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator + { + public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) + { + return Quaternion.Slerp(start, end, time); + } + + public BufferedLinearInterpolatorQuaternion() + { + } + } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs index 5d1022287b..8550f1e21c 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs @@ -4,6 +4,7 @@ namespace Unity.Netcode { public interface IInterpolator { + public void Awake(); public void OnNetworkSpawn(); public void Start(); public void OnEnable(); diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs index 6872c116d5..6cf5dc2d15 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs @@ -12,6 +12,11 @@ public class SimpleInterpolatorVector3 : IInterpolator private const float k_MaxLerpTime = 0.1f; + public void Awake() + { + Update(0); + } + public void OnNetworkSpawn() { } diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index fdf731f621..c02e4e4775 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -23,62 +23,73 @@ internal struct NetworkState : INetworkSerializable internal const int RotAngleZBit = 6; internal const int ScaleXBit = 7; internal const int ScaleYBit = 8; + internal const int ScaleZBit = 9; + // 10-15: public ushort Bitset; public bool InLocalSpace { get => (Bitset & (1 << InLocalSpaceBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << InLocalSpaceBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << InLocalSpaceBit); } + // Position public bool HasPositionX { get => (Bitset & (1 << PositionXBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << PositionXBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << PositionXBit); } + public bool HasPositionY { get => (Bitset & (1 << PositionYBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << PositionYBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << PositionYBit); } + public bool HasPositionZ { get => (Bitset & (1 << PositionZBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << PositionZBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << PositionZBit); } + // RotAngles public bool HasRotAngleX { get => (Bitset & (1 << RotAngleXBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << RotAngleXBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleXBit); } + public bool HasRotAngleY { get => (Bitset & (1 << RotAngleYBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << RotAngleYBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleYBit); } + public bool HasRotAngleZ { get => (Bitset & (1 << RotAngleZBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << RotAngleZBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleZBit); } + // Scale public bool HasScaleX { get => (Bitset & (1 << ScaleXBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << ScaleXBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleXBit); } + public bool HasScaleY { get => (Bitset & (1 << ScaleYBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << ScaleYBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleYBit); } + public bool HasScaleZ { get => (Bitset & (1 << ScaleZBit)) != 0; - set => Bitset |= (ushort)((value ? 1 : 0) << ScaleZBit); + set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleZBit); } public float PositionX, PositionY, PositionZ; @@ -88,10 +99,7 @@ public bool HasScaleZ public Vector3 Position { - get - { - return new Vector3(PositionX, PositionY, PositionZ); - } + get { return new Vector3(PositionX, PositionY, PositionZ); } set { PositionX = value.x; @@ -102,10 +110,7 @@ public Vector3 Position public Vector3 Rotation { - get - { - return new Vector3(RotAngleX, RotAngleY, RotAngleZ); - } + get { return new Vector3(RotAngleX, RotAngleY, RotAngleZ); } set { RotAngleX = value.x; @@ -116,10 +121,7 @@ public Vector3 Rotation public Vector3 Scale { - get - { - return new Vector3(ScaleX, ScaleY, ScaleZ); - } + get { return new Vector3(ScaleX, ScaleY, ScaleZ); } set { ScaleX = value.x; @@ -138,36 +140,44 @@ public void NetworkSerialize(NetworkSerializer serializer) { serializer.Serialize(ref PositionX); } + if (HasPositionY) { serializer.Serialize(ref PositionY); } + if (HasPositionZ) { serializer.Serialize(ref PositionZ); } + // RotAngle Values if (HasRotAngleX) { serializer.Serialize(ref RotAngleX); } + if (HasRotAngleY) { serializer.Serialize(ref RotAngleY); } + if (HasRotAngleZ) { serializer.Serialize(ref RotAngleZ); } + // Scale Values if (HasScaleX) { serializer.Serialize(ref ScaleX); } + if (HasScaleY) { serializer.Serialize(ref ScaleY); } + if (HasScaleZ) { serializer.Serialize(ref ScaleZ); @@ -204,51 +214,65 @@ public void NetworkSerialize(NetworkSerializer serializer) public virtual IInterpolator PositionXInterpolator { get; set; } public virtual IInterpolator PositionYInterpolator { get; set; } + public virtual IInterpolator PositionZInterpolator { get; set; } - public virtual IInterpolator RotationXInterpolator { get; set; } - public virtual IInterpolator RotationYInterpolator { get; set; } - public virtual IInterpolator RotationZInterpolator { get; set; } + // public virtual IInterpolator RotationXInterpolator { get; set; } + // public virtual IInterpolator RotationYInterpolator { get; set; } + // public virtual IInterpolator RotationZInterpolator { get; set; } + public virtual IInterpolator RotationInterpolator { get; set; } public virtual IInterpolator ScaleXInterpolator { get; set; } public virtual IInterpolator ScaleYInterpolator { get; set; } public virtual IInterpolator ScaleZInterpolator { get; set; } - public void SetInterpolator() where T : IInterpolator, new() + public void InitializeInterpolator() where T : IInterpolator, new() where U : IInterpolator, new() { - var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; PositionXInterpolator = new T(); - PositionXInterpolator.AddMeasurement(TransformPosition.x, new NetworkTime(tickRate, 0.0)); PositionYInterpolator = new T(); - PositionYInterpolator.AddMeasurement(TransformPosition.y, new NetworkTime(tickRate, 0.0)); PositionZInterpolator = new T(); - PositionZInterpolator.AddMeasurement(TransformPosition.z, new NetworkTime(tickRate, 0.0)); - RotationXInterpolator = new T(); - RotationXInterpolator.AddMeasurement(TransformRotation.eulerAngles.x, new NetworkTime(tickRate, 0.0)); - RotationYInterpolator = new T(); - RotationYInterpolator.AddMeasurement(TransformRotation.eulerAngles.y, new NetworkTime(tickRate, 0.0)); - RotationZInterpolator = new T(); - RotationZInterpolator.AddMeasurement(TransformRotation.eulerAngles.z, new NetworkTime(tickRate, 0.0)); + RotationInterpolator = new U(); + // RotationXInterpolator = new T(); + // RotationYInterpolator = new T(); + // RotationZInterpolator = new T(); ScaleXInterpolator = new T(); - ScaleXInterpolator.AddMeasurement(TransformScale.x, new NetworkTime(tickRate, 0.0)); ScaleYInterpolator = new T(); - ScaleYInterpolator.AddMeasurement(TransformScale.y, new NetworkTime(tickRate, 0.0)); ScaleZInterpolator = new T(); - ScaleZInterpolator.AddMeasurement(TransformScale.z, new NetworkTime(tickRate, 0.0)); } - public IEnumerable> AllInterpolators() + public void SetCurrentInterpolatedState() + { + var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; + PositionXInterpolator.AddMeasurement(ReplNetworkState.Value.PositionX, new NetworkTime(tickRate, 0.0)); + PositionYInterpolator.AddMeasurement(ReplNetworkState.Value.PositionY, new NetworkTime(tickRate, 0.0)); + PositionZInterpolator.AddMeasurement(ReplNetworkState.Value.PositionZ, new NetworkTime(tickRate, 0.0)); + RotationInterpolator.AddMeasurement(Quaternion.Euler(ReplNetworkState.Value.Rotation), new NetworkTime(tickRate, 0.0)); + // RotationXInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.x, new NetworkTime(tickRate, 0.0)); + // RotationYInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.y, new NetworkTime(tickRate, 0.0)); + // RotationZInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.z, new NetworkTime(tickRate, 0.0)); + ScaleXInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleX, new NetworkTime(tickRate, 0.0)); + ScaleYInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleY, new NetworkTime(tickRate, 0.0)); + ScaleZInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleZ, new NetworkTime(tickRate, 0.0)); + } + + public IEnumerable> AllFloatInterpolators() { yield return PositionXInterpolator; yield return PositionYInterpolator; yield return PositionZInterpolator; - yield return RotationXInterpolator; - yield return RotationYInterpolator; - yield return RotationZInterpolator; + // yield return RotationXInterpolator; + // yield return RotationYInterpolator; + // yield return RotationZInterpolator; yield return ScaleXInterpolator; yield return ScaleYInterpolator; yield return ScaleZInterpolator; } + public IEnumerable> AllQuaternionInterpolators() + { + yield return RotationInterpolator; + } + + private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native private Vector3 TransformPosition @@ -301,13 +325,20 @@ private Vector3 TransformScale // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made // returned boolean would be useful to change encapsulating `NetworkVariable`'s dirty state, e.g. ReplNetworkState.SetDirty(isDirty); + internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double dirtyTime) + { + return UpdateNetworkStateCheckDirtyWithInfo(ref networkState, dirtyTime).isDirty; + } + + private (bool isDirty, bool isRotationDirty) UpdateNetworkStateCheckDirtyWithInfo(ref NetworkState networkState, double dirtyTime) { var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; var scale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; bool isDirty = false; + bool isRotationDirty = false; if (InLocalSpace != networkState.InLocalSpace) { @@ -349,6 +380,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double networkState.RotAngleX = rotAngles.x; networkState.HasRotAngleX = true; isDirty |= true; + isRotationDirty = true; } if (SyncRotAngleY && @@ -358,6 +390,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double networkState.RotAngleY = rotAngles.y; networkState.HasRotAngleY = true; isDirty |= true; + isRotationDirty = true; } if (SyncRotAngleZ && @@ -367,6 +400,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double networkState.RotAngleZ = rotAngles.z; networkState.HasRotAngleZ = true; isDirty |= true; + isRotationDirty = true; } if (SyncScaleX && @@ -401,7 +435,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double networkState.SentTime = dirtyTime; } - return isDirty; + return (isDirty, isRotationDirty); } internal void ApplyNetworkStateFromAuthority(NetworkState networkState) @@ -431,19 +465,34 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) } // RotAngles Read + // if (networkState.HasRotAngleX) + // { + // interpolatedRotAngles.x = RotationXInterpolator.GetInterpolatedValue(); + // } + // + // if (networkState.HasRotAngleY) + // { + // interpolatedRotAngles.y = RotationYInterpolator.GetInterpolatedValue(); + // } + // + // if (networkState.HasRotAngleZ) + // { + // interpolatedRotAngles.z = RotationZInterpolator.GetInterpolatedValue(); + // } + if (networkState.HasRotAngleX) { - interpolatedRotAngles.x = RotationXInterpolator.GetInterpolatedValue(); + interpolatedRotAngles.x = RotationInterpolator.GetInterpolatedValue().eulerAngles.x; } if (networkState.HasRotAngleY) { - interpolatedRotAngles.y = RotationYInterpolator.GetInterpolatedValue(); + interpolatedRotAngles.y = RotationInterpolator.GetInterpolatedValue().eulerAngles.y; } if (networkState.HasRotAngleZ) { - interpolatedRotAngles.z = RotationZInterpolator.GetInterpolatedValue(); + interpolatedRotAngles.z = RotationInterpolator.GetInterpolatedValue().eulerAngles.z; } // Scale Read @@ -483,11 +532,11 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) { if (InLocalSpace) { - m_Transform.localEulerAngles = interpolatedRotAngles; + m_Transform.localRotation = Quaternion.Euler(interpolatedRotAngles); } else { - m_Transform.eulerAngles = interpolatedRotAngles; + m_Transform.rotation = Quaternion.Euler(interpolatedRotAngles); } PrevNetworkState.Rotation = interpolatedRotAngles; @@ -564,20 +613,23 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) PositionZInterpolator.AddMeasurement(newState.Position.z, sentTime); } - if (newState.HasRotAngleX) - { - RotationXInterpolator.AddMeasurement(newState.RotAngleX, sentTime); - } - if (newState.HasRotAngleY) - { - RotationYInterpolator.AddMeasurement(newState.RotAngleY, sentTime); - } - - if (newState.HasRotAngleZ) - { - RotationZInterpolator.AddMeasurement(newState.RotAngleZ, sentTime); - } + // todo fix this + // if (newState.HasRotAngleX) + // { + // RotationXInterpolator.AddMeasurement(newState.RotAngleX, sentTime); + // } + // + // if (newState.HasRotAngleY) + // { + // RotationYInterpolator.AddMeasurement(newState.RotAngleY, sentTime); + // } + // + // if (newState.HasRotAngleZ) + // { + // RotationZInterpolator.AddMeasurement(newState.RotAngleZ, sentTime); + // } + RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); if (newState.HasScaleX) { @@ -598,7 +650,28 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) private void Awake() { m_Transform = transform; - SetInterpolator(); + + bool interpolatorAlreadySet = false; + foreach (var interpolator in AllFloatInterpolators()) + { + if (interpolator != null || RotationInterpolator != null) + { + interpolatorAlreadySet = true; + break; + } + } + + if (!interpolatorAlreadySet) + { + InitializeInterpolator(); + } + + foreach (var interpolator in AllFloatInterpolators()) + { + interpolator.Awake(); + } + + RotationInterpolator.Awake(); ReplNetworkState.Settings.SendNetworkChannel = Channel; ReplNetworkState.Settings.SendTickrate = FixedSendsPerSecond; @@ -608,27 +681,38 @@ private void Awake() public void Start() { - foreach (var interpolator in AllInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) { interpolator.Start(); } + + RotationInterpolator.Start(); } public void OnEnable() { - foreach (var interpolator in AllInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) { interpolator.OnEnable(); } + + RotationInterpolator.OnEnable(); } public override void OnNetworkSpawn() { - var currentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, ReplNetworkState.Value.SentTime); - - foreach (var interpolator in AllInterpolators()) + if (!IsServer) { - interpolator.OnNetworkSpawn(); + SetCurrentInterpolatedState(); // useful for late joining + + foreach (var interpolator in AllFloatInterpolators()) + { + interpolator.OnNetworkSpawn(); + } + + RotationInterpolator.OnNetworkSpawn(); + + ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } } @@ -636,10 +720,13 @@ private void OnDestroy() { ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; - foreach (var interpolator in AllInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) { interpolator.OnDestroy(); } + + RotationInterpolator.OnDestroy(); + } private void FixedUpdate() @@ -654,16 +741,21 @@ private void FixedUpdate() // we apply the latest ReplNetworkState again to revert our changes if (!IsServer) { - if (UpdateNetworkStateCheckDirty(ref PrevNetworkState, 0)) // todo figure what time should be here + var oldStateDirtyInfo = UpdateNetworkStateCheckDirtyWithInfo(ref PrevNetworkState, 0); + if ((oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) || (oldStateDirtyInfo.isRotationDirty && (SyncRotAngleX && SyncRotAngleY && SyncRotAngleZ))) { + // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes + // from an unauthorized transform change or euler to quaternion conversion artifacts. However if all rotation axis are synced, we can Debug.LogWarning("A local change without authority detected, reverting back to latest network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } - foreach (var interpolator in AllInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) { interpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } + + RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } } @@ -685,11 +777,13 @@ private void Update() } else if (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening) { - foreach (var interpolator in AllInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) { interpolator.Update(Time.deltaTime); } + RotationInterpolator.Update(Time.deltaTime); + ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } } From 522558fefcf7ac1b3ee74ad4b45363d18783bf2e Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 25 Aug 2021 21:09:34 -0400 Subject: [PATCH 36/74] # --- testproject/Assets/Scenes/ZooSam.unity | 108 +++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 8 deletions(-) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index d828af14fd..7a404cceed 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -219,6 +219,101 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 33522693} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &36747676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 36747677} + - component: {fileID: 36747680} + - component: {fileID: 36747679} + - component: {fileID: 36747678} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &36747677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 36747676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.455, y: 0.296, z: 0.312} + m_LocalScale: {x: 0.55787, y: 0.55787, z: 0.55787} + m_Children: [] + m_Father: {fileID: 678326399} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &36747678 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 36747676} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &36747679 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 36747676} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &36747680 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 36747676} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &37826286 GameObject: m_ObjectHideFlags: 0 @@ -6111,12 +6206,7 @@ MonoBehaviour: ConnectAddress: 127.0.0.1 ConnectPort: 7777 ServerListenPort: 7777 - ServerWebsocketListenPort: 8887 - SupportWebsocket: 0 Channels: [] - UseNetcodeRelay: 0 - NetcodeRelayAddress: 127.0.0.1 - NetcodeRelayPort: 8888 MessageSendMode: 0 --- !u!114 &620561611 MonoBehaviour: @@ -6139,6 +6229,7 @@ MonoBehaviour: RegisteredScenes: - SampleScene - ZooSam + RegisteredSceneAssets: [] AllowRuntimeSceneChanges: 0 PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} @@ -7393,7 +7484,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 678326392} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} m_Name: @@ -7431,11 +7522,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: InLocalSpace: 0 - SyncPositionX: 0 + SyncPositionX: 1 SyncPositionY: 1 SyncPositionZ: 1 SyncRotAngleX: 1 - SyncRotAngleY: 0 + SyncRotAngleY: 1 SyncRotAngleZ: 1 SyncScaleX: 1 SyncScaleY: 1 @@ -7518,6 +7609,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 702051986} + - {fileID: 36747677} m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} From 2f57fa9916ffbd7bdf076267b7af67403254464c Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 25 Aug 2021 22:06:16 -0400 Subject: [PATCH 37/74] # --- .../Prototyping/NetworkTransform.cs | 30 ++++++++++--------- testproject/Assets/Scenes/ZooSam.unity | 2 +- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index c02e4e4775..db98d90267 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -331,14 +331,16 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double return UpdateNetworkStateCheckDirtyWithInfo(ref networkState, dirtyTime).isDirty; } - private (bool isDirty, bool isRotationDirty) UpdateNetworkStateCheckDirtyWithInfo(ref NetworkState networkState, double dirtyTime) + private (bool isDirty, bool isPositionDirty, bool isRotationDirty, bool isScaleDirty) UpdateNetworkStateCheckDirtyWithInfo(ref NetworkState networkState, double dirtyTime) { var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; var scale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; bool isDirty = false; + bool isPositionDirty = false; bool isRotationDirty = false; + bool isScaleDirty = false; if (InLocalSpace != networkState.InLocalSpace) { @@ -352,7 +354,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionX = position.x; networkState.HasPositionX = true; - isDirty |= true; + isPositionDirty = true; } if (SyncPositionY && @@ -361,7 +363,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionY = position.y; networkState.HasPositionY = true; - isDirty |= true; + isPositionDirty = true; } if (SyncPositionZ && @@ -370,7 +372,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionZ = position.z; networkState.HasPositionZ = true; - isDirty |= true; + isPositionDirty = true; } if (SyncRotAngleX && @@ -379,7 +381,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleX = rotAngles.x; networkState.HasRotAngleX = true; - isDirty |= true; isRotationDirty = true; } @@ -389,7 +390,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleY = rotAngles.y; networkState.HasRotAngleY = true; - isDirty |= true; isRotationDirty = true; } @@ -399,7 +399,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleZ = rotAngles.z; networkState.HasRotAngleZ = true; - isDirty |= true; isRotationDirty = true; } @@ -409,7 +408,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleX = scale.x; networkState.HasScaleX = true; - isDirty |= true; + isScaleDirty = true; } if (SyncScaleY && @@ -418,7 +417,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleY = scale.y; networkState.HasScaleY = true; - isDirty |= true; + isScaleDirty = true; } if (SyncScaleZ && @@ -427,15 +426,17 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleZ = scale.z; networkState.HasScaleZ = true; - isDirty |= true; + isScaleDirty = true; } + isDirty |= isPositionDirty || isRotationDirty || isScaleDirty; + if (isDirty) { networkState.SentTime = dirtyTime; } - return (isDirty, isRotationDirty); + return (isDirty, isPositionDirty, isRotationDirty, isScaleDirty); } internal void ApplyNetworkStateFromAuthority(NetworkState networkState) @@ -742,11 +743,12 @@ private void FixedUpdate() if (!IsServer) { var oldStateDirtyInfo = UpdateNetworkStateCheckDirtyWithInfo(ref PrevNetworkState, 0); - if ((oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) || (oldStateDirtyInfo.isRotationDirty && (SyncRotAngleX && SyncRotAngleY && SyncRotAngleZ))) + if (oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) { // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes - // from an unauthorized transform change or euler to quaternion conversion artifacts. However if all rotation axis are synced, we can - Debug.LogWarning("A local change without authority detected, reverting back to latest network state!", this); + // from an unauthorized transform change or euler to quaternion conversion artifacts. + var dirtyField = oldStateDirtyInfo.isPositionDirty ? "position" : "scale"; + Debug.LogWarning($"A local change to {dirtyField} without authority detected, reverting back to latest interpolated network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 7a404cceed..6ac4ab70c1 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -7484,7 +7484,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 678326392} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} m_Name: From b6ac56276fdc97d1daa90c4dffac47d94a48969e Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 1 Sep 2021 15:28:58 -0400 Subject: [PATCH 38/74] smooth now --- .../BufferedLinearInterpolator.cs | 77 +++-- .../Prototyping/Interpolator/IInterpolator.cs | 1 + .../Interpolator/NoInterpolator.cs | 2 + .../Interpolator/SimpleInterpolator.cs | 2 + .../Prototyping/NetworkTransform.cs | 90 +++++- .../Prototyping/NetworkTransform.cs.meta | 5 +- .../Runtime/Timing/NetworkTime.cs | 3 +- .../Tests/Editor/InterpolatorTests.cs | 10 + testproject/Assets/Scenes/ZooSam.unity | 268 +++++++++++++++++- testproject/Assets/Scripts/MoveInCircle.cs | 2 +- 10 files changed, 408 insertions(+), 52 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 7ec38b75ca..018ebca4ee 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -17,6 +17,7 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : public interface IInterpolatorTime { public double BufferedServerTime { get; } + public double BufferedServerFixedTime { get; } public double LocalTime { get; } public int TickRate { get; } } @@ -24,6 +25,7 @@ public interface IInterpolatorTime private class InterpolatorTime : IInterpolatorTime { public double BufferedServerTime => NetworkManager.Singleton.ServerTime.Time; + public double BufferedServerFixedTime => NetworkManager.Singleton.ServerTime.FixedTime; public double LocalTime => NetworkManager.Singleton.LocalTime.Time; public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } @@ -35,8 +37,10 @@ private struct BufferedItem } internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); - protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering - private double RenderTime => ServerTimeBeingHandledForBuffering - 1f / interpolatorTime.TickRate; + public bool UseFixedUpdate { get; set; } + // protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering + protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? interpolatorTime.BufferedServerFixedTime : interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering + protected virtual double RenderTime => interpolatorTime.BufferedServerTime - 1f / interpolatorTime.TickRate; private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -71,38 +75,52 @@ public void OnNetworkSpawn() Update(0); } + double TickOrTime(NetworkTime t) + { + if (UseFixedUpdate) return t.FixedTime; + return t.Time; + } private void TryConsumeFromBuffer() { int consumedCount = 0; - // buffer is sorted so older (smaller) time values are at the end. - for (int i = m_Buffer.Count - 1; i >= 0; i--) + // only consume if we're ready + if (RenderTime >= m_EndTimeConsumed.Time) { - var bufferedValue = m_Buffer[i]; - // check render time so we only try to consume one value at once - if (bufferedValue.timeSent.Time <= ServerTimeBeingHandledForBuffering && RenderTime >= m_EndTimeConsumed.Time) + // buffer is sorted so older (smaller) time values are at the end. + for (int i = m_Buffer.Count - 1; i >= 0; i--) { - if (m_LifetimeConsumedCount == 0) + var bufferedValue = m_Buffer[i]; + // Consume when ready. This can consume multiple times + if (TickOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) // todo do tick + 1 instead of changing the way tick is calculated? discuss with Luke { - m_StartTimeConsumed = bufferedValue.timeSent; - m_InterpStartValue = bufferedValue.item; + // if (RenderTime > TickOrTime(m_EndTimeConsumed)) + { + if (m_LifetimeConsumedCount == 0) + { + m_StartTimeConsumed = bufferedValue.timeSent; + m_InterpStartValue = bufferedValue.item; + } + else if (consumedCount == 0) + { + m_StartTimeConsumed = m_EndTimeConsumed; + m_InterpStartValue = m_InterpEndValue; + } + } + + m_EndTimeConsumed = bufferedValue.timeSent; + m_InterpEndValue = bufferedValue.item; + m_Buffer.RemoveAt(i); + consumedCount++; + m_LifetimeConsumedCount++; } - else if (consumedCount == 0) - { - m_StartTimeConsumed = m_EndTimeConsumed; - m_InterpStartValue = m_InterpEndValue; - } - - m_EndTimeConsumed = bufferedValue.timeSent; - m_InterpEndValue = bufferedValue.item; - m_Buffer.RemoveAt(i); - consumedCount++; - m_LifetimeConsumedCount++; } } } public T Update(float deltaTime) { + if (m_LifetimeConsumedCount > 2) // todo remove debug + Debug.Log($"Sam got value m_Buffer.Count {m_Buffer.Count}"); TryConsumeFromBuffer(); if (m_LifetimeConsumedCount == 0 && m_Buffer.Count == 0) @@ -117,7 +135,7 @@ public T Update(float deltaTime) if (m_LifetimeConsumedCount >= 1) // shouldn't interpolate between default values, let's wait to receive data first, should only interpolate between real measurements { - double range = m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; + double range = TickOrTime(m_EndTimeConsumed) - TickOrTime(m_StartTimeConsumed); float t; if (range == 0) { @@ -125,10 +143,19 @@ public T Update(float deltaTime) } else { - t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); + t = (float) ((RenderTime - TickOrTime(m_StartTimeConsumed)) / range); + } + + if (t > 2) // max extrapolation + { + t = 1; } - Debug.Assert(t >= 0, "t must be bigger or equal than 0"); + if (m_LifetimeConsumedCount > 2) // todo remove debug + Debug.Log($"sam got value t {t}, TT(m_EndTimeConsumed) {TickOrTime(m_EndTimeConsumed)}, TT(m_StartTimeConsumed) {TickOrTime(m_StartTimeConsumed)}, range {range}, " + + $" RenderTime {RenderTime}, ServerTimeBeingHandledForBuffering {ServerTimeBeingHandledForBuffering}, interpolatorTime.TickRate {interpolatorTime.TickRate}, " + + $" interpolatorTime.BufferedServerFixedTime {interpolatorTime.BufferedServerFixedTime}, interpolatorTime.BufferedServerTime {interpolatorTime.BufferedServerTime}"); + Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {TickOrTime(m_StartTimeConsumed)}, end time {TickOrTime(m_EndTimeConsumed)}"); m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); } @@ -171,6 +198,7 @@ public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator public override float Interpolate(float start, float end, float time) { return Mathf.Lerp(start, end, time); + // return Mathf.LerpUnclamped(start, end, time); } public BufferedLinearInterpolatorFloat() @@ -182,6 +210,7 @@ public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); public void OnDestroy(); + public bool UseFixedUpdate { get; set; } } } diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs index 4ed406c55e..52201e5ec3 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs @@ -43,5 +43,7 @@ public T GetInterpolatedValue() public void OnDestroy() { } + + public bool UseFixedUpdate { get; set; } } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs index 6cf5dc2d15..8c8428562d 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs @@ -55,5 +55,7 @@ public Vector3 GetInterpolatedValue() public void OnDestroy() { } + + public bool UseFixedUpdate { get; set; } } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index db98d90267..65c44da41b 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using Random = UnityEngine.Random; namespace Unity.Netcode.Prototyping { @@ -9,7 +10,9 @@ namespace Unity.Netcode.Prototyping /// A prototype component for syncing transforms /// [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] - [DefaultExecutionOrder(1000000)] // this is needed to catch the update time after the transform was updated by user scripts +// todo add a note in doc about this + // todo have a way for this to be only server side? This way client side you can have scripts that depend on that position update that'll execute afterward + [DefaultExecutionOrder(1000)] // this is needed to catch the update time after the transform was updated by user scripts public class NetworkTransform : NetworkBehaviour { internal struct NetworkState : INetworkSerializable @@ -23,10 +26,10 @@ internal struct NetworkState : INetworkSerializable internal const int RotAngleZBit = 6; internal const int ScaleXBit = 7; internal const int ScaleYBit = 8; - internal const int ScaleZBit = 9; + internal const int LastSentBit = 10; // todo remove this - // 10-15: + // 11-15: public ushort Bitset; public bool InLocalSpace @@ -92,6 +95,12 @@ public bool HasScaleZ set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleZBit); } + public bool IsLastSent + { + get => (Bitset & (1 << LastSentBit)) != 0; + set => Bitset |= (ushort) ((value ? 1 : 0) << LastSentBit); + } + public float PositionX, PositionY, PositionZ; public float RotAngleX, RotAngleY, RotAngleZ; public float ScaleX, ScaleY, ScaleZ; @@ -133,7 +142,7 @@ public Vector3 Scale public void NetworkSerialize(NetworkSerializer serializer) { serializer.Serialize(ref SentTime); - // InLocalSpace + HasXXX Bits + // InLocalSpace + HasXXX Bits + LastSent flag serializer.Serialize(ref Bitset); // Position Values if (HasPositionX) @@ -212,6 +221,8 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; + public bool UseFixedUpdate = true; + public virtual IInterpolator PositionXInterpolator { get; set; } public virtual IInterpolator PositionYInterpolator { get; set; } @@ -272,6 +283,8 @@ public IEnumerable> AllQuaternionInterpolators() yield return RotationInterpolator; } + private int k_debugDrawLineTime = 10; + private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -431,11 +444,12 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double isDirty |= isPositionDirty || isRotationDirty || isScaleDirty; - if (isDirty) + // if (isDirty) { networkState.SentTime = dirtyTime; } + return (isDirty, isPositionDirty, isRotationDirty, isScaleDirty); } @@ -599,6 +613,11 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); + if (newState.IsLastSent) + { + Debug.Log("asdf"); + } + if (newState.HasPositionX) { PositionXInterpolator.AddMeasurement(newState.Position.x, sentTime); @@ -646,6 +665,12 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); } + + if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) + { + var pos = new Vector3(newState.PositionX, newState.PositionY, newState.PositionZ); + Debug.DrawLine(pos, pos + Vector3.up + Vector3.left * Random.Range(0.5f, 2f), Color.green, k_debugDrawLineTime, false); + } } private void Awake() @@ -661,7 +686,6 @@ private void Awake() break; } } - if (!interpolatorAlreadySet) { InitializeInterpolator(); @@ -670,9 +694,10 @@ private void Awake() foreach (var interpolator in AllFloatInterpolators()) { interpolator.Awake(); + interpolator.UseFixedUpdate = UseFixedUpdate; } - RotationInterpolator.Awake(); + RotationInterpolator.UseFixedUpdate = UseFixedUpdate; ReplNetworkState.Settings.SendNetworkChannel = Channel; ReplNetworkState.Settings.SendTickrate = FixedSendsPerSecond; @@ -730,6 +755,31 @@ private void OnDestroy() } + private void DoSendToOthers(double time) + { + // check for time there was a change to the transform + // this needs to be done in Update to catch that time change as soon as it happens. + var isDirty = UpdateNetworkStateCheckDirty(ref ReplNetworkState.ValueRef, time); // todo sam diff here is Fixedtime + if (isDirty) + { + alreadySentLastValue = false; + } + else if (!alreadySentLastValue) + { + isDirty = true; + alreadySentLastValue = true; // to send one more value after a transform moves, so that unclamped interpolation has two similar last values + shouldSendLastValue = true; + } + ReplNetworkState.ValueRef.IsLastSent = shouldSendLastValue; + + ReplNetworkState.SetDirty(shouldSendLastValue || isDirty); + if (ReplNetworkState.IsDirty()) + { + Debug.DrawLine(ReplNetworkState.Value.Position, ReplNetworkState.Value.Position + Vector3.up, Color.magenta, 10, false); + } + shouldSendLastValue = false; + } + private void FixedUpdate() { if (!NetworkObject.IsSpawned) @@ -737,6 +787,11 @@ private void FixedUpdate() return; } + if (IsServer && UseFixedUpdate) + { + DoSendToOthers(NetworkManager.LocalTime.FixedTime); + } + // try to update previously consumed NetworkState // if we have any changes, that means made some updates locally // we apply the latest ReplNetworkState again to revert our changes @@ -761,6 +816,10 @@ private void FixedUpdate() } } + private bool alreadySentLastValue = false; + private bool shouldSendLastValue = false; + + private void Update() { if (!NetworkObject.IsSpawned) @@ -768,16 +827,11 @@ private void Update() return; } - if (IsServer) + if (IsServer && !UseFixedUpdate) { - if (IsAuthoritativeTransformDirty()) - { - // check for time there was a change to the transform - // this needs to be done in Update to catch that time change as soon as it happens. - ReplNetworkState.SetDirty(UpdateNetworkStateCheckDirty(ref ReplNetworkState.ValueRef, NetworkManager.LocalTime.Time)); - } + DoSendToOthers(NetworkManager.LocalTime.Time); } - else if (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening) + if (!IsServer && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) { foreach (var interpolator in AllFloatInterpolators()) { @@ -786,6 +840,12 @@ private void Update() RotationInterpolator.Update(Time.deltaTime); + if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) + { + var interpolatedPosition = new Vector3(PositionXInterpolator.GetInterpolatedValue(), PositionYInterpolator.GetInterpolatedValue(), PositionZInterpolator.GetInterpolatedValue()); + Debug.DrawLine(interpolatedPosition, interpolatedPosition + Vector3.up, Color.magenta, k_debugDrawLineTime, false); + } + ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } } diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs.meta b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs.meta index 6af788f27b..4023b38e0e 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs.meta +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs.meta @@ -3,10 +3,7 @@ guid: e96cb6065543e43c4a752faaa1468eb1 MonoImporter: externalObjects: {} serializedVersion: 2 - defaultReferences: - - m_PositionInterpolatorFactory: {fileID: 11400000, guid: a882403a7bf6247cd881a093a9a3f537, - type: 2} - - m_RotationInterpolatorFactory: {instanceID: 0} + defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: diff --git a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs index 4a90602916..e17a5ed176 100644 --- a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs +++ b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs @@ -106,7 +106,8 @@ public NetworkTime ToFixedTime() private void UpdateCache() { double d = m_TimeSec / m_TickInterval; - m_CachedTick = (int)d; + m_CachedTick = (int)d; // rounding up. if you're in tick 3.123, you're really in the tick 4 + // m_CachedTick = (int)Math.Ceiling(d); // rounding up. if you're in tick 3.123, you're really in the tick 4 m_CachedTickOffset = ((d - Math.Truncate(d)) * m_TickInterval); // This handles negative time, decreases tick by 1 and makes offset positive. diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index ea18a14f19..4c572213e6 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -10,6 +10,7 @@ public class BufferedInterpolatorTests private class MockInterpolatorTime : BufferedLinearInterpolator.IInterpolatorTime { public double BufferedServerTime { get; set; } + public double BufferedServerFixedTime { get; } public double LocalTime { get; } public int TickRate { get; set; } @@ -45,6 +46,7 @@ public void NormalUsage() // Testing float instead of Vector3. The only difference with Vector3 is the lerp method used. var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -91,6 +93,7 @@ public void NormalUsage() public void OutOfOrderShouldStillWork() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -121,6 +124,7 @@ public void OutOfOrderShouldStillWork() public void MessageLoss() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -166,6 +170,7 @@ public void MessageLoss() public void AddFirstMeasurement() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -194,6 +199,7 @@ public void AddFirstMeasurement() public void JumpToEachValueIfDeltaTimeTooBig() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -213,6 +219,7 @@ public void JumpToEachValueIfDeltaTimeTooBig() public void JumpToLastValueFromStart() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -244,6 +251,7 @@ public void JumpToLastValueFromStart() public void TestBufferSizeLimit() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -277,6 +285,7 @@ public void TestBufferSizeLimit() public void TestUpdatingInterpolatorWithNoData() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; @@ -288,6 +297,7 @@ public void TestUpdatingInterpolatorWithNoData() public void TestDuplicatedValues() { var interpolator = new BufferedLinearInterpolatorFloat(); + interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.interpolatorTime = mockBufferedTime; diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 6ac4ab70c1..1354882eaa 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -3098,6 +3098,164 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 237078269} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &240282449 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240282456} + - component: {fileID: 240282455} + - component: {fileID: 240282454} + - component: {fileID: 240282453} + - component: {fileID: 240282452} + - component: {fileID: 240282451} + - component: {fileID: 240282450} + m_Layer: 0 + m_Name: NetworkTransformBuffered (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &240282450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + InLocalSpace: 0 + SyncPositionX: 1 + SyncPositionY: 0 + SyncPositionZ: 1 + SyncRotAngleX: 0 + SyncRotAngleY: 1 + SyncRotAngleZ: 0 + SyncScaleX: 0 + SyncScaleY: 0 + SyncScaleZ: 0 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 + FixedSendsPerSecond: 30 + UseFixedUpdate: 1 +--- !u!114 &240282451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: -5 + m_RotationSpeed: 30 + m_RunServerOnly: 1 + m_RunInUpdate: 1 +--- !u!114 &240282452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 2979526890 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!65 &240282453 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &240282454 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 16358fcb4e0c94cc8b980fbb17259843, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &240282455 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &240282456 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240282449} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.25, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1551181949} + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &250510712 GameObject: m_ObjectHideFlags: 0 @@ -6222,7 +6380,7 @@ MonoBehaviour: m_EditorClassIdentifier: DontDestroy: 1 RunInBackground: 1 - LogLevel: 1 + LogLevel: 0 NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 620561613} @@ -6234,7 +6392,7 @@ MonoBehaviour: PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] - TickRate: 20 + TickRate: 30 ClientConnectionBufferTimeout: 10 ConnectionApproval: 0 ConnectionData: @@ -7492,7 +7650,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 m_RunServerOnly: 1 - m_RunInUpdate: 1 + m_RunInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -7528,13 +7686,14 @@ MonoBehaviour: SyncRotAngleX: 1 SyncRotAngleY: 1 SyncRotAngleZ: 1 - SyncScaleX: 1 - SyncScaleY: 1 - SyncScaleZ: 1 + SyncScaleX: 0 + SyncScaleY: 0 + SyncScaleZ: 0 PositionThreshold: 0 RotAngleThreshold: 0 ScaleThreshold: 0 - FixedSendsPerSecond: 30 + FixedSendsPerSecond: 50 + UseFixedUpdate: 1 --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 @@ -19687,6 +19846,101 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1537050448} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1551181948 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1551181949} + - component: {fileID: 1551181952} + - component: {fileID: 1551181951} + - component: {fileID: 1551181950} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1551181949 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551181948} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.455, y: 0.296, z: 0.312} + m_LocalScale: {x: 0.55787, y: 0.55787, z: 0.55787} + m_Children: [] + m_Father: {fileID: 240282456} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1551181950 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551181948} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1551181951 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551181948} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1551181952 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551181948} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1556458764 GameObject: m_ObjectHideFlags: 0 diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index 6f809325da..00b9aebf9e 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -21,7 +21,7 @@ public class MoveInCircle : NetworkBehaviour public override void OnNetworkSpawn() { base.OnNetworkSpawn(); - NetworkManager.Singleton.NetworkTimeSystem.ServerBufferSec = 0.15f; + //NetworkManager.Singleton.NetworkTimeSystem.ServerBufferSec = 0.15f; } void FixedUpdate() From 54ee62e1f9842b8985e6c0b6fe6cd2fd4838a9b3 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 1 Sep 2021 15:59:20 -0400 Subject: [PATCH 39/74] fixes after merge --- .../Prototyping/NetworkTransform.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 82bec80bfe..e32fc15d55 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -283,7 +283,7 @@ public IEnumerable> AllQuaternionInterpolators() private int k_debugDrawLineTime = 10; internal NetworkState LocalNetworkState; - + private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native private Vector3 TransformPosition @@ -696,7 +696,7 @@ private void Awake() RotationInterpolator.Awake(); RotationInterpolator.UseFixedUpdate = UseFixedUpdate; - ReplNetworkState.Settings.SendNetworkChannel = NetworkChannel.PositionUpdate; + // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out ReplNetworkState.OnValueChanged += OnNetworkStateChanged; } @@ -756,15 +756,15 @@ private void DoSendToOthers(double time) // this needs to be done in Update to catch that time change as soon as it happens. /* todo - if (UpdateNetworkState(ref LocalNetworkState)) + if (UpdateNetworkState(ref LocalNetworkState)) { // if updated (dirty), change NetVar, mark it dirty ReplNetworkState.Value = LocalNetworkState; ReplNetworkState.SetDirty(true); } */ - - var isDirty = UpdateNetworkStateCheckDirty(ref ReplNetworkState.ValueRef, time); // todo sam diff here is Fixedtime + + var isDirty = UpdateNetworkStateCheckDirty(ref LocalNetworkState, time); // todo sam diff here is Fixedtime if (isDirty) { alreadySentLastValue = false; @@ -775,13 +775,17 @@ private void DoSendToOthers(double time) alreadySentLastValue = true; // to send one more value after a transform moves, so that unclamped interpolation has two similar last values shouldSendLastValue = true; } - ReplNetworkState.ValueRef.IsLastSent = shouldSendLastValue; + //ReplNetworkState.ValueRef.IsLastSent = shouldSendLastValue; - ReplNetworkState.SetDirty(shouldSendLastValue || isDirty); - if (ReplNetworkState.IsDirty()) + if (isDirty) { - Debug.DrawLine(ReplNetworkState.Value.Position, ReplNetworkState.Value.Position + Vector3.up, Color.magenta, 10, false); + ReplNetworkState.Value = LocalNetworkState; } + ReplNetworkState.SetDirty(shouldSendLastValue || isDirty); + // if (ReplNetworkState.IsDirty()) + // { + // Debug.DrawLine(ReplNetworkState.Value.Position, ReplNetworkState.Value.Position + Vector3.up, Color.magenta, 10, false); + // } shouldSendLastValue = false; } From 35606d7ce88bc2b4e30b7fac26d5a2cf883fdc31 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 2 Sep 2021 16:43:52 -0400 Subject: [PATCH 40/74] # --- .../Editor/NetworkTransformEditor.cs | 3 + .../BufferedLinearInterpolator.cs | 67 ++-- .../Prototyping/Interpolator/IInterpolator.cs | 1 + .../Interpolator/NoInterpolator.cs | 5 + .../Interpolator/SimpleInterpolator.cs | 47 ++- .../Prototyping/NetworkTransform.cs | 165 ++++----- testproject/Assets/Scenes/ZooSam.unity | 342 +++++++++++++++++- testproject/Assets/Scripts/MoveInCircle.cs | 8 +- 8 files changed, 488 insertions(+), 150 deletions(-) diff --git a/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs b/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs index 519b2a6f38..c565c917f3 100644 --- a/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs +++ b/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs @@ -21,6 +21,7 @@ public class NetworkTransformEditor : UnityEditor.Editor private SerializedProperty m_ScaleThresholdProperty; private SerializedProperty m_InLocalSpaceProperty; private SerializedProperty m_InterpolateProperty; + private SerializedProperty m_UseFixedUpdateProperty; private static int s_ToggleOffset = 45; private static float s_MaxRowWidth = EditorGUIUtility.labelWidth + EditorGUIUtility.fieldWidth + 5; @@ -44,6 +45,7 @@ public void OnEnable() m_ScaleThresholdProperty = serializedObject.FindProperty(nameof(NetworkTransform.ScaleThreshold)); m_InLocalSpaceProperty = serializedObject.FindProperty(nameof(NetworkTransform.InLocalSpace)); m_InterpolateProperty = serializedObject.FindProperty(nameof(NetworkTransform.Interpolate)); + m_UseFixedUpdateProperty = serializedObject.FindProperty(nameof(NetworkTransform.UseFixedUpdate)); } public override void OnInspectorGUI() @@ -111,6 +113,7 @@ public override void OnInspectorGUI() EditorGUILayout.LabelField("Configurations", EditorStyles.boldLabel); EditorGUILayout.PropertyField(m_InLocalSpaceProperty); EditorGUILayout.PropertyField(m_InterpolateProperty); + EditorGUILayout.PropertyField(m_UseFixedUpdateProperty); serializedObject.ApplyModifiedProperties(); } diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 018ebca4ee..e7b97504c1 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -37,8 +37,22 @@ private struct BufferedItem } internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); + + public void ResetTo(T targetValue) + { + m_LifetimeConsumedCount = 1; + m_InterpStartValue = targetValue; + m_InterpEndValue = targetValue; + m_CurrentInterpValue = targetValue; + m_Buffer.Clear(); + m_EndTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); + m_StartTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); + + simpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position + Update(0); + } + public bool UseFixedUpdate { get; set; } - // protected virtual double ServerTimeBeingHandledForBuffering => interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? interpolatorTime.BufferedServerFixedTime : interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering protected virtual double RenderTime => interpolatorTime.BufferedServerTime - 1f / interpolatorTime.TickRate; @@ -72,12 +86,12 @@ public void Awake() public void OnNetworkSpawn() { - Update(0); } - double TickOrTime(NetworkTime t) + double FixedOrTime(NetworkTime t) { if (UseFixedUpdate) return t.FixedTime; + return t.Time; } private void TryConsumeFromBuffer() @@ -91,7 +105,7 @@ private void TryConsumeFromBuffer() { var bufferedValue = m_Buffer[i]; // Consume when ready. This can consume multiple times - if (TickOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) // todo do tick + 1 instead of changing the way tick is calculated? discuss with Luke + if (FixedOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) // todo do tick + 1 instead of changing the way tick is calculated? discuss with Luke { // if (RenderTime > TickOrTime(m_EndTimeConsumed)) { @@ -119,8 +133,6 @@ private void TryConsumeFromBuffer() public T Update(float deltaTime) { - if (m_LifetimeConsumedCount > 2) // todo remove debug - Debug.Log($"Sam got value m_Buffer.Count {m_Buffer.Count}"); TryConsumeFromBuffer(); if (m_LifetimeConsumedCount == 0 && m_Buffer.Count == 0) @@ -135,7 +147,7 @@ public T Update(float deltaTime) if (m_LifetimeConsumedCount >= 1) // shouldn't interpolate between default values, let's wait to receive data first, should only interpolate between real measurements { - double range = TickOrTime(m_EndTimeConsumed) - TickOrTime(m_StartTimeConsumed); + double range = FixedOrTime(m_EndTimeConsumed) - FixedOrTime(m_StartTimeConsumed); float t; if (range == 0) { @@ -143,7 +155,7 @@ public T Update(float deltaTime) } else { - t = (float) ((RenderTime - TickOrTime(m_StartTimeConsumed)) / range); + t = (float) ((RenderTime - FixedOrTime(m_StartTimeConsumed)) / range); } if (t > 2) // max extrapolation @@ -151,12 +163,11 @@ public T Update(float deltaTime) t = 1; } - if (m_LifetimeConsumedCount > 2) // todo remove debug - Debug.Log($"sam got value t {t}, TT(m_EndTimeConsumed) {TickOrTime(m_EndTimeConsumed)}, TT(m_StartTimeConsumed) {TickOrTime(m_StartTimeConsumed)}, range {range}, " + - $" RenderTime {RenderTime}, ServerTimeBeingHandledForBuffering {ServerTimeBeingHandledForBuffering}, interpolatorTime.TickRate {interpolatorTime.TickRate}, " + - $" interpolatorTime.BufferedServerFixedTime {interpolatorTime.BufferedServerFixedTime}, interpolatorTime.BufferedServerTime {interpolatorTime.BufferedServerTime}"); - Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {TickOrTime(m_StartTimeConsumed)}, end time {TickOrTime(m_EndTimeConsumed)}"); - m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); + Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); // todo remove GC alloc this creates + + // m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); + simpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump + m_CurrentInterpValue = simpleInterpolator.Update(deltaTime); } return m_CurrentInterpValue; @@ -190,32 +201,46 @@ public void OnDestroy() { } - public abstract T Interpolate(T start, T end, float time); + protected abstract T Interpolate(T start, T end, float time); + + protected abstract SimpleInterpolator simpleInterpolator { get; } } public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator { - public override float Interpolate(float start, float end, float time) + protected override float Interpolate(float start, float end, float time) { - return Mathf.Lerp(start, end, time); - // return Mathf.LerpUnclamped(start, end, time); + return Mathf.LerpUnclamped(start, end, time); } public BufferedLinearInterpolatorFloat() { } + + protected override SimpleInterpolator simpleInterpolator { get; } = new SimpleInterpolatorFloat(); + } + + public class BufferedLinearInterpolatorFloatForScale : BufferedLinearInterpolatorFloat + { + protected override float Interpolate(float start, float end, float time) + { + // scale can't be negative, stopping negative extrapolation + return Mathf.Max(Mathf.LerpUnclamped(start, end, time), 0); + } } public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator { - public override Quaternion Interpolate(Quaternion start, Quaternion end, float time) + protected override Quaternion Interpolate(Quaternion start, Quaternion end, float time) { - // return Quaternion.SlerpUnclamped(start, end, time); - return Quaternion.Slerp(start, end, time); + return Quaternion.SlerpUnclamped(start, end, time); + // return Quaternion.Slerp(start, end, time); } public BufferedLinearInterpolatorQuaternion() { } + + protected override SimpleInterpolator simpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs index 546923128e..3d9bca687c 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs @@ -13,6 +13,7 @@ public interface IInterpolator public void AddMeasurement(T newMeasurement, NetworkTime sentTime); public T GetInterpolatedValue(); public void OnDestroy(); + public void ResetTo(T targetValue); public bool UseFixedUpdate { get; set; } } } diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs index 52201e5ec3..fb7c9e58b9 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs @@ -44,6 +44,11 @@ public void OnDestroy() { } + public void ResetTo(T targetValue) + { + m_Current = targetValue; + } + public bool UseFixedUpdate { get; set; } } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs index 8c8428562d..6b3091640e 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs @@ -3,12 +3,12 @@ namespace Unity.Netcode { - public class SimpleInterpolatorVector3 : IInterpolator + public abstract class SimpleInterpolator : IInterpolator { private float m_CurrentTime; - private Vector3 m_StartVector; - private Vector3 m_EndVector; - private Vector3 m_UpdatedVector; + private T m_Start; + private T m_End; + private T m_Updated; private const float k_MaxLerpTime = 0.1f; @@ -29,10 +29,10 @@ public void OnEnable() { } - public Vector3 Update(float deltaTime) + public T Update(float deltaTime) { m_CurrentTime += deltaTime; - m_UpdatedVector = Vector3.Lerp(m_StartVector, m_EndVector, m_CurrentTime / k_MaxLerpTime); + m_Updated = Interpolate(m_Start, m_End, m_CurrentTime / k_MaxLerpTime); return GetInterpolatedValue(); } @@ -40,22 +40,47 @@ public void FixedUpdate(float fixedDeltaTime) { } - public void AddMeasurement(Vector3 newMeasurement, NetworkTime sentTick) + public void AddMeasurement(T newMeasurement, NetworkTime sentTick) { - m_EndVector = newMeasurement; + m_End = newMeasurement; m_CurrentTime = 0; - m_StartVector = m_UpdatedVector; + m_Start = m_Updated; } - public Vector3 GetInterpolatedValue() + public T GetInterpolatedValue() { - return m_UpdatedVector; + return m_Updated; } public void OnDestroy() { } + public void ResetTo(T targetValue) + { + m_End = targetValue; + m_Start = targetValue; + m_Updated = targetValue; + m_CurrentTime = 0; + } + + protected abstract T Interpolate(T a, T b, float time); + public bool UseFixedUpdate { get; set; } } + public class SimpleInterpolatorFloat : SimpleInterpolator + { + protected override float Interpolate(float a, float b, float time) + { + return Mathf.Lerp(a, b, time); + } + } + + public class SimpleInterpolatorQuaternion : SimpleInterpolator + { + protected override Quaternion Interpolate(Quaternion a, Quaternion b, float time) + { + return Quaternion.Slerp(a, b, time); + } + } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index e32fc15d55..faad8ba0ec 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -10,7 +10,7 @@ namespace Unity.Netcode.Prototyping /// A prototype component for syncing transforms /// [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] -// todo add a note in doc about this + // todo add a note in doc about this // todo have a way for this to be only server side? This way client side you can have scripts that depend on that position update that'll execute afterward [DefaultExecutionOrder(1000)] // this is needed to catch the update time after the transform was updated by user scripts public class NetworkTransform : NetworkBehaviour @@ -27,9 +27,8 @@ internal struct NetworkState : INetworkSerializable internal const int ScaleXBit = 7; internal const int ScaleYBit = 8; internal const int ScaleZBit = 9; - internal const int LastSentBit = 10; // todo remove this - // 11-15: + // 10-15: public ushort Bitset; public bool InLocalSpace @@ -95,12 +94,6 @@ public bool HasScaleZ set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleZBit); } - public bool IsLastSent - { - get => (Bitset & (1 << LastSentBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << LastSentBit); - } - public float PositionX, PositionY, PositionZ; public float RotAngleX, RotAngleY, RotAngleZ; public float ScaleX, ScaleY, ScaleZ; @@ -225,64 +218,53 @@ public void NetworkSerialize(NetworkSerializer serializer) public virtual IInterpolator PositionZInterpolator { get; set; } - // public virtual IInterpolator RotationXInterpolator { get; set; } - // public virtual IInterpolator RotationYInterpolator { get; set; } - // public virtual IInterpolator RotationZInterpolator { get; set; } - public virtual IInterpolator RotationInterpolator { get; set; } + public virtual IInterpolator RotationInterpolator { get; set; } // rotation is a single Quaternion since each euler axis will affect the quaternion's final value public virtual IInterpolator ScaleXInterpolator { get; set; } public virtual IInterpolator ScaleYInterpolator { get; set; } public virtual IInterpolator ScaleZInterpolator { get; set; } - public void InitializeInterpolator() where T : IInterpolator, new() where U : IInterpolator, new() + public void InitializeInterpolator() where Pos : IInterpolator, new() where Rot : IInterpolator, new() where Scale : IInterpolator, new() { - PositionXInterpolator = new T(); - PositionYInterpolator = new T(); - PositionZInterpolator = new T(); - RotationInterpolator = new U(); - // RotationXInterpolator = new T(); - // RotationYInterpolator = new T(); - // RotationZInterpolator = new T(); - ScaleXInterpolator = new T(); - ScaleYInterpolator = new T(); - ScaleZInterpolator = new T(); + PositionXInterpolator = new Pos(); + PositionYInterpolator = new Pos(); + PositionZInterpolator = new Pos(); + RotationInterpolator = new Rot(); + ScaleXInterpolator = new Scale(); + ScaleYInterpolator = new Scale(); + ScaleZInterpolator = new Scale(); } public void SetCurrentInterpolatedState() { var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; - PositionXInterpolator.AddMeasurement(ReplNetworkState.Value.PositionX, new NetworkTime(tickRate, 0.0)); - PositionYInterpolator.AddMeasurement(ReplNetworkState.Value.PositionY, new NetworkTime(tickRate, 0.0)); - PositionZInterpolator.AddMeasurement(ReplNetworkState.Value.PositionZ, new NetworkTime(tickRate, 0.0)); - RotationInterpolator.AddMeasurement(Quaternion.Euler(ReplNetworkState.Value.Rotation), new NetworkTime(tickRate, 0.0)); - // RotationXInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.x, new NetworkTime(tickRate, 0.0)); - // RotationYInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.y, new NetworkTime(tickRate, 0.0)); - // RotationZInterpolator.AddMeasurement(ReplNetworkState.Value.RotationX ulerAngles.z, new NetworkTime(tickRate, 0.0)); - ScaleXInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleX, new NetworkTime(tickRate, 0.0)); - ScaleYInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleY, new NetworkTime(tickRate, 0.0)); - ScaleZInterpolator.AddMeasurement(ReplNetworkState.Value.ScaleZ, new NetworkTime(tickRate, 0.0)); + for (int i = 0; i < 1; i++) // repeat this twice to set both "start" and "end" values + { + ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); + ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); + ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); + + PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); + PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); + PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); + + RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); + } } public IEnumerable> AllFloatInterpolators() { - yield return PositionXInterpolator; - yield return PositionYInterpolator; - yield return PositionZInterpolator; - // yield return RotationXInterpolator; - // yield return RotationYInterpolator; - // yield return RotationZInterpolator; yield return ScaleXInterpolator; yield return ScaleYInterpolator; yield return ScaleZInterpolator; - } - public IEnumerable> AllQuaternionInterpolators() - { - yield return RotationInterpolator; + yield return PositionXInterpolator; + yield return PositionYInterpolator; + yield return PositionZInterpolator; } private int k_debugDrawLineTime = 10; - internal NetworkState LocalNetworkState; + internal NetworkState LocalAuthoritativeNetworkState; private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -442,7 +424,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double isDirty |= isPositionDirty || isRotationDirty || isScaleDirty; - // if (isDirty) + if (isDirty) { networkState.SentTime = dirtyTime; } @@ -477,22 +459,6 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) interpolatedPosition.z = PositionZInterpolator.GetInterpolatedValue(); } - // RotAngles Read - // if (networkState.HasRotAngleX) - // { - // interpolatedRotAngles.x = RotationXInterpolator.GetInterpolatedValue(); - // } - // - // if (networkState.HasRotAngleY) - // { - // interpolatedRotAngles.y = RotationYInterpolator.GetInterpolatedValue(); - // } - // - // if (networkState.HasRotAngleZ) - // { - // interpolatedRotAngles.z = RotationZInterpolator.GetInterpolatedValue(); - // } - if (networkState.HasRotAngleX) { interpolatedRotAngles.x = RotationInterpolator.GetInterpolatedValue().eulerAngles.x; @@ -566,6 +532,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) { m_Transform.localScale = Vector3.one; var lossyScale = m_Transform.lossyScale; + // todo this conversion is messing with interpolation. local scale interpolates fine, lossy scale is jittery. should investigate m_Transform.localScale = new Vector3(networkState.ScaleX / lossyScale.x, networkState.ScaleY / lossyScale.y, networkState.ScaleZ / lossyScale.z); } @@ -603,6 +570,11 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) return; } + if (IsServer) + { + return; // todo use authority + } + // todo for teleport, check teleport flag // if (newState.Teleporting) // { @@ -611,11 +583,6 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); - if (newState.IsLastSent) - { - Debug.Log("asdf"); - } - if (newState.HasPositionX) { PositionXInterpolator.AddMeasurement(newState.Position.x, sentTime); @@ -673,6 +640,7 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) private void Awake() { + // NetworkManager.Singleton.NetworkTickSystem.Tick += TickFixedUpdate; m_Transform = transform; bool interpolatorAlreadySet = false; foreach (var interpolator in AllFloatInterpolators()) @@ -683,9 +651,10 @@ private void Awake() break; } } + if (!interpolatorAlreadySet) { - InitializeInterpolator(); + InitializeInterpolator(); } foreach (var interpolator in AllFloatInterpolators()) @@ -693,10 +662,26 @@ private void Awake() interpolator.Awake(); interpolator.UseFixedUpdate = UseFixedUpdate; } + RotationInterpolator.Awake(); RotationInterpolator.UseFixedUpdate = UseFixedUpdate; // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out + + // set initial value for spawn + if (IsServer) + { + if (UseFixedUpdate) + { + // try to update local NetworkState + DoSendToOthers(NetworkManager.LocalTime.FixedTime); + } + else + { + DoSendToOthers(NetworkManager.LocalTime.Time); + } + } + ReplNetworkState.OnValueChanged += OnNetworkStateChanged; } @@ -726,11 +711,11 @@ public override void OnNetworkSpawn() { SetCurrentInterpolatedState(); // useful for late joining - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators()) // todo remove GC alloc this creates { interpolator.OnNetworkSpawn(); } - +// todo cache network manager to remove some of the time it takes to get it RotationInterpolator.OnNetworkSpawn(); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); @@ -747,46 +732,18 @@ private void OnDestroy() } RotationInterpolator.OnDestroy(); - } private void DoSendToOthers(double time) { // check for time there was a change to the transform // this needs to be done in Update to catch that time change as soon as it happens. - /* - todo - if (UpdateNetworkState(ref LocalNetworkState)) - { - // if updated (dirty), change NetVar, mark it dirty - ReplNetworkState.Value = LocalNetworkState; - ReplNetworkState.SetDirty(true); - } - */ - - var isDirty = UpdateNetworkStateCheckDirty(ref LocalNetworkState, time); // todo sam diff here is Fixedtime - if (isDirty) - { - alreadySentLastValue = false; - } - else if (!alreadySentLastValue) - { - isDirty = true; - alreadySentLastValue = true; // to send one more value after a transform moves, so that unclamped interpolation has two similar last values - shouldSendLastValue = true; - } - //ReplNetworkState.ValueRef.IsLastSent = shouldSendLastValue; - if (isDirty) + if (UpdateNetworkStateCheckDirty(ref LocalAuthoritativeNetworkState, time)) { - ReplNetworkState.Value = LocalNetworkState; + ReplNetworkState.Value = LocalAuthoritativeNetworkState; + ReplNetworkState.SetDirty(true); } - ReplNetworkState.SetDirty(shouldSendLastValue || isDirty); - // if (ReplNetworkState.IsDirty()) - // { - // Debug.DrawLine(ReplNetworkState.Value.Position, ReplNetworkState.Value.Position + Vector3.up, Color.magenta, 10, false); - // } - shouldSendLastValue = false; } private void FixedUpdate() @@ -826,8 +783,8 @@ private void FixedUpdate() } } - private bool alreadySentLastValue = false; - private bool shouldSendLastValue = false; + // private bool alreadySentLastValue = false; + // private bool shouldSendLastValue = false; private void Update() @@ -841,6 +798,8 @@ private void Update() { DoSendToOthers(NetworkManager.LocalTime.Time); } + + // apply interpolated value if (!IsServer && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) { foreach (var interpolator in AllFloatInterpolators()) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 1354882eaa..7d7f227c45 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -3132,7 +3132,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - InLocalSpace: 0 SyncPositionX: 1 SyncPositionY: 0 SyncPositionZ: 1 @@ -3145,6 +3144,8 @@ MonoBehaviour: PositionThreshold: 0 RotAngleThreshold: 0 ScaleThreshold: 0 + InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 UseFixedUpdate: 1 --- !u!114 &240282451 @@ -5175,6 +5176,101 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 489960630} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &491088866 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 491088867} + - component: {fileID: 491088870} + - component: {fileID: 491088869} + - component: {fileID: 491088868} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &491088867 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491088866} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.01, y: 0.47, z: 0} + m_LocalScale: {x: 0.55787, y: 0.55787, z: 0.55787} + m_Children: [] + m_Father: {fileID: 1934616770} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &491088868 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491088866} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &491088869 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491088866} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &491088870 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491088866} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &506377921 GameObject: m_ObjectHideFlags: 0 @@ -5559,6 +5655,89 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 555000401} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &557794667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 557794668} + - component: {fileID: 557794670} + - component: {fileID: 557794669} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &557794668 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557794667} + m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} + m_LocalPosition: {x: 8.25, y: 18.45, z: -16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1934616770} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} +--- !u!81 &557794669 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557794667} + m_Enabled: 1 +--- !u!20 &557794670 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557794667} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 --- !u!1 &561629645 GameObject: m_ObjectHideFlags: 0 @@ -6384,11 +6563,6 @@ MonoBehaviour: NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 620561613} - RegisteredScenes: - - SampleScene - - ZooSam - RegisteredSceneAssets: [] - AllowRuntimeSceneChanges: 0 PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] @@ -6443,8 +6617,8 @@ MonoBehaviour: channels: [] MessageBufferSize: 5120 SimulatePacketLossChance: 0 - SimulateMinLatency: 0 - SimulateMaxLatency: 0 + SimulateMinLatency: 70 + SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -7679,19 +7853,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - InLocalSpace: 0 SyncPositionX: 1 SyncPositionY: 1 SyncPositionZ: 1 SyncRotAngleX: 1 SyncRotAngleY: 1 SyncRotAngleZ: 1 - SyncScaleX: 0 - SyncScaleY: 0 - SyncScaleZ: 0 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 PositionThreshold: 0 RotAngleThreshold: 0 ScaleThreshold: 0 + InLocalSpace: 1 + Interpolate: 1 FixedSendsPerSecond: 50 UseFixedUpdate: 1 --- !u!65 &678326396 @@ -24572,6 +24747,149 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} +--- !u!1 &1934616763 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1934616770} + - component: {fileID: 1934616769} + - component: {fileID: 1934616768} + - component: {fileID: 1934616767} + - component: {fileID: 1934616766} + - component: {fileID: 1934616764} + m_Layer: 0 + m_Name: NetworkTransformBuffered-no-move + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1934616764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 0 + SyncScaleY: 0 + SyncScaleZ: 0 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 + InLocalSpace: 0 + Interpolate: 1 + FixedSendsPerSecond: 50 + UseFixedUpdate: 1 +--- !u!114 &1934616766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3146719950 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!65 &1934616767 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1934616768 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 16358fcb4e0c94cc8b980fbb17259843, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1934616769 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1934616770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934616763} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6.26, y: 1.55, z: 5.87} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 557794668} + - {fileID: 491088867} + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1949195315 GameObject: m_ObjectHideFlags: 0 diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index 00b9aebf9e..51218b31af 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -27,24 +27,26 @@ public override void OnNetworkSpawn() void FixedUpdate() { if (m_RunInUpdate) return; - Tick(Time.fixedDeltaTime); + Tick(true); } private void Update() { if (!m_RunInUpdate) return; - Tick(Time.deltaTime); + Tick(false); } - void Tick(float deltaTime) + void Tick(bool isFixed) { if (NetworkManager.Singleton.IsServer || !m_RunServerOnly) { m_DebugOldPosition = transform.position; + var deltaTime = isFixed ? Time.fixedDeltaTime : Time.deltaTime; transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); // Debug.Log($"ewqqwe {Math.Round((transform.position - debug_oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); m_DebugLastTime = Time.time; transform.Rotate(0, m_RotationSpeed * deltaTime, 0); + transform.localScale = ((Mathf.Sin(isFixed ? Time.fixedTime : Time.time)+1) * Vector3.one); } } } From 3d569862931d52f54a23a7a2f44a93bc5508e81d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 2 Sep 2021 20:28:36 -0400 Subject: [PATCH 41/74] # --- .../BufferedLinearInterpolator.cs | 63 +++--- .../Prototyping/NetworkTransform.cs | 183 +++++------------- 2 files changed, 75 insertions(+), 171 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index e7b97504c1..a27284377f 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -38,22 +38,12 @@ private struct BufferedItem internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); - public void ResetTo(T targetValue) - { - m_LifetimeConsumedCount = 1; - m_InterpStartValue = targetValue; - m_InterpEndValue = targetValue; - m_CurrentInterpValue = targetValue; - m_Buffer.Clear(); - m_EndTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); - m_StartTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); - - simpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position - Update(0); - } - public bool UseFixedUpdate { get; set; } - protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? interpolatorTime.BufferedServerFixedTime : interpolatorTime.BufferedServerTime; // override this if you want configurable buffering, right now using ServerTick's own global buffering + + /// + /// Override this if you want configurable buffering, right now using ServerTick's own global buffering + /// + protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? interpolatorTime.BufferedServerFixedTime : interpolatorTime.BufferedServerTime; protected virtual double RenderTime => interpolatorTime.BufferedServerTime - 1f / interpolatorTime.TickRate; private T m_InterpStartValue; @@ -88,6 +78,20 @@ public void OnNetworkSpawn() { } + public void ResetTo(T targetValue) + { + m_LifetimeConsumedCount = 1; + m_InterpStartValue = targetValue; + m_InterpEndValue = targetValue; + m_CurrentInterpValue = targetValue; + m_Buffer.Clear(); + m_EndTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); + m_StartTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); + + simpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position + Update(0); + } + double FixedOrTime(NetworkTime t) { if (UseFixedUpdate) return t.FixedTime; @@ -101,24 +105,21 @@ private void TryConsumeFromBuffer() if (RenderTime >= m_EndTimeConsumed.Time) { // buffer is sorted so older (smaller) time values are at the end. - for (int i = m_Buffer.Count - 1; i >= 0; i--) + for (int i = m_Buffer.Count - 1; i >= 0; i--) // todo stretch: consume ahead if we see we're missing values { var bufferedValue = m_Buffer[i]; // Consume when ready. This can consume multiple times if (FixedOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) // todo do tick + 1 instead of changing the way tick is calculated? discuss with Luke { - // if (RenderTime > TickOrTime(m_EndTimeConsumed)) + if (m_LifetimeConsumedCount == 0) + { + m_StartTimeConsumed = bufferedValue.timeSent; + m_InterpStartValue = bufferedValue.item; + } + else if (consumedCount == 0) { - if (m_LifetimeConsumedCount == 0) - { - m_StartTimeConsumed = bufferedValue.timeSent; - m_InterpStartValue = bufferedValue.item; - } - else if (consumedCount == 0) - { - m_StartTimeConsumed = m_EndTimeConsumed; - m_InterpStartValue = m_InterpEndValue; - } + m_StartTimeConsumed = m_EndTimeConsumed; + m_InterpStartValue = m_InterpEndValue; } m_EndTimeConsumed = bufferedValue.timeSent; @@ -158,14 +159,13 @@ public T Update(float deltaTime) t = (float) ((RenderTime - FixedOrTime(m_StartTimeConsumed)) / range); } - if (t > 2) // max extrapolation + // if (t > 5) // max extrapolation { t = 1; } Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); // todo remove GC alloc this creates - // m_CurrentInterpValue = Interpolate(m_InterpStartValue, m_InterpEndValue, t); simpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump m_CurrentInterpValue = simpleInterpolator.Update(deltaTime); } @@ -213,10 +213,6 @@ protected override float Interpolate(float start, float end, float time) return Mathf.LerpUnclamped(start, end, time); } - public BufferedLinearInterpolatorFloat() - { - } - protected override SimpleInterpolator simpleInterpolator { get; } = new SimpleInterpolatorFloat(); } @@ -234,7 +230,6 @@ public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] - // todo add a note in doc about this - // todo have a way for this to be only server side? This way client side you can have scripts that depend on that position update that'll execute afterward [DefaultExecutionOrder(1000)] // this is needed to catch the update time after the transform was updated by user scripts public class NetworkTransform : NetworkBehaviour { @@ -135,7 +133,7 @@ public Vector3 Scale public void NetworkSerialize(NetworkSerializer serializer) { serializer.Serialize(ref SentTime); - // InLocalSpace + HasXXX Bits + LastSent flag + // InLocalSpace + HasXXX Bits serializer.Serialize(ref Bitset); // Position Values if (HasPositionX) @@ -202,7 +200,6 @@ public void NetworkSerialize(NetworkSerializer serializer) [Tooltip("Sets whether this transform should sync in local space or in world space")] public bool InLocalSpace = false; - // todo: revisit after MTT-876 public bool Interpolate = true; /// @@ -215,9 +212,7 @@ public void NetworkSerialize(NetworkSerializer serializer) public virtual IInterpolator PositionXInterpolator { get; set; } public virtual IInterpolator PositionYInterpolator { get; set; } - public virtual IInterpolator PositionZInterpolator { get; set; } - public virtual IInterpolator RotationInterpolator { get; set; } // rotation is a single Quaternion since each euler axis will affect the quaternion's final value public virtual IInterpolator ScaleXInterpolator { get; set; } public virtual IInterpolator ScaleYInterpolator { get; set; } @@ -225,100 +220,66 @@ public void NetworkSerialize(NetworkSerializer serializer) public void InitializeInterpolator() where Pos : IInterpolator, new() where Rot : IInterpolator, new() where Scale : IInterpolator, new() { - PositionXInterpolator = new Pos(); - PositionYInterpolator = new Pos(); - PositionZInterpolator = new Pos(); - RotationInterpolator = new Rot(); - ScaleXInterpolator = new Scale(); - ScaleYInterpolator = new Scale(); - ScaleZInterpolator = new Scale(); - } - - public void SetCurrentInterpolatedState() - { - var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; - for (int i = 0; i < 1; i++) // repeat this twice to set both "start" and "end" values + if (Interpolate) { - ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); - ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); - ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); - - PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); - PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); - PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); - - RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); + PositionXInterpolator = new Pos(); + PositionYInterpolator = new Pos(); + PositionZInterpolator = new Pos(); + RotationInterpolator = new Rot(); + ScaleXInterpolator = new Scale(); + ScaleYInterpolator = new Scale(); + ScaleZInterpolator = new Scale(); + } + else + { + PositionXInterpolator = new NoInterpolator(); + PositionYInterpolator = new NoInterpolator(); + PositionZInterpolator = new NoInterpolator(); + RotationInterpolator = new NoInterpolator(); + ScaleXInterpolator = new NoInterpolator(); + ScaleYInterpolator = new NoInterpolator(); + ScaleZInterpolator = new NoInterpolator(); } } public IEnumerable> AllFloatInterpolators() { - yield return ScaleXInterpolator; - yield return ScaleYInterpolator; - yield return ScaleZInterpolator; - yield return PositionXInterpolator; yield return PositionYInterpolator; yield return PositionZInterpolator; + yield return ScaleXInterpolator; + yield return ScaleYInterpolator; + yield return ScaleZInterpolator; } private int k_debugDrawLineTime = 10; - internal NetworkState LocalAuthoritativeNetworkState; private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native - private Vector3 TransformPosition - { - get - { - if (InLocalSpace) - { - return m_Transform.localPosition; - } - else - { - return m_Transform.position; - } - } - } + internal readonly NetworkVariable ReplNetworkState = new NetworkVariable(new NetworkState()); + internal NetworkState PrevNetworkState; + internal NetworkState LocalAuthoritativeNetworkState; - private Quaternion TransformRotation + public void ResetCurrentInterpolatedState() { - get + var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; + for (int i = 0; i < 1; i++) // repeat this twice to set both "start" and "end" values { - if (InLocalSpace) - { - return m_Transform.localRotation; - } - else - { - return m_Transform.rotation; - } - } - } + ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); + ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); + ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); - private Vector3 TransformScale - { - get - { - if (InLocalSpace) - { - return m_Transform.localScale; - } - else - { - return m_Transform.lossyScale; - } + PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); + PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); + PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); + + RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); } } - internal readonly NetworkVariable ReplNetworkState = new NetworkVariable(new NetworkState()); - internal NetworkState PrevNetworkState; - // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made // returned boolean would be useful to change encapsulating `NetworkVariable`'s dirty state, e.g. ReplNetworkState.SetDirty(isDirty); - internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double dirtyTime) { return UpdateNetworkStateCheckDirtyWithInfo(ref networkState, dirtyTime).isDirty; @@ -532,7 +493,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) { m_Transform.localScale = Vector3.one; var lossyScale = m_Transform.lossyScale; - // todo this conversion is messing with interpolation. local scale interpolates fine, lossy scale is jittery. should investigate + // todo this conversion is messing with interpolation. local scale interpolates fine, lossy scale is jittery. must investigate m_Transform.localScale = new Vector3(networkState.ScaleX / lossyScale.x, networkState.ScaleY / lossyScale.y, networkState.ScaleZ / lossyScale.z); } @@ -540,28 +501,6 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) } } - // Is the non-interpolated authoritative state dirty? - private bool IsAuthoritativeTransformDirty() - { - bool isDirty = false; - var networkState = ReplNetworkState.Value; - isDirty |= networkState.InLocalSpace != InLocalSpace; - if (InLocalSpace) - { - isDirty |= networkState.Position != m_Transform.localPosition; - isDirty |= networkState.Rotation != m_Transform.localEulerAngles; - isDirty |= networkState.Scale != m_Transform.localScale; - } - else - { - isDirty |= networkState.Position != m_Transform.position; - isDirty |= networkState.Rotation != m_Transform.eulerAngles; - isDirty |= networkState.Scale != m_Transform.lossyScale; - } - - return isDirty; - } - private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) { if (!NetworkObject.IsSpawned) @@ -575,12 +514,6 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) return; // todo use authority } - // todo for teleport, check teleport flag - // if (newState.Teleporting) - // { - // PositionInterpolator.Reset(newState.Position, new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTick)); - // } - var sentTime = new NetworkTime(NetworkManager.Singleton.ServerTime.TickRate, newState.SentTime); if (newState.HasPositionX) @@ -598,22 +531,6 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) PositionZInterpolator.AddMeasurement(newState.Position.z, sentTime); } - - // todo fix this - // if (newState.HasRotAngleX) - // { - // RotationXInterpolator.AddMeasurement(newState.RotAngleX, sentTime); - // } - // - // if (newState.HasRotAngleY) - // { - // RotationYInterpolator.AddMeasurement(newState.RotAngleY, sentTime); - // } - // - // if (newState.HasRotAngleZ) - // { - // RotationZInterpolator.AddMeasurement(newState.RotAngleZ, sentTime); - // } RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); if (newState.HasScaleX) @@ -640,7 +557,6 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) private void Awake() { - // NetworkManager.Singleton.NetworkTickSystem.Tick += TickFixedUpdate; m_Transform = transform; bool interpolatorAlreadySet = false; foreach (var interpolator in AllFloatInterpolators()) @@ -666,7 +582,7 @@ private void Awake() RotationInterpolator.Awake(); RotationInterpolator.UseFixedUpdate = UseFixedUpdate; - // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out + // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out, talk with Matt/Fatih, this should be unreliable // set initial value for spawn if (IsServer) @@ -674,11 +590,11 @@ private void Awake() if (UseFixedUpdate) { // try to update local NetworkState - DoSendToOthers(NetworkManager.LocalTime.FixedTime); + DoUpdateToGhosts(NetworkManager.LocalTime.FixedTime); } else { - DoSendToOthers(NetworkManager.LocalTime.Time); + DoUpdateToGhosts(NetworkManager.LocalTime.Time); } } @@ -709,13 +625,13 @@ public override void OnNetworkSpawn() { if (!IsServer) { - SetCurrentInterpolatedState(); // useful for late joining + ResetCurrentInterpolatedState(); // useful for late joining foreach (var interpolator in AllFloatInterpolators()) // todo remove GC alloc this creates { interpolator.OnNetworkSpawn(); } -// todo cache network manager to remove some of the time it takes to get it + // todo cache network manager to remove some of the time it takes to get it RotationInterpolator.OnNetworkSpawn(); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); @@ -734,11 +650,8 @@ private void OnDestroy() RotationInterpolator.OnDestroy(); } - private void DoSendToOthers(double time) + private void DoUpdateToGhosts(double time) { - // check for time there was a change to the transform - // this needs to be done in Update to catch that time change as soon as it happens. - if (UpdateNetworkStateCheckDirty(ref LocalAuthoritativeNetworkState, time)) { ReplNetworkState.Value = LocalAuthoritativeNetworkState; @@ -753,10 +666,10 @@ private void FixedUpdate() return; } - if (IsServer && UseFixedUpdate) + if (IsServer && UseFixedUpdate) // todo change IsServer for HasAuthority check { // try to update local NetworkState - DoSendToOthers(NetworkManager.LocalTime.FixedTime); + DoUpdateToGhosts(NetworkManager.LocalTime.FixedTime); } // try to update previously consumed NetworkState @@ -783,10 +696,6 @@ private void FixedUpdate() } } - // private bool alreadySentLastValue = false; - // private bool shouldSendLastValue = false; - - private void Update() { if (!NetworkObject.IsSpawned) @@ -796,7 +705,7 @@ private void Update() if (IsServer && !UseFixedUpdate) { - DoSendToOthers(NetworkManager.LocalTime.Time); + DoUpdateToGhosts(NetworkManager.LocalTime.Time); } // apply interpolated value From 9374e4bf37a10ffd95fe07c790c8aabb6e7d4e12 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 2 Sep 2021 22:05:19 -0400 Subject: [PATCH 42/74] # --- .../BufferedLinearInterpolator.cs | 14 +- .../Prototyping/Interpolator/IInterpolator.cs | 2 - .../Interpolator/SimpleInterpolator.cs | 2 +- .../Prototyping/NetworkTransform.cs | 25 +- .../Runtime/Timing/NetworkTime.cs | 3 +- .../Runtime/Timing/NetworkTimeSystem.cs | 3 - .../Tests/Editor/InterpolatorTests.cs | 88 +++++- .../NetworkTransform/NetworkTransformTests.cs | 23 +- testproject/Assets/Scenes/ZooSam.unity | 258 +++++++++++++++++- 9 files changed, 358 insertions(+), 60 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index a27284377f..4a3c22ff27 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -5,8 +5,8 @@ namespace Unity.Netcode { /// - /// Solves for jittered incoming values - /// Doesn't solve for message loss + /// Solves for incoming values that are jittered + /// Partially solves for message loss. Unclamped lerping will help hide it, but not completely /// /// public abstract class BufferedLinearInterpolator : IInterpolator where T : struct @@ -30,14 +30,14 @@ private class InterpolatorTime : IInterpolatorTime public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } + internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); + private struct BufferedItem { public T item; public NetworkTime timeSent; } - internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); - public bool UseFixedUpdate { get; set; } /// @@ -98,6 +98,8 @@ double FixedOrTime(NetworkTime t) return t.Time; } + + // todo if I have value 1, 2, 3 and I'm treating 1 to 3, I shouldn't interpolate between 1 and 3, I should interpolate from 1 to 2, then from 2 to 3 to get the best path private void TryConsumeFromBuffer() { int consumedCount = 0; @@ -109,7 +111,7 @@ private void TryConsumeFromBuffer() { var bufferedValue = m_Buffer[i]; // Consume when ready. This can consume multiple times - if (FixedOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) // todo do tick + 1 instead of changing the way tick is calculated? discuss with Luke + if (FixedOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) { if (m_LifetimeConsumedCount == 0) { @@ -159,7 +161,7 @@ public T Update(float deltaTime) t = (float) ((RenderTime - FixedOrTime(m_StartTimeConsumed)) / range); } - // if (t > 5) // max extrapolation + if (t > 3) // max extrapolation { t = 1; } diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs index 3d9bca687c..6d55374080 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs @@ -1,5 +1,3 @@ -using UnityEngine; - namespace Unity.Netcode { public interface IInterpolator diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs index 6b3091640e..397ac20dbb 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; namespace Unity.Netcode @@ -68,6 +67,7 @@ public void ResetTo(T targetValue) public bool UseFixedUpdate { get; set; } } + public class SimpleInterpolatorFloat : SimpleInterpolator { protected override float Interpolate(float a, float b, float time) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 2dd46e665c..11f0c445b6 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; using UnityEngine; using Random = UnityEngine.Random; @@ -210,6 +209,8 @@ public void NetworkSerialize(NetworkSerializer serializer) public bool UseFixedUpdate = true; + private int k_debugDrawLineTime = 10; + public virtual IInterpolator PositionXInterpolator { get; set; } public virtual IInterpolator PositionYInterpolator { get; set; } public virtual IInterpolator PositionZInterpolator { get; set; } @@ -252,9 +253,6 @@ public IEnumerable> AllFloatInterpolators() yield return ScaleZInterpolator; } - private int k_debugDrawLineTime = 10; - - private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native internal readonly NetworkVariable ReplNetworkState = new NetworkVariable(new NetworkState()); @@ -263,19 +261,15 @@ public IEnumerable> AllFloatInterpolators() public void ResetCurrentInterpolatedState() { - var tickRate = NetworkManager.Singleton.NetworkConfig.TickRate; - for (int i = 0; i < 1; i++) // repeat this twice to set both "start" and "end" values - { - ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); - ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); - ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); + PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); + PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); + PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); - PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); - PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); - PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); + RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); - RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); - } + ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); + ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); + ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); } // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made @@ -451,7 +445,6 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) interpolatedScale.z = ScaleZInterpolator.GetInterpolatedValue(); } - PrevNetworkState = networkState; // Position Apply if (networkState.HasPositionX || networkState.HasPositionY || networkState.HasPositionZ) { diff --git a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs index e17a5ed176..4a90602916 100644 --- a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs +++ b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs @@ -106,8 +106,7 @@ public NetworkTime ToFixedTime() private void UpdateCache() { double d = m_TimeSec / m_TickInterval; - m_CachedTick = (int)d; // rounding up. if you're in tick 3.123, you're really in the tick 4 - // m_CachedTick = (int)Math.Ceiling(d); // rounding up. if you're in tick 3.123, you're really in the tick 4 + m_CachedTick = (int)d; m_CachedTickOffset = ((d - Math.Truncate(d)) * m_TickInterval); // This handles negative time, decreases tick by 1 and makes offset positive. diff --git a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs index f283d26b19..25c77665a0 100644 --- a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs +++ b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs @@ -1,5 +1,4 @@ using System; -using UnityEngine; namespace Unity.Netcode { @@ -21,8 +20,6 @@ public class NetworkTimeSystem /// public double LocalBufferSec { get; set; } - private double m_ServerBufferSec; - /// /// Gets or sets the amount of the time in seconds the client should buffer incoming messages from the server. This increases server time. /// A higher value increases latency but makes the game look more smooth in bad networking conditions. diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index 4c572213e6..64a665f9e9 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -23,22 +23,53 @@ public MockInterpolatorTime(double serverTime, int tickRate) } const int k_MockTickRate = 1; + NetworkTime T(float time, int tickRate = k_MockTickRate) { return new NetworkTime(tickRate, timeSec: time); } - /* - * TODO - * test normal interpolation - * test with some jitter - * test with high jitter - * test with too high jitter - * test with negative time should fail - * check https://github.com/vis2k/Mirror/blob/02cc3de7b8889f477118e20379b584eaf8bd43b6/Assets/Mirror/Tests/Editor/SnapshotInterpolationTests.cs - * for examples of tests - * Test every single public API - */ + [Test] + public void TestSimpleInterpolator() + { + var interpolator = new SimpleInterpolatorFloat(); + interpolator.UseFixedUpdate = false; + + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); + + interpolator.AddMeasurement(10, default); + var val = interpolator.Update(0.05f); + Assert.That(val, Is.EqualTo(5f)); + } + + [Test] + public void TestReset() + { + void DoTest(Action> specialAction = null) where TypeToTest : IInterpolator, new() + { + var interpolator = new TypeToTest(); + specialAction?.Invoke(interpolator); + interpolator.AddMeasurement(5, T(1.0f)); + var initVal = interpolator.Update(10); // big value + Assert.That(initVal, Is.EqualTo(5f)); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(5f)); + + interpolator.ResetTo(100f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(100f)); + var val = interpolator.Update(1f); + Assert.That(val, Is.EqualTo(100f)); + } + + DoTest>(); + DoTest(); + DoTest(interpolator => + { + var timeMock = new MockInterpolatorTime(0, k_MockTickRate); + ((BufferedLinearInterpolatorFloat) interpolator).interpolatorTime = timeMock; + timeMock.BufferedServerTime = 100f; + } + ); + } [Test] public void NormalUsage() @@ -133,6 +164,8 @@ public void MessageLoss() // message time=3 was lost interpolator.AddMeasurement(4f, T(4f)); interpolator.AddMeasurement(5f, T(5f)); + // message time=6 was lost + interpolator.AddMeasurement(100f, T(7f)); // high value to produce a misprediction mockBufferedTime.BufferedServerTime = 2f; interpolator.Update(2f); @@ -146,10 +179,10 @@ public void MessageLoss() interpolator.Update(0.5f); Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f)); - // pausing until buffer reaches next value in buffer, should have been 2.5f, pausing to last value 2f + // extrapolating to 2.5 mockBufferedTime.BufferedServerTime = 3.5f; interpolator.Update(0.5f); - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2f)); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(2.5f)); // next value skips to where it was supposed to be once buffer time is showing the next value mockBufferedTime.BufferedServerTime = 4f; @@ -164,6 +197,26 @@ public void MessageLoss() mockBufferedTime.BufferedServerTime = 5f; interpolator.Update(0.5f); Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(4f)); + + // lost time=6, extrapolating + mockBufferedTime.BufferedServerTime = 5.5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(4.5f)); + + mockBufferedTime.BufferedServerTime = 6.0f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(5f)); + + // misprediction + mockBufferedTime.BufferedServerTime = 6.5f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(5.5f)); + + // lerp to right value + mockBufferedTime.BufferedServerTime = 7.0f; + interpolator.Update(0.5f); + Assert.That(interpolator.GetInterpolatedValue(), Is.GreaterThan(6.0f)); + Assert.That(interpolator.GetInterpolatedValue(), Is.LessThanOrEqualTo(100f)); } [Test] @@ -314,11 +367,18 @@ public void TestDuplicatedValues() mockBufferedTime.BufferedServerTime = 3f; interp = interpolator.Update(0.5f); Assert.That(interp, Is.EqualTo(2f)); + + // with unclamped interpolation, we continue mispredicting since the two last values are actually treated as the same. Therefore we're not stopping at "2" mockBufferedTime.BufferedServerTime = 3.5f; interp = interpolator.Update(0.5f); - Assert.That(interp, Is.EqualTo(2f)); + Assert.That(interp, Is.EqualTo(2.5f)); mockBufferedTime.BufferedServerTime = 4f; interp = interpolator.Update(0.5f); + Assert.That(interp, Is.EqualTo(3f)); + + // we add a measurement with an updated time + interpolator.AddMeasurement(2f, T(3f)); + interp = interpolator.Update(0.5f); Assert.That(interp, Is.EqualTo(2f)); } } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs index 4f0584b19b..13a4c8fb7e 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs @@ -1,6 +1,7 @@ using System.Collections; using Unity.Netcode.Prototyping; using NUnit.Framework; +using UnityEngine; using UnityEngine.TestTools; namespace Unity.Netcode.RuntimeTests @@ -42,7 +43,8 @@ public override IEnumerator Setup() } // TODO: rewrite after perms & authority changes - /* [UnityTest] + /* + [UnityTest] [TestCase(true, NetworkAuthority.Client, ExpectedResult = null)] [TestCase(true, NetworkAuthority.Server, ExpectedResult = null)] [TestCase(false, NetworkAuthority.Client, ExpectedResult = null)] @@ -53,15 +55,11 @@ public IEnumerator TestAuthoritativeTransformChangeOneAtATime(bool testLocalTran var networkTransform = (authorityToTest == NetworkAuthority.Client ? m_ClientSideClientPlayer : m_ServerSideClientPlayer).GetComponent(); networkTransform.SetAuthority(authorityToTest); - networkTransform.PositionInterpolator = new NoInterpolator(); - networkTransform.RotationInterpolator = new NoInterpolator(); - networkTransform.ScaleInterpolator = new NoInterpolator(); + networkTransform.InitializeInterpolator, NoInterpolator, NoInterpolator>(); var otherSideNetworkTransform = (authorityToTest == NetworkAuthority.Client ? m_ServerSideClientPlayer : m_ClientSideClientPlayer).GetComponent(); otherSideNetworkTransform.SetAuthority(authorityToTest); - otherSideNetworkTransform.PositionInterpolator = new NoInterpolator(); - otherSideNetworkTransform.RotationInterpolator = new NoInterpolator(); - otherSideNetworkTransform.ScaleInterpolator = new NoInterpolator(); + otherSideNetworkTransform.InitializeInterpolator, NoInterpolator, NoInterpolator>(); static bool HasAuthorityFunc(NetworkTransform transform) { @@ -131,15 +129,11 @@ public IEnumerator TestCantChangeTransformFromOtherSideAuthority(NetworkAuthorit // test server can't change client authoritative transform var networkTransform = (authorityToTest == NetworkAuthority.Client ? m_ClientSideClientPlayer : m_ServerSideClientPlayer).GetComponent(); networkTransform.SetAuthority(authorityToTest); - networkTransform.PositionInterpolator = new NoInterpolator(); - networkTransform.RotationInterpolator = new NoInterpolator(); - networkTransform.ScaleInterpolator = new NoInterpolator(); + networkTransform.InitializeInterpolator, NoInterpolator, NoInterpolator>(); var otherSideNetworkTransform = (authorityToTest == NetworkAuthority.Client ? m_ServerSideClientPlayer : m_ClientSideClientPlayer).GetComponent(); otherSideNetworkTransform.SetAuthority(authorityToTest); - otherSideNetworkTransform.PositionInterpolator = new NoInterpolator(); - otherSideNetworkTransform.RotationInterpolator = new NoInterpolator(); - otherSideNetworkTransform.ScaleInterpolator = new NoInterpolator(); + otherSideNetworkTransform.InitializeInterpolator, NoInterpolator, NoInterpolator>(); Assert.AreEqual(Vector3.zero, otherSideNetworkTransform.transform.position, "other side pos should be zero at first"); // sanity check otherSideNetworkTransform.transform.position = new Vector3(4, 5, 6); @@ -147,7 +141,8 @@ public IEnumerator TestCantChangeTransformFromOtherSideAuthority(NetworkAuthorit yield return new WaitForFixedUpdate(); Assert.AreEqual(Vector3.zero, otherSideNetworkTransform.transform.position, "got authority error, but other side still moved!"); - } */ + } + //*/ [UnityTearDown] public override IEnumerator Teardown() diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 7d7f227c45..4cec43f1f1 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -1178,6 +1178,165 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 106591948} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &108150024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 108150031} + - component: {fileID: 108150030} + - component: {fileID: 108150029} + - component: {fileID: 108150028} + - component: {fileID: 108150027} + - component: {fileID: 108150026} + - component: {fileID: 108150025} + m_Layer: 0 + m_Name: NetworkTransformBuffered (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &108150025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 + InLocalSpace: 1 + Interpolate: 0 + FixedSendsPerSecond: 50 + UseFixedUpdate: 1 +--- !u!114 &108150026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveSpeed: 5 + m_RotationSpeed: 30 + m_RunServerOnly: 1 + m_RunInUpdate: 1 +--- !u!114 &108150027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 3052257193 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!65 &108150028 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &108150029 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 16358fcb4e0c94cc8b980fbb17259843, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &108150030 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &108150031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 108150024} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.25, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 153211162} + m_Father: {fileID: 0} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &110121429 GameObject: m_ObjectHideFlags: 0 @@ -1658,6 +1817,101 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 150536644} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &153211161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 153211162} + - component: {fileID: 153211165} + - component: {fileID: 153211164} + - component: {fileID: 153211163} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &153211162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153211161} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.455, y: 0.296, z: 0.312} + m_LocalScale: {x: 0.55787, y: 0.55787, z: 0.55787} + m_Children: [] + m_Father: {fileID: 108150031} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &153211163 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153211161} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &153211164 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153211161} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &153211165 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153211161} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &169380227 GameObject: m_ObjectHideFlags: 0 @@ -6559,7 +6813,7 @@ MonoBehaviour: m_EditorClassIdentifier: DontDestroy: 1 RunInBackground: 1 - LogLevel: 0 + LogLevel: 1 NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 620561613} @@ -7824,7 +8078,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 m_RunServerOnly: 1 - m_RunInUpdate: 0 + m_RunInUpdate: 1 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 From 6c9b905d2a6ed29a0319681053103cf5c2e271e5 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 2 Sep 2021 22:44:45 -0400 Subject: [PATCH 43/74] # --- .../BufferedLinearInterpolator.cs | 35 +++----- .../Prototyping/NetworkTransform.cs | 88 +++++++++---------- .../Tests/Editor/InterpolatorTests.cs | 4 +- .../Tests/Editor/InterpolatorTests.cs.meta | 11 +++ 4 files changed, 64 insertions(+), 74 deletions(-) create mode 100644 com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs.meta diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 4a3c22ff27..bc68ebf14b 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -11,14 +11,11 @@ namespace Unity.Netcode /// public abstract class BufferedLinearInterpolator : IInterpolator where T : struct { - // public const float InterpolationConfigTimeSec = 0.100f; // todo expose global config, todo use in actual code - // interface for mock testing, abstracting away external systems public interface IInterpolatorTime { public double BufferedServerTime { get; } public double BufferedServerFixedTime { get; } - public double LocalTime { get; } public int TickRate { get; } } @@ -26,7 +23,6 @@ private class InterpolatorTime : IInterpolatorTime { public double BufferedServerTime => NetworkManager.Singleton.ServerTime.Time; public double BufferedServerFixedTime => NetworkManager.Singleton.ServerTime.FixedTime; - public double LocalTime => NetworkManager.Singleton.LocalTime.Time; public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } @@ -58,10 +54,6 @@ private struct BufferedItem private int m_LifetimeConsumedCount; - public BufferedLinearInterpolator() - { - } - public void Start() { } @@ -88,15 +80,13 @@ public void ResetTo(T targetValue) m_EndTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); m_StartTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); - simpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position + SimpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position Update(0); } - double FixedOrTime(NetworkTime t) + private double FixedOrTime(NetworkTime t) { - if (UseFixedUpdate) return t.FixedTime; - - return t.Time; + return UseFixedUpdate ? t.FixedTime : t.Time; } // todo if I have value 1, 2, 3 and I'm treating 1 to 3, I shouldn't interpolate between 1 and 3, I should interpolate from 1 to 2, then from 2 to 3 to get the best path @@ -166,10 +156,13 @@ public T Update(float deltaTime) t = 1; } - Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); // todo remove GC alloc this creates + if (Debug.isDebugBuild) + { + Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); + } - simpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump - m_CurrentInterpValue = simpleInterpolator.Update(deltaTime); + SimpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump + m_CurrentInterpValue = SimpleInterpolator.Update(deltaTime); } return m_CurrentInterpValue; @@ -205,7 +198,7 @@ public void OnDestroy() protected abstract T Interpolate(T start, T end, float time); - protected abstract SimpleInterpolator simpleInterpolator { get; } + protected abstract SimpleInterpolator SimpleInterpolator { get; } } public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator @@ -215,7 +208,7 @@ protected override float Interpolate(float start, float end, float time) return Mathf.LerpUnclamped(start, end, time); } - protected override SimpleInterpolator simpleInterpolator { get; } = new SimpleInterpolatorFloat(); + protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorFloat(); } public class BufferedLinearInterpolatorFloatForScale : BufferedLinearInterpolatorFloat @@ -234,10 +227,6 @@ protected override Quaternion Interpolate(Quaternion start, Quaternion end, floa return Quaternion.SlerpUnclamped(start, end, time); } - public BufferedLinearInterpolatorQuaternion() - { - } - - protected override SimpleInterpolator simpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); + protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 11f0c445b6..9f30aa4a93 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -209,27 +209,28 @@ public void NetworkSerialize(NetworkSerializer serializer) public bool UseFixedUpdate = true; - private int k_debugDrawLineTime = 10; + private const int k_DebugDrawLineTime = 10; - public virtual IInterpolator PositionXInterpolator { get; set; } - public virtual IInterpolator PositionYInterpolator { get; set; } - public virtual IInterpolator PositionZInterpolator { get; set; } - public virtual IInterpolator RotationInterpolator { get; set; } // rotation is a single Quaternion since each euler axis will affect the quaternion's final value - public virtual IInterpolator ScaleXInterpolator { get; set; } - public virtual IInterpolator ScaleYInterpolator { get; set; } - public virtual IInterpolator ScaleZInterpolator { get; set; } + protected virtual IInterpolator PositionXInterpolator { get; set; } + protected virtual IInterpolator PositionYInterpolator { get; set; } + protected virtual IInterpolator PositionZInterpolator { get; set; } + protected virtual IInterpolator RotationInterpolator { get; set; } // rotation is a single Quaternion since each euler axis will affect the quaternion's final value + protected virtual IInterpolator ScaleXInterpolator { get; set; } + protected virtual IInterpolator ScaleYInterpolator { get; set; } + protected virtual IInterpolator ScaleZInterpolator { get; set; } - public void InitializeInterpolator() where Pos : IInterpolator, new() where Rot : IInterpolator, new() where Scale : IInterpolator, new() + public void InitializeInterpolator() where TPos : IInterpolator, new() where TRot : IInterpolator, new() where TScale : IInterpolator, new() { + AllFloatInterpolators.Clear(); if (Interpolate) { - PositionXInterpolator = new Pos(); - PositionYInterpolator = new Pos(); - PositionZInterpolator = new Pos(); - RotationInterpolator = new Rot(); - ScaleXInterpolator = new Scale(); - ScaleYInterpolator = new Scale(); - ScaleZInterpolator = new Scale(); + PositionXInterpolator = new TPos(); + PositionYInterpolator = new TPos(); + PositionZInterpolator = new TPos(); + RotationInterpolator = new TRot(); + ScaleXInterpolator = new TScale(); + ScaleYInterpolator = new TScale(); + ScaleZInterpolator = new TScale(); } else { @@ -241,18 +242,18 @@ public void NetworkSerialize(NetworkSerializer serializer) ScaleYInterpolator = new NoInterpolator(); ScaleZInterpolator = new NoInterpolator(); } - } - public IEnumerable> AllFloatInterpolators() - { - yield return PositionXInterpolator; - yield return PositionYInterpolator; - yield return PositionZInterpolator; - yield return ScaleXInterpolator; - yield return ScaleYInterpolator; - yield return ScaleZInterpolator; + AllFloatInterpolators.Add(PositionXInterpolator); + AllFloatInterpolators.Add(PositionYInterpolator); + AllFloatInterpolators.Add(PositionZInterpolator); + AllFloatInterpolators.Add(ScaleXInterpolator); + AllFloatInterpolators.Add(ScaleYInterpolator); + AllFloatInterpolators.Add(ScaleZInterpolator); } + // public IInterpolator[] all = new[]; + private readonly List> AllFloatInterpolators = new List>(6); + private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native internal readonly NetworkVariable ReplNetworkState = new NetworkVariable(new NetworkState()); @@ -293,7 +294,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double if (InLocalSpace != networkState.InLocalSpace) { networkState.InLocalSpace = InLocalSpace; - isDirty |= true; + isDirty = true; } if (SyncPositionX && @@ -511,17 +512,17 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) if (newState.HasPositionX) { - PositionXInterpolator.AddMeasurement(newState.Position.x, sentTime); + PositionXInterpolator.AddMeasurement(newState.PositionX, sentTime); } if (newState.HasPositionY) { - PositionYInterpolator.AddMeasurement(newState.Position.y, sentTime); + PositionYInterpolator.AddMeasurement(newState.PositionY, sentTime); } if (newState.HasPositionZ) { - PositionZInterpolator.AddMeasurement(newState.Position.z, sentTime); + PositionZInterpolator.AddMeasurement(newState.PositionZ, sentTime); } RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); @@ -544,29 +545,20 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) { var pos = new Vector3(newState.PositionX, newState.PositionY, newState.PositionZ); - Debug.DrawLine(pos, pos + Vector3.up + Vector3.left * Random.Range(0.5f, 2f), Color.green, k_debugDrawLineTime, false); + Debug.DrawLine(pos, pos + Vector3.up + Vector3.left * Random.Range(0.5f, 2f), Color.green, k_DebugDrawLineTime, false); } } private void Awake() { m_Transform = transform; - bool interpolatorAlreadySet = false; - foreach (var interpolator in AllFloatInterpolators()) - { - if (interpolator != null || RotationInterpolator != null) - { - interpolatorAlreadySet = true; - break; - } - } - if (!interpolatorAlreadySet) + if (AllFloatInterpolators.Count == 0) { InitializeInterpolator(); } - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.Awake(); interpolator.UseFixedUpdate = UseFixedUpdate; @@ -596,7 +588,7 @@ private void Awake() public void Start() { - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.Start(); } @@ -606,7 +598,7 @@ public void Start() public void OnEnable() { - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.OnEnable(); } @@ -620,7 +612,7 @@ public override void OnNetworkSpawn() { ResetCurrentInterpolatedState(); // useful for late joining - foreach (var interpolator in AllFloatInterpolators()) // todo remove GC alloc this creates + foreach (var interpolator in AllFloatInterpolators) // todo remove GC alloc this creates { interpolator.OnNetworkSpawn(); } @@ -635,7 +627,7 @@ private void OnDestroy() { ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.OnDestroy(); } @@ -680,7 +672,7 @@ private void FixedUpdate() ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } @@ -704,7 +696,7 @@ private void Update() // apply interpolated value if (!IsServer && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) { - foreach (var interpolator in AllFloatInterpolators()) + foreach (var interpolator in AllFloatInterpolators) { interpolator.Update(Time.deltaTime); } @@ -714,7 +706,7 @@ private void Update() if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) { var interpolatedPosition = new Vector3(PositionXInterpolator.GetInterpolatedValue(), PositionYInterpolator.GetInterpolatedValue(), PositionZInterpolator.GetInterpolatedValue()); - Debug.DrawLine(interpolatedPosition, interpolatedPosition + Vector3.up, Color.magenta, k_debugDrawLineTime, false); + Debug.DrawLine(interpolatedPosition, interpolatedPosition + Vector3.up, Color.magenta, k_DebugDrawLineTime, false); } ApplyNetworkStateFromAuthority(ReplNetworkState.Value); diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index 64a665f9e9..c7d40b05b9 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -3,7 +3,7 @@ namespace Unity.Netcode.EditorTests { - public class BufferedInterpolatorTests + public class InterpolatorTests { private const float k_Precision = 0.00000001f; @@ -11,14 +11,12 @@ private class MockInterpolatorTime : BufferedLinearInterpolator.IInterpol { public double BufferedServerTime { get; set; } public double BufferedServerFixedTime { get; } - public double LocalTime { get; } public int TickRate { get; set; } public MockInterpolatorTime(double serverTime, int tickRate) { BufferedServerTime = serverTime; TickRate = tickRate; - LocalTime = serverTime; // todo } } diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs.meta b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs.meta new file mode 100644 index 0000000000..973fe501b9 --- /dev/null +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5cfbc170161c4e95ac6124ee43068b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From ae567487500c4eb6e63f75305ea8eeffcd5059cf Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 2 Sep 2021 22:50:09 -0400 Subject: [PATCH 44/74] # --- .../Prototyping/NetworkTransform.cs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 9f30aa4a93..5ed5b6081c 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -221,7 +221,7 @@ public void NetworkSerialize(NetworkSerializer serializer) public void InitializeInterpolator() where TPos : IInterpolator, new() where TRot : IInterpolator, new() where TScale : IInterpolator, new() { - AllFloatInterpolators.Clear(); + m_AllFloatInterpolators.Clear(); if (Interpolate) { PositionXInterpolator = new TPos(); @@ -243,16 +243,15 @@ public void NetworkSerialize(NetworkSerializer serializer) ScaleZInterpolator = new NoInterpolator(); } - AllFloatInterpolators.Add(PositionXInterpolator); - AllFloatInterpolators.Add(PositionYInterpolator); - AllFloatInterpolators.Add(PositionZInterpolator); - AllFloatInterpolators.Add(ScaleXInterpolator); - AllFloatInterpolators.Add(ScaleYInterpolator); - AllFloatInterpolators.Add(ScaleZInterpolator); + m_AllFloatInterpolators.Add(PositionXInterpolator); + m_AllFloatInterpolators.Add(PositionYInterpolator); + m_AllFloatInterpolators.Add(PositionZInterpolator); + m_AllFloatInterpolators.Add(ScaleXInterpolator); + m_AllFloatInterpolators.Add(ScaleYInterpolator); + m_AllFloatInterpolators.Add(ScaleZInterpolator); } - // public IInterpolator[] all = new[]; - private readonly List> AllFloatInterpolators = new List>(6); + private readonly List> m_AllFloatInterpolators = new List>(6); private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -553,12 +552,12 @@ private void Awake() { m_Transform = transform; - if (AllFloatInterpolators.Count == 0) + if (m_AllFloatInterpolators.Count == 0) { InitializeInterpolator(); } - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.Awake(); interpolator.UseFixedUpdate = UseFixedUpdate; @@ -588,7 +587,7 @@ private void Awake() public void Start() { - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.Start(); } @@ -598,7 +597,7 @@ public void Start() public void OnEnable() { - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.OnEnable(); } @@ -612,10 +611,11 @@ public override void OnNetworkSpawn() { ResetCurrentInterpolatedState(); // useful for late joining - foreach (var interpolator in AllFloatInterpolators) // todo remove GC alloc this creates + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.OnNetworkSpawn(); } + // todo cache network manager to remove some of the time it takes to get it RotationInterpolator.OnNetworkSpawn(); @@ -627,7 +627,7 @@ private void OnDestroy() { ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.OnDestroy(); } @@ -672,7 +672,7 @@ private void FixedUpdate() ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } @@ -696,7 +696,7 @@ private void Update() // apply interpolated value if (!IsServer && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) { - foreach (var interpolator in AllFloatInterpolators) + foreach (var interpolator in m_AllFloatInterpolators) { interpolator.Update(Time.deltaTime); } From 83998c714acd82a4ed73b576bc2ed1ef88e218bb Mon Sep 17 00:00:00 2001 From: Sam Bellomo <71790295+SamuelBellomo@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:13:28 -0400 Subject: [PATCH 45/74] Update com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs Co-authored-by: M. Fatih MAR --- .../Prototyping/Interpolator/BufferedLinearInterpolator.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index bc68ebf14b..5f7e75d14d 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -14,9 +14,9 @@ public abstract class BufferedLinearInterpolator : IInterpolator where T : // interface for mock testing, abstracting away external systems public interface IInterpolatorTime { - public double BufferedServerTime { get; } - public double BufferedServerFixedTime { get; } - public int TickRate { get; } + double BufferedServerTime { get; } + double BufferedServerFixedTime { get; } + int TickRate { get; } } private class InterpolatorTime : IInterpolatorTime From 68ae5be6e9b0fa39a39b9e349b82d3c600815440 Mon Sep 17 00:00:00 2001 From: Sam Bellomo <71790295+SamuelBellomo@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:14:10 -0400 Subject: [PATCH 46/74] Update com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs --- .../Prototyping/Interpolator/BufferedLinearInterpolator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 5f7e75d14d..1eb627a070 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -6,7 +6,7 @@ namespace Unity.Netcode { /// /// Solves for incoming values that are jittered - /// Partially solves for message loss. Unclamped lerping will help hide it, but not completely + /// Partially solves for message loss. Unclamped lerping helps hide this, but not completely /// /// public abstract class BufferedLinearInterpolator : IInterpolator where T : struct From 9432c94dda86d07e367de8b2701c000432c7ba12 Mon Sep 17 00:00:00 2001 From: Sam Bellomo <71790295+SamuelBellomo@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:16:07 -0400 Subject: [PATCH 47/74] Update com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs Co-authored-by: M. Fatih MAR --- .../Prototyping/Interpolator/BufferedLinearInterpolator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 1eb627a070..b8a570741e 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -158,7 +158,7 @@ public T Update(float deltaTime) if (Debug.isDebugBuild) { - Debug.Assert(t >= 0, $"t must be bigger or equal than 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); + Debug.Assert(t >= 0, $"t must be bigger than or equal to 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); } SimpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump From 1ebd1e5b001ba1d6ce55a2a3709b022331cb6e17 Mon Sep 17 00:00:00 2001 From: Sam Bellomo <71790295+SamuelBellomo@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:20:42 -0400 Subject: [PATCH 48/74] Update com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs Co-authored-by: M. Fatih MAR --- .../Prototyping/Interpolator/IInterpolator.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs index 6d55374080..eb2700d632 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs @@ -2,16 +2,16 @@ namespace Unity.Netcode { public interface IInterpolator { - public void Awake(); - public void OnNetworkSpawn(); - public void Start(); - public void OnEnable(); - public T Update(float deltaTime); - public void FixedUpdate(float tickDeltaTime); - public void AddMeasurement(T newMeasurement, NetworkTime sentTime); - public T GetInterpolatedValue(); - public void OnDestroy(); - public void ResetTo(T targetValue); - public bool UseFixedUpdate { get; set; } + void Awake(); + void OnNetworkSpawn(); + void Start(); + void OnEnable(); + T Update(float deltaTime); + void FixedUpdate(float tickDeltaTime); + void AddMeasurement(T newMeasurement, NetworkTime sentTime); + T GetInterpolatedValue(); + void OnDestroy(); + void ResetTo(T targetValue); + bool UseFixedUpdate { get; set; } } } From 5b1761b0d8c659ff53d9bd01ddbdcdf581cab389 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 7 Sep 2021 12:39:41 -0400 Subject: [PATCH 49/74] code review feedback --- .../BufferedLinearInterpolator.cs | 12 +++++----- .../Tests/Editor/InterpolatorTests.cs | 24 +++++++++---------- testproject/Assets/Scripts/MoveInCircle.cs | 16 +++++++++---- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index bc68ebf14b..87908256fa 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -6,7 +6,7 @@ namespace Unity.Netcode { /// /// Solves for incoming values that are jittered - /// Partially solves for message loss. Unclamped lerping will help hide it, but not completely + /// Partially solves for message loss. Unclamped lerping helps hide this, but not completely /// /// public abstract class BufferedLinearInterpolator : IInterpolator where T : struct @@ -26,7 +26,7 @@ private class InterpolatorTime : IInterpolatorTime public int TickRate => NetworkManager.Singleton.ServerTime.TickRate; } - internal IInterpolatorTime interpolatorTime = new InterpolatorTime(); + internal IInterpolatorTime InterpolatorTimeProxy = new InterpolatorTime(); private struct BufferedItem { @@ -39,8 +39,8 @@ private struct BufferedItem /// /// Override this if you want configurable buffering, right now using ServerTick's own global buffering /// - protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? interpolatorTime.BufferedServerFixedTime : interpolatorTime.BufferedServerTime; - protected virtual double RenderTime => interpolatorTime.BufferedServerTime - 1f / interpolatorTime.TickRate; + protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? InterpolatorTimeProxy.BufferedServerFixedTime : InterpolatorTimeProxy.BufferedServerTime; + protected virtual double RenderTime => InterpolatorTimeProxy.BufferedServerTime - 1f / InterpolatorTimeProxy.TickRate; private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -77,8 +77,8 @@ public void ResetTo(T targetValue) m_InterpEndValue = targetValue; m_CurrentInterpValue = targetValue; m_Buffer.Clear(); - m_EndTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); - m_StartTimeConsumed = new NetworkTime(interpolatorTime.TickRate, 0); + m_EndTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); + m_StartTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); SimpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position Update(0); diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index c7d40b05b9..bed79b1dc5 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -20,9 +20,9 @@ public MockInterpolatorTime(double serverTime, int tickRate) } } - const int k_MockTickRate = 1; + private const int k_MockTickRate = 1; - NetworkTime T(float time, int tickRate = k_MockTickRate) + private NetworkTime T(float time, int tickRate = k_MockTickRate) { return new NetworkTime(tickRate, timeSec: time); } @@ -63,7 +63,7 @@ public void TestReset() DoTest(interpolator => { var timeMock = new MockInterpolatorTime(0, k_MockTickRate); - ((BufferedLinearInterpolatorFloat) interpolator).interpolatorTime = timeMock; + ((BufferedLinearInterpolatorFloat) interpolator).InterpolatorTimeProxy = timeMock; timeMock.BufferedServerTime = 100f; } ); @@ -77,7 +77,7 @@ public void NormalUsage() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); @@ -124,7 +124,7 @@ public void OutOfOrderShouldStillWork() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(0, T(0f)); interpolator.AddMeasurement(2, T(2f)); @@ -155,7 +155,7 @@ public void MessageLoss() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(1f, T(1f)); interpolator.AddMeasurement(2f, T(2f)); @@ -223,7 +223,7 @@ public void AddFirstMeasurement() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(2f, T(1f)); interpolator.AddMeasurement(3f, T(2f)); @@ -252,7 +252,7 @@ public void JumpToEachValueIfDeltaTimeTooBig() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(2f, T(1f)); interpolator.AddMeasurement(3f, T(2f)); @@ -272,7 +272,7 @@ public void JumpToLastValueFromStart() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(1f, T(1f)); interpolator.AddMeasurement(2f, T(2f)); @@ -304,7 +304,7 @@ public void TestBufferSizeLimit() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; // set first value interpolator.AddMeasurement(-1f, T(1f)); @@ -338,7 +338,7 @@ public void TestUpdatingInterpolatorWithNoData() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; // invalid case, this is undefined behaviour Assert.Throws(() => interpolator.Update(1f)); @@ -350,7 +350,7 @@ public void TestDuplicatedValues() var interpolator = new BufferedLinearInterpolatorFloat(); interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); - interpolator.interpolatorTime = mockBufferedTime; + interpolator.InterpolatorTimeProxy = mockBufferedTime; interpolator.AddMeasurement(1f, T(1f)); interpolator.AddMeasurement(2f, T(2f)); diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index 51218b31af..f440e6f55a 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; using Unity.Netcode; @@ -12,6 +11,7 @@ public class MoveInCircle : NetworkBehaviour [SerializeField] private bool m_RunServerOnly; + [SerializeField] private bool m_RunInUpdate; @@ -24,19 +24,25 @@ public override void OnNetworkSpawn() //NetworkManager.Singleton.NetworkTimeSystem.ServerBufferSec = 0.15f; } - void FixedUpdate() + private void FixedUpdate() { - if (m_RunInUpdate) return; + if (m_RunInUpdate) + { + return; + } Tick(true); } private void Update() { - if (!m_RunInUpdate) return; + if (!m_RunInUpdate) + { + return; + } Tick(false); } - void Tick(bool isFixed) + private void Tick(bool isFixed) { if (NetworkManager.Singleton.IsServer || !m_RunServerOnly) { From 35815a355e0623618483f73e300265789d40730d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 8 Sep 2021 18:40:29 -0400 Subject: [PATCH 50/74] cleanup, removing IInterpolator interface, removing other interpolators to centralize any future work inside the main interpolator --- .../BufferedLinearInterpolator.cs | 60 +++---- .../Prototyping/Interpolator/IInterpolator.cs | 17 -- .../Interpolator/IInterpolator.cs.meta | 11 -- .../Interpolator/NoInterpolator.cs | 54 ------- .../Interpolator/NoInterpolator.cs.meta | 11 -- .../Interpolator/SimpleInterpolator.cs | 86 ---------- .../Interpolator/SimpleInterpolator.cs.meta | 11 -- .../Prototyping/NetworkTransform.cs | 152 +++++------------- .../Tests/Editor/InterpolatorTests.cs | 49 ++---- 9 files changed, 74 insertions(+), 377 deletions(-) delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index 9adc7afe94..bf7967bd4a 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -9,7 +9,7 @@ namespace Unity.Netcode /// Partially solves for message loss. Unclamped lerping helps hide this, but not completely /// /// - public abstract class BufferedLinearInterpolator : IInterpolator where T : struct + public abstract class BufferedLinearInterpolator where T : struct { // interface for mock testing, abstracting away external systems public interface IInterpolatorTime @@ -39,8 +39,9 @@ private struct BufferedItem /// /// Override this if you want configurable buffering, right now using ServerTick's own global buffering /// - protected virtual double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? InterpolatorTimeProxy.BufferedServerFixedTime : InterpolatorTimeProxy.BufferedServerTime; - protected virtual double RenderTime => InterpolatorTimeProxy.BufferedServerTime - 1f / InterpolatorTimeProxy.TickRate; + private double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? InterpolatorTimeProxy.BufferedServerFixedTime : InterpolatorTimeProxy.BufferedServerTime; + + private double RenderTime => InterpolatorTimeProxy.BufferedServerTime - 1f / InterpolatorTimeProxy.TickRate; private T m_InterpStartValue; private T m_CurrentInterpValue; @@ -54,22 +55,6 @@ private struct BufferedItem private int m_LifetimeConsumedCount; - public void Start() - { - } - - public void OnEnable() - { - } - - public void Awake() - { - } - - public void OnNetworkSpawn() - { - } - public void ResetTo(T targetValue) { m_LifetimeConsumedCount = 1; @@ -80,7 +65,7 @@ public void ResetTo(T targetValue) m_EndTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); m_StartTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); - SimpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position + // SimpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position Update(0); } @@ -161,17 +146,14 @@ public T Update(float deltaTime) Debug.Assert(t >= 0, $"t must be bigger than or equal to 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); } - SimpleInterpolator.AddMeasurement(Interpolate(m_InterpStartValue, m_InterpEndValue, t), default); // using simple interpolation so there's no jump - m_CurrentInterpValue = SimpleInterpolator.Update(deltaTime); + var target = InterpolateUnclamped(m_InterpStartValue, m_InterpEndValue, t); + float maxInterpTime = 0.1f; + m_CurrentInterpValue = Interpolate(m_CurrentInterpValue, target, deltaTime / maxInterpTime); } return m_CurrentInterpValue; } - public void FixedUpdate(float fixedDeltaTime) - { - } - public void AddMeasurement(T newMeasurement, NetworkTime sentTime) { if (m_Buffer.Count >= k_BufferSizeLimit) @@ -192,41 +174,39 @@ public T GetInterpolatedValue() return m_CurrentInterpValue; } - public void OnDestroy() - { - } - protected abstract T Interpolate(T start, T end, float time); + protected abstract T InterpolateUnclamped(T start, T end, float time); - protected abstract SimpleInterpolator SimpleInterpolator { get; } + // protected abstract SimpleInterpolator SimpleInterpolator { get; } } public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator { - protected override float Interpolate(float start, float end, float time) + protected override float InterpolateUnclamped(float start, float end, float time) { return Mathf.LerpUnclamped(start, end, time); } - protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorFloat(); - } - - public class BufferedLinearInterpolatorFloatForScale : BufferedLinearInterpolatorFloat - { protected override float Interpolate(float start, float end, float time) { - // scale can't be negative, stopping negative extrapolation - return Mathf.Max(Mathf.LerpUnclamped(start, end, time), 0); + return Mathf.Lerp(start, end, time); } + + // protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorFloat(); } public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator { + protected override Quaternion InterpolateUnclamped(Quaternion start, Quaternion end, float time) + { + return Quaternion.SlerpUnclamped(start, end, time); + } + protected override Quaternion Interpolate(Quaternion start, Quaternion end, float time) { return Quaternion.SlerpUnclamped(start, end, time); } - protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); + // protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); } } \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs deleted file mode 100644 index eb2700d632..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Unity.Netcode -{ - public interface IInterpolator - { - void Awake(); - void OnNetworkSpawn(); - void Start(); - void OnEnable(); - T Update(float deltaTime); - void FixedUpdate(float tickDeltaTime); - void AddMeasurement(T newMeasurement, NetworkTime sentTime); - T GetInterpolatedValue(); - void OnDestroy(); - void ResetTo(T targetValue); - bool UseFixedUpdate { get; set; } - } -} diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta deleted file mode 100644 index dcef404a65..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/IInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 071f976e9c2d74c5bb836da710fe368e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs deleted file mode 100644 index fb7c9e58b9..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs +++ /dev/null @@ -1,54 +0,0 @@ -namespace Unity.Netcode -{ - public class NoInterpolator : IInterpolator - { - private T m_Current; - - public void Awake() - { - } - - public void OnNetworkSpawn() - { - } - - public void Start() - { - } - - public void OnEnable() - { - } - - public T Update(float deltaTime) - { - // nothing - return GetInterpolatedValue(); - } - - public void FixedUpdate(float fixedDeltaTime) - { - } - - public void AddMeasurement(T newMeasurement, NetworkTime sentTick) - { - m_Current = newMeasurement; - } - - public T GetInterpolatedValue() - { - return m_Current; - } - - public void OnDestroy() - { - } - - public void ResetTo(T targetValue) - { - m_Current = targetValue; - } - - public bool UseFixedUpdate { get; set; } - } -} \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta deleted file mode 100644 index b5c15e25de..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/NoInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9f4a8ff3425ce44f1abd995d1a4f88cb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs deleted file mode 100644 index 397ac20dbb..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs +++ /dev/null @@ -1,86 +0,0 @@ -using UnityEngine; - -namespace Unity.Netcode -{ - public abstract class SimpleInterpolator : IInterpolator - { - private float m_CurrentTime; - private T m_Start; - private T m_End; - private T m_Updated; - - private const float k_MaxLerpTime = 0.1f; - - public void Awake() - { - Update(0); - } - - public void OnNetworkSpawn() - { - } - - public void Start() - { - } - - public void OnEnable() - { - } - - public T Update(float deltaTime) - { - m_CurrentTime += deltaTime; - m_Updated = Interpolate(m_Start, m_End, m_CurrentTime / k_MaxLerpTime); - return GetInterpolatedValue(); - } - - public void FixedUpdate(float fixedDeltaTime) - { - } - - public void AddMeasurement(T newMeasurement, NetworkTime sentTick) - { - m_End = newMeasurement; - m_CurrentTime = 0; - m_Start = m_Updated; - } - - public T GetInterpolatedValue() - { - return m_Updated; - } - - public void OnDestroy() - { - } - - public void ResetTo(T targetValue) - { - m_End = targetValue; - m_Start = targetValue; - m_Updated = targetValue; - m_CurrentTime = 0; - } - - protected abstract T Interpolate(T a, T b, float time); - - public bool UseFixedUpdate { get; set; } - } - - public class SimpleInterpolatorFloat : SimpleInterpolator - { - protected override float Interpolate(float a, float b, float time) - { - return Mathf.Lerp(a, b, time); - } - } - - public class SimpleInterpolatorQuaternion : SimpleInterpolator - { - protected override Quaternion Interpolate(Quaternion a, Quaternion b, float time) - { - return Quaternion.Slerp(a, b, time); - } - } -} \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta deleted file mode 100644 index 7856461e9c..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/SimpleInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 461703a2c7500460db78a7231310592b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 5ed5b6081c..005c872b9f 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -211,47 +211,15 @@ public void NetworkSerialize(NetworkSerializer serializer) private const int k_DebugDrawLineTime = 10; - protected virtual IInterpolator PositionXInterpolator { get; set; } - protected virtual IInterpolator PositionYInterpolator { get; set; } - protected virtual IInterpolator PositionZInterpolator { get; set; } - protected virtual IInterpolator RotationInterpolator { get; set; } // rotation is a single Quaternion since each euler axis will affect the quaternion's final value - protected virtual IInterpolator ScaleXInterpolator { get; set; } - protected virtual IInterpolator ScaleYInterpolator { get; set; } - protected virtual IInterpolator ScaleZInterpolator { get; set; } - - public void InitializeInterpolator() where TPos : IInterpolator, new() where TRot : IInterpolator, new() where TScale : IInterpolator, new() - { - m_AllFloatInterpolators.Clear(); - if (Interpolate) - { - PositionXInterpolator = new TPos(); - PositionYInterpolator = new TPos(); - PositionZInterpolator = new TPos(); - RotationInterpolator = new TRot(); - ScaleXInterpolator = new TScale(); - ScaleYInterpolator = new TScale(); - ScaleZInterpolator = new TScale(); - } - else - { - PositionXInterpolator = new NoInterpolator(); - PositionYInterpolator = new NoInterpolator(); - PositionZInterpolator = new NoInterpolator(); - RotationInterpolator = new NoInterpolator(); - ScaleXInterpolator = new NoInterpolator(); - ScaleYInterpolator = new NoInterpolator(); - ScaleZInterpolator = new NoInterpolator(); - } - - m_AllFloatInterpolators.Add(PositionXInterpolator); - m_AllFloatInterpolators.Add(PositionYInterpolator); - m_AllFloatInterpolators.Add(PositionZInterpolator); - m_AllFloatInterpolators.Add(ScaleXInterpolator); - m_AllFloatInterpolators.Add(ScaleYInterpolator); - m_AllFloatInterpolators.Add(ScaleZInterpolator); - } + private BufferedLinearInterpolator m_PositionXInterpolator = new BufferedLinearInterpolatorFloat(); + private BufferedLinearInterpolator m_PositionYInterpolator = new BufferedLinearInterpolatorFloat(); + private BufferedLinearInterpolator m_PositionZInterpolator = new BufferedLinearInterpolatorFloat(); + private BufferedLinearInterpolator m_RotationInterpolator = new BufferedLinearInterpolatorQuaternion(); // rotation is a single Quaternion since each euler axis will affect the quaternion's final value + private BufferedLinearInterpolator m_ScaleXInterpolator = new BufferedLinearInterpolatorFloat(); + private BufferedLinearInterpolator m_ScaleYInterpolator = new BufferedLinearInterpolatorFloat(); + private BufferedLinearInterpolator m_ScaleZInterpolator = new BufferedLinearInterpolatorFloat(); - private readonly List> m_AllFloatInterpolators = new List>(6); + private readonly List> m_AllFloatInterpolators = new List>(6); private Transform m_Transform; // cache the transform component to reduce unnecessary bounce between managed and native @@ -261,15 +229,15 @@ public void NetworkSerialize(NetworkSerializer serializer) public void ResetCurrentInterpolatedState() { - PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); - PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); - PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); + m_PositionXInterpolator.ResetTo(ReplNetworkState.Value.PositionX); + m_PositionYInterpolator.ResetTo(ReplNetworkState.Value.PositionY); + m_PositionZInterpolator.ResetTo(ReplNetworkState.Value.PositionZ); - RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); + m_RotationInterpolator.ResetTo(Quaternion.Euler(ReplNetworkState.Value.Rotation)); - ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); - ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); - ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); + m_ScaleXInterpolator.ResetTo(ReplNetworkState.Value.ScaleX); + m_ScaleYInterpolator.ResetTo(ReplNetworkState.Value.ScaleY); + m_ScaleZInterpolator.ResetTo(ReplNetworkState.Value.ScaleZ); } // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made @@ -401,48 +369,48 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) // Position Read if (networkState.HasPositionX) { - interpolatedPosition.x = PositionXInterpolator.GetInterpolatedValue(); + interpolatedPosition.x = Interpolate ? m_PositionXInterpolator.GetInterpolatedValue() : networkState.Position.x; } if (networkState.HasPositionY) { - interpolatedPosition.y = PositionYInterpolator.GetInterpolatedValue(); + interpolatedPosition.y = Interpolate ? m_PositionYInterpolator.GetInterpolatedValue() : networkState.Position.y; } if (networkState.HasPositionZ) { - interpolatedPosition.z = PositionZInterpolator.GetInterpolatedValue(); + interpolatedPosition.z = Interpolate ? m_PositionZInterpolator.GetInterpolatedValue() : networkState.Position.z; } if (networkState.HasRotAngleX) { - interpolatedRotAngles.x = RotationInterpolator.GetInterpolatedValue().eulerAngles.x; + interpolatedRotAngles.x = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.x : networkState.Rotation.x; } if (networkState.HasRotAngleY) { - interpolatedRotAngles.y = RotationInterpolator.GetInterpolatedValue().eulerAngles.y; + interpolatedRotAngles.y = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.y : networkState.Rotation.y; } if (networkState.HasRotAngleZ) { - interpolatedRotAngles.z = RotationInterpolator.GetInterpolatedValue().eulerAngles.z; + interpolatedRotAngles.z = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.z : networkState.Rotation.z; } // Scale Read if (networkState.HasScaleX) { - interpolatedScale.x = ScaleXInterpolator.GetInterpolatedValue(); + interpolatedScale.x = Interpolate ? m_ScaleXInterpolator.GetInterpolatedValue() : networkState.Scale.x; } if (networkState.HasScaleY) { - interpolatedScale.y = ScaleYInterpolator.GetInterpolatedValue(); + interpolatedScale.y = Interpolate ? m_ScaleYInterpolator.GetInterpolatedValue() : networkState.Scale.y; } if (networkState.HasScaleZ) { - interpolatedScale.z = ScaleZInterpolator.GetInterpolatedValue(); + interpolatedScale.z = Interpolate ? m_ScaleZInterpolator.GetInterpolatedValue() : networkState.Scale.z; } // Position Apply @@ -511,34 +479,34 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) if (newState.HasPositionX) { - PositionXInterpolator.AddMeasurement(newState.PositionX, sentTime); + m_PositionXInterpolator.AddMeasurement(newState.PositionX, sentTime); } if (newState.HasPositionY) { - PositionYInterpolator.AddMeasurement(newState.PositionY, sentTime); + m_PositionYInterpolator.AddMeasurement(newState.PositionY, sentTime); } if (newState.HasPositionZ) { - PositionZInterpolator.AddMeasurement(newState.PositionZ, sentTime); + m_PositionZInterpolator.AddMeasurement(newState.PositionZ, sentTime); } - RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); + m_RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); if (newState.HasScaleX) { - ScaleXInterpolator.AddMeasurement(newState.ScaleX, sentTime); + m_ScaleXInterpolator.AddMeasurement(newState.ScaleX, sentTime); } if (newState.HasScaleY) { - ScaleYInterpolator.AddMeasurement(newState.ScaleY, sentTime); + m_ScaleYInterpolator.AddMeasurement(newState.ScaleY, sentTime); } if (newState.HasScaleZ) { - ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); + m_ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); } if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) @@ -552,20 +520,22 @@ private void Awake() { m_Transform = transform; - if (m_AllFloatInterpolators.Count == 0) + if (m_AllFloatInterpolators.Count == 0/* && Interpolate*/) { - InitializeInterpolator(); + m_AllFloatInterpolators.Add(m_PositionXInterpolator); + m_AllFloatInterpolators.Add(m_PositionYInterpolator); + m_AllFloatInterpolators.Add(m_PositionZInterpolator); + m_AllFloatInterpolators.Add(m_ScaleXInterpolator); + m_AllFloatInterpolators.Add(m_ScaleYInterpolator); + m_AllFloatInterpolators.Add(m_ScaleZInterpolator); } foreach (var interpolator in m_AllFloatInterpolators) { - interpolator.Awake(); interpolator.UseFixedUpdate = UseFixedUpdate; } - RotationInterpolator.Awake(); - RotationInterpolator.UseFixedUpdate = UseFixedUpdate; - + m_RotationInterpolator.UseFixedUpdate = UseFixedUpdate; // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out, talk with Matt/Fatih, this should be unreliable // set initial value for spawn @@ -585,25 +555,7 @@ private void Awake() ReplNetworkState.OnValueChanged += OnNetworkStateChanged; } - public void Start() - { - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.Start(); - } - RotationInterpolator.Start(); - } - - public void OnEnable() - { - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.OnEnable(); - } - - RotationInterpolator.OnEnable(); - } public override void OnNetworkSpawn() { @@ -611,14 +563,6 @@ public override void OnNetworkSpawn() { ResetCurrentInterpolatedState(); // useful for late joining - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.OnNetworkSpawn(); - } - - // todo cache network manager to remove some of the time it takes to get it - RotationInterpolator.OnNetworkSpawn(); - ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } } @@ -626,13 +570,6 @@ public override void OnNetworkSpawn() private void OnDestroy() { ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; - - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.OnDestroy(); - } - - RotationInterpolator.OnDestroy(); } private void DoUpdateToGhosts(double time) @@ -671,13 +608,6 @@ private void FixedUpdate() Debug.LogWarning($"A local change to {dirtyField} without authority detected, reverting back to latest interpolated network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } - - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); - } - - RotationInterpolator.FixedUpdate(NetworkManager.ServerTime.FixedDeltaTime); } } @@ -701,11 +631,11 @@ private void Update() interpolator.Update(Time.deltaTime); } - RotationInterpolator.Update(Time.deltaTime); + m_RotationInterpolator.Update(Time.deltaTime); if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) { - var interpolatedPosition = new Vector3(PositionXInterpolator.GetInterpolatedValue(), PositionYInterpolator.GetInterpolatedValue(), PositionZInterpolator.GetInterpolatedValue()); + var interpolatedPosition = new Vector3(m_PositionXInterpolator.GetInterpolatedValue(), m_PositionYInterpolator.GetInterpolatedValue(), m_PositionZInterpolator.GetInterpolatedValue()); Debug.DrawLine(interpolatedPosition, interpolatedPosition + Vector3.up, Color.magenta, k_DebugDrawLineTime, false); } diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index bed79b1dc5..bde1199ba9 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -27,46 +27,23 @@ private NetworkTime T(float time, int tickRate = k_MockTickRate) return new NetworkTime(tickRate, timeSec: time); } - [Test] - public void TestSimpleInterpolator() - { - var interpolator = new SimpleInterpolatorFloat(); - interpolator.UseFixedUpdate = false; - - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(0f)); - - interpolator.AddMeasurement(10, default); - var val = interpolator.Update(0.05f); - Assert.That(val, Is.EqualTo(5f)); - } - [Test] public void TestReset() { - void DoTest(Action> specialAction = null) where TypeToTest : IInterpolator, new() - { - var interpolator = new TypeToTest(); - specialAction?.Invoke(interpolator); - interpolator.AddMeasurement(5, T(1.0f)); - var initVal = interpolator.Update(10); // big value - Assert.That(initVal, Is.EqualTo(5f)); - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(5f)); - - interpolator.ResetTo(100f); - Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(100f)); - var val = interpolator.Update(1f); - Assert.That(val, Is.EqualTo(100f)); - } + var interpolator = new BufferedLinearInterpolatorFloat(); + var timeMock = new MockInterpolatorTime(0, k_MockTickRate); + interpolator.InterpolatorTimeProxy = timeMock; + timeMock.BufferedServerTime = 100f; + + interpolator.AddMeasurement(5, T(1.0f)); + var initVal = interpolator.Update(10); // big value + Assert.That(initVal, Is.EqualTo(5f)); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(5f)); - DoTest>(); - DoTest(); - DoTest(interpolator => - { - var timeMock = new MockInterpolatorTime(0, k_MockTickRate); - ((BufferedLinearInterpolatorFloat) interpolator).InterpolatorTimeProxy = timeMock; - timeMock.BufferedServerTime = 100f; - } - ); + interpolator.ResetTo(100f); + Assert.That(interpolator.GetInterpolatedValue(), Is.EqualTo(100f)); + var val = interpolator.Update(1f); + Assert.That(val, Is.EqualTo(100f)); } [Test] From 5d4470a2d51c262ab52d7559d35be0d8bfa05442 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 8 Sep 2021 19:22:14 -0400 Subject: [PATCH 51/74] adding some comments --- .../Prototyping/Interpolator/BufferedLinearInterpolator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index bf7967bd4a..af1ca4260d 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -148,7 +148,7 @@ public T Update(float deltaTime) var target = InterpolateUnclamped(m_InterpStartValue, m_InterpEndValue, t); float maxInterpTime = 0.1f; - m_CurrentInterpValue = Interpolate(m_CurrentInterpValue, target, deltaTime / maxInterpTime); + m_CurrentInterpValue = Interpolate(m_CurrentInterpValue, target, deltaTime / maxInterpTime); // second interpolate to smooth out extrapolation jumps } return m_CurrentInterpValue; From 0747544a7e833d08db832d727e7a0480d6f115ce Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 9 Sep 2021 13:17:02 -0400 Subject: [PATCH 52/74] comment cleanup fix for name --- .../Interpolator/BufferedLinearInterpolator.cs | 18 +++++++++--------- .../Prototyping/NetworkTransform.cs | 2 +- .../NetworkTransform/NetworkTransformTests.cs | 1 - 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index af1ca4260d..a0a191c5fb 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -30,8 +30,8 @@ private class InterpolatorTime : IInterpolatorTime private struct BufferedItem { - public T item; - public NetworkTime timeSent; + public T Item; + public NetworkTime TimeSent; } public bool UseFixedUpdate { get; set; } @@ -86,12 +86,12 @@ private void TryConsumeFromBuffer() { var bufferedValue = m_Buffer[i]; // Consume when ready. This can consume multiple times - if (FixedOrTime(bufferedValue.timeSent) <= ServerTimeBeingHandledForBuffering) + if (FixedOrTime(bufferedValue.TimeSent) <= ServerTimeBeingHandledForBuffering) { if (m_LifetimeConsumedCount == 0) { - m_StartTimeConsumed = bufferedValue.timeSent; - m_InterpStartValue = bufferedValue.item; + m_StartTimeConsumed = bufferedValue.TimeSent; + m_InterpStartValue = bufferedValue.Item; } else if (consumedCount == 0) { @@ -99,8 +99,8 @@ private void TryConsumeFromBuffer() m_InterpStartValue = m_InterpEndValue; } - m_EndTimeConsumed = bufferedValue.timeSent; - m_InterpEndValue = bufferedValue.item; + m_EndTimeConsumed = bufferedValue.TimeSent; + m_InterpEndValue = bufferedValue.Item; m_Buffer.RemoveAt(i); consumedCount++; m_LifetimeConsumedCount++; @@ -164,8 +164,8 @@ public void AddMeasurement(T newMeasurement, NetworkTime sentTime) if (sentTime.Time > m_EndTimeConsumed.Time || m_LifetimeConsumedCount == 0) // treat only if value is newer than the one being interpolated to right now { - m_Buffer.Add(new BufferedItem {item = newMeasurement, timeSent = sentTime}); - m_Buffer.Sort((item1, item2) => item2.timeSent.Time.CompareTo(item1.timeSent.Time)); + m_Buffer.Add(new BufferedItem {Item = newMeasurement, TimeSent = sentTime}); + m_Buffer.Sort((item1, item2) => item2.TimeSent.Time.CompareTo(item1.TimeSent.Time)); } } diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 005c872b9f..f8ff04fbd4 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -6,7 +6,7 @@ namespace Unity.Netcode.Prototyping { /// - /// A prototype component for syncing transforms + /// A component for syncing transforms /// [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] [DefaultExecutionOrder(1000)] // this is needed to catch the update time after the transform was updated by user scripts diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs index 13a4c8fb7e..783f90ace6 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs @@ -1,7 +1,6 @@ using System.Collections; using Unity.Netcode.Prototyping; using NUnit.Framework; -using UnityEngine; using UnityEngine.TestTools; namespace Unity.Netcode.RuntimeTests From b0cc99443f9a895a8b6e268f67fa2bc93a84df85 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 9 Sep 2021 17:28:50 -0400 Subject: [PATCH 53/74] after investigation, UseFixedUpdate isn't needed anymore with latest changes --- .../Editor/NetworkTransformEditor.cs | 3 --- .../BufferedLinearInterpolator.cs | 17 +++++------- .../Prototyping/NetworkTransform.cs | 26 ++----------------- .../Tests/Editor/InterpolatorTests.cs | 9 ------- 4 files changed, 9 insertions(+), 46 deletions(-) diff --git a/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs b/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs index c565c917f3..519b2a6f38 100644 --- a/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs +++ b/com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs @@ -21,7 +21,6 @@ public class NetworkTransformEditor : UnityEditor.Editor private SerializedProperty m_ScaleThresholdProperty; private SerializedProperty m_InLocalSpaceProperty; private SerializedProperty m_InterpolateProperty; - private SerializedProperty m_UseFixedUpdateProperty; private static int s_ToggleOffset = 45; private static float s_MaxRowWidth = EditorGUIUtility.labelWidth + EditorGUIUtility.fieldWidth + 5; @@ -45,7 +44,6 @@ public void OnEnable() m_ScaleThresholdProperty = serializedObject.FindProperty(nameof(NetworkTransform.ScaleThreshold)); m_InLocalSpaceProperty = serializedObject.FindProperty(nameof(NetworkTransform.InLocalSpace)); m_InterpolateProperty = serializedObject.FindProperty(nameof(NetworkTransform.Interpolate)); - m_UseFixedUpdateProperty = serializedObject.FindProperty(nameof(NetworkTransform.UseFixedUpdate)); } public override void OnInspectorGUI() @@ -113,7 +111,6 @@ public override void OnInspectorGUI() EditorGUILayout.LabelField("Configurations", EditorStyles.boldLabel); EditorGUILayout.PropertyField(m_InLocalSpaceProperty); EditorGUILayout.PropertyField(m_InterpolateProperty); - EditorGUILayout.PropertyField(m_UseFixedUpdateProperty); serializedObject.ApplyModifiedProperties(); } diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs index a0a191c5fb..6a5ab0f896 100644 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator/BufferedLinearInterpolator.cs @@ -34,12 +34,11 @@ private struct BufferedItem public NetworkTime TimeSent; } - public bool UseFixedUpdate { get; set; } /// /// Override this if you want configurable buffering, right now using ServerTick's own global buffering /// - private double ServerTimeBeingHandledForBuffering => UseFixedUpdate ? InterpolatorTimeProxy.BufferedServerFixedTime : InterpolatorTimeProxy.BufferedServerTime; + private double ServerTimeBeingHandledForBuffering => InterpolatorTimeProxy.BufferedServerTime; private double RenderTime => InterpolatorTimeProxy.BufferedServerTime - 1f / InterpolatorTimeProxy.TickRate; @@ -69,10 +68,6 @@ public void ResetTo(T targetValue) Update(0); } - private double FixedOrTime(NetworkTime t) - { - return UseFixedUpdate ? t.FixedTime : t.Time; - } // todo if I have value 1, 2, 3 and I'm treating 1 to 3, I shouldn't interpolate between 1 and 3, I should interpolate from 1 to 2, then from 2 to 3 to get the best path private void TryConsumeFromBuffer() @@ -86,7 +81,7 @@ private void TryConsumeFromBuffer() { var bufferedValue = m_Buffer[i]; // Consume when ready. This can consume multiple times - if (FixedOrTime(bufferedValue.TimeSent) <= ServerTimeBeingHandledForBuffering) + if (bufferedValue.TimeSent.Time <= ServerTimeBeingHandledForBuffering) { if (m_LifetimeConsumedCount == 0) { @@ -125,7 +120,7 @@ public T Update(float deltaTime) if (m_LifetimeConsumedCount >= 1) // shouldn't interpolate between default values, let's wait to receive data first, should only interpolate between real measurements { - double range = FixedOrTime(m_EndTimeConsumed) - FixedOrTime(m_StartTimeConsumed); + double range = m_EndTimeConsumed.Time - m_StartTimeConsumed.Time; float t; if (range == 0) { @@ -133,17 +128,19 @@ public T Update(float deltaTime) } else { - t = (float) ((RenderTime - FixedOrTime(m_StartTimeConsumed)) / range); + t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); } if (t > 3) // max extrapolation { + // TODO this causes issues with teleport, investigate + // todo make this configurable t = 1; } if (Debug.isDebugBuild) { - Debug.Assert(t >= 0, $"t must be bigger than or equal to 0. range {range}, RenderTime {RenderTime}, Start time {FixedOrTime(m_StartTimeConsumed)}, end time {FixedOrTime(m_EndTimeConsumed)}"); + Debug.Assert(t >= 0, $"t must be bigger than or equal to 0. range {range}, RenderTime {RenderTime}, Start time {m_StartTimeConsumed.Time}, end time {m_EndTimeConsumed.Time}"); } var target = InterpolateUnclamped(m_InterpStartValue, m_InterpEndValue, t); diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index f8ff04fbd4..0dfac3a576 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -207,7 +207,6 @@ public void NetworkSerialize(NetworkSerializer serializer) [SerializeField, Range(0, 120), Tooltip("The base amount of sends per seconds to use when range is disabled")] public float FixedSendsPerSecond = 30f; - public bool UseFixedUpdate = true; private const int k_DebugDrawLineTime = 10; @@ -530,33 +529,17 @@ private void Awake() m_AllFloatInterpolators.Add(m_ScaleZInterpolator); } - foreach (var interpolator in m_AllFloatInterpolators) - { - interpolator.UseFixedUpdate = UseFixedUpdate; - } - - m_RotationInterpolator.UseFixedUpdate = UseFixedUpdate; // ReplNetworkState.NetworkVariableChannel = NetworkChannel.PositionUpdate; // todo figure this out, talk with Matt/Fatih, this should be unreliable // set initial value for spawn if (IsServer) { - if (UseFixedUpdate) - { - // try to update local NetworkState - DoUpdateToGhosts(NetworkManager.LocalTime.FixedTime); - } - else - { - DoUpdateToGhosts(NetworkManager.LocalTime.Time); - } + DoUpdateToGhosts(NetworkManager.LocalTime.Time); } ReplNetworkState.OnValueChanged += OnNetworkStateChanged; } - - public override void OnNetworkSpawn() { if (!IsServer) @@ -588,11 +571,6 @@ private void FixedUpdate() return; } - if (IsServer && UseFixedUpdate) // todo change IsServer for HasAuthority check - { - // try to update local NetworkState - DoUpdateToGhosts(NetworkManager.LocalTime.FixedTime); - } // try to update previously consumed NetworkState // if we have any changes, that means made some updates locally @@ -618,7 +596,7 @@ private void Update() return; } - if (IsServer && !UseFixedUpdate) + if (IsServer) { DoUpdateToGhosts(NetworkManager.LocalTime.Time); } diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index bde1199ba9..69656dcbd8 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -52,7 +52,6 @@ public void NormalUsage() // Testing float instead of Vector3. The only difference with Vector3 is the lerp method used. var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -99,7 +98,6 @@ public void NormalUsage() public void OutOfOrderShouldStillWork() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -130,7 +128,6 @@ public void OutOfOrderShouldStillWork() public void MessageLoss() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -198,7 +195,6 @@ public void MessageLoss() public void AddFirstMeasurement() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -227,7 +223,6 @@ public void AddFirstMeasurement() public void JumpToEachValueIfDeltaTimeTooBig() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -247,7 +242,6 @@ public void JumpToEachValueIfDeltaTimeTooBig() public void JumpToLastValueFromStart() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -279,7 +273,6 @@ public void JumpToLastValueFromStart() public void TestBufferSizeLimit() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -313,7 +306,6 @@ public void TestBufferSizeLimit() public void TestUpdatingInterpolatorWithNoData() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; @@ -325,7 +317,6 @@ public void TestUpdatingInterpolatorWithNoData() public void TestDuplicatedValues() { var interpolator = new BufferedLinearInterpolatorFloat(); - interpolator.UseFixedUpdate = false; var mockBufferedTime = new MockInterpolatorTime(0, k_MockTickRate); interpolator.InterpolatorTimeProxy = mockBufferedTime; From 41aeef08e25483d27d32481cbd2205918953dc25 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 9 Sep 2021 23:28:27 -0400 Subject: [PATCH 54/74] Fix axis sync issue. Fix interpolate option issue --- .../Prototyping/NetworkTransform.cs | 129 +++++++++++++----- 1 file changed, 93 insertions(+), 36 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 0dfac3a576..e19ec2e47e 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -31,64 +31,104 @@ internal struct NetworkState : INetworkSerializable public bool InLocalSpace { get => (Bitset & (1 << InLocalSpaceBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << InLocalSpaceBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << InLocalSpaceBit)); + else Bitset = (ushort) (Bitset & ~(1 << InLocalSpaceBit)); + } } // Position public bool HasPositionX { get => (Bitset & (1 << PositionXBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << PositionXBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << PositionXBit)); + else Bitset = (ushort) (Bitset & ~(1 << PositionXBit)); + } } public bool HasPositionY { get => (Bitset & (1 << PositionYBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << PositionYBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << PositionYBit)); + else Bitset = (ushort) (Bitset & ~(1 << PositionYBit)); + } } public bool HasPositionZ { get => (Bitset & (1 << PositionZBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << PositionZBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << PositionZBit)); + else Bitset = (ushort) (Bitset & ~(1 << PositionZBit)); + } } // RotAngles public bool HasRotAngleX { get => (Bitset & (1 << RotAngleXBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleXBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << RotAngleXBit)); + else Bitset = (ushort) (Bitset & ~(1 << RotAngleXBit)); + } } public bool HasRotAngleY { get => (Bitset & (1 << RotAngleYBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleYBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << RotAngleYBit)); + else Bitset = (ushort) (Bitset & ~(1 << RotAngleYBit)); + } } public bool HasRotAngleZ { get => (Bitset & (1 << RotAngleZBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << RotAngleZBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << RotAngleZBit)); + else Bitset = (ushort) (Bitset & ~(1 << RotAngleZBit)); + } } // Scale public bool HasScaleX { get => (Bitset & (1 << ScaleXBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleXBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << ScaleXBit)); + else Bitset = (ushort) (Bitset & ~(1 << ScaleXBit)); + } } public bool HasScaleY { get => (Bitset & (1 << ScaleYBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleYBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << ScaleYBit)); + else Bitset = (ushort) (Bitset & ~(1 << ScaleYBit)); + } } public bool HasScaleZ { get => (Bitset & (1 << ScaleZBit)) != 0; - set => Bitset |= (ushort) ((value ? 1 : 0) << ScaleZBit); + set + { + if (value) Bitset = (ushort) (Bitset | (1 << ScaleZBit)); + else Bitset = (ushort) (Bitset & ~(1 << ScaleZBit)); + } } public float PositionX, PositionY, PositionZ; @@ -242,25 +282,25 @@ public void ResetCurrentInterpolatedState() // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made // returned boolean would be useful to change encapsulating `NetworkVariable`'s dirty state, e.g. ReplNetworkState.SetDirty(isDirty); internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double dirtyTime) - { - return UpdateNetworkStateCheckDirtyWithInfo(ref networkState, dirtyTime).isDirty; - } - - private (bool isDirty, bool isPositionDirty, bool isRotationDirty, bool isScaleDirty) UpdateNetworkStateCheckDirtyWithInfo(ref NetworkState networkState, double dirtyTime) { var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; var scale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; - bool isDirty = false; - bool isPositionDirty = false; - bool isRotationDirty = false; - bool isScaleDirty = false; + networkState.HasPositionX = false; + networkState.HasPositionY = false; + networkState.HasPositionZ = false; + networkState.HasRotAngleX = false; + networkState.HasRotAngleY = false; + networkState.HasRotAngleZ = false; + networkState.HasScaleX = false; + networkState.HasScaleY = false; + networkState.HasScaleZ = false; + if (InLocalSpace != networkState.InLocalSpace) { networkState.InLocalSpace = InLocalSpace; - isDirty = true; } if (SyncPositionX && @@ -269,7 +309,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionX = position.x; networkState.HasPositionX = true; - isPositionDirty = true; } if (SyncPositionY && @@ -278,7 +317,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionY = position.y; networkState.HasPositionY = true; - isPositionDirty = true; } if (SyncPositionZ && @@ -287,7 +325,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionZ = position.z; networkState.HasPositionZ = true; - isPositionDirty = true; } if (SyncRotAngleX && @@ -296,7 +333,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleX = rotAngles.x; networkState.HasRotAngleX = true; - isRotationDirty = true; } if (SyncRotAngleY && @@ -305,7 +341,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleY = rotAngles.y; networkState.HasRotAngleY = true; - isRotationDirty = true; } if (SyncRotAngleZ && @@ -314,7 +349,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleZ = rotAngles.z; networkState.HasRotAngleZ = true; - isRotationDirty = true; } if (SyncScaleX && @@ -323,7 +357,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleX = scale.x; networkState.HasScaleX = true; - isScaleDirty = true; } if (SyncScaleY && @@ -332,7 +365,6 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleY = scale.y; networkState.HasScaleY = true; - isScaleDirty = true; } if (SyncScaleZ && @@ -341,10 +373,11 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleZ = scale.z; networkState.HasScaleZ = true; - isScaleDirty = true; } - isDirty |= isPositionDirty || isRotationDirty || isScaleDirty; + bool isDirty = networkState.HasScaleX || networkState.HasScaleY || networkState.HasScaleZ || + networkState.HasRotAngleX || networkState.HasRotAngleY || networkState.HasRotAngleZ || + networkState.HasPositionX || networkState.HasPositionY || networkState.HasPositionZ; if (isDirty) { @@ -352,7 +385,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double } - return (isDirty, isPositionDirty, isRotationDirty, isScaleDirty); + return isDirty; } internal void ApplyNetworkStateFromAuthority(NetworkState networkState) @@ -479,33 +512,55 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) if (newState.HasPositionX) { m_PositionXInterpolator.AddMeasurement(newState.PositionX, sentTime); + LocalAuthoritativeNetworkState.PositionX = newState.PositionX; } if (newState.HasPositionY) { m_PositionYInterpolator.AddMeasurement(newState.PositionY, sentTime); + LocalAuthoritativeNetworkState.PositionY = newState.PositionY; } if (newState.HasPositionZ) { m_PositionZInterpolator.AddMeasurement(newState.PositionZ, sentTime); + LocalAuthoritativeNetworkState.PositionZ = newState.PositionZ; + } + + if (newState.HasRotAngleX) + { + m_RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.RotAngleX, LocalAuthoritativeNetworkState.RotAngleY, LocalAuthoritativeNetworkState.RotAngleZ), sentTime); + LocalAuthoritativeNetworkState.RotAngleX = newState.RotAngleX; } - m_RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); + if (newState.HasRotAngleY) + { + m_RotationInterpolator.AddMeasurement(Quaternion.Euler(LocalAuthoritativeNetworkState.RotAngleX, newState.RotAngleY, LocalAuthoritativeNetworkState.RotAngleZ), sentTime); + LocalAuthoritativeNetworkState.RotAngleY = newState.RotAngleY; + } + + if (newState.HasRotAngleZ) + { + m_RotationInterpolator.AddMeasurement(Quaternion.Euler(LocalAuthoritativeNetworkState.RotAngleX, LocalAuthoritativeNetworkState.RotAngleY, newState.RotAngleZ), sentTime); + LocalAuthoritativeNetworkState.RotAngleZ = newState.RotAngleZ; + } if (newState.HasScaleX) { m_ScaleXInterpolator.AddMeasurement(newState.ScaleX, sentTime); + LocalAuthoritativeNetworkState.ScaleX = newState.ScaleX; } if (newState.HasScaleY) { m_ScaleYInterpolator.AddMeasurement(newState.ScaleY, sentTime); + LocalAuthoritativeNetworkState.ScaleY = newState.ScaleY; } if (newState.HasScaleZ) { m_ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); + LocalAuthoritativeNetworkState.ScaleZ = newState.ScaleZ; } if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) @@ -519,7 +574,7 @@ private void Awake() { m_Transform = transform; - if (m_AllFloatInterpolators.Count == 0/* && Interpolate*/) + if (m_AllFloatInterpolators.Count == 0) { m_AllFloatInterpolators.Add(m_PositionXInterpolator); m_AllFloatInterpolators.Add(m_PositionYInterpolator); @@ -577,12 +632,14 @@ private void FixedUpdate() // we apply the latest ReplNetworkState again to revert our changes if (!IsServer) { - var oldStateDirtyInfo = UpdateNetworkStateCheckDirtyWithInfo(ref PrevNetworkState, 0); - if (oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) + var isDirty = UpdateNetworkStateCheckDirty(ref PrevNetworkState, 0); + bool isRotationDirty = PrevNetworkState.HasRotAngleX || PrevNetworkState.HasRotAngleY || PrevNetworkState.HasRotAngleZ; + if (isDirty && !isRotationDirty) { // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes // from an unauthorized transform change or euler to quaternion conversion artifacts. - var dirtyField = oldStateDirtyInfo.isPositionDirty ? "position" : "scale"; + var isPositionDirty = PrevNetworkState.HasPositionX || PrevNetworkState.HasPositionY || PrevNetworkState.HasPositionZ; + var dirtyField = isPositionDirty ? "position" : "scale"; Debug.LogWarning($"A local change to {dirtyField} without authority detected, reverting back to latest interpolated network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } From d92cc1e604aae094ef0202b15a029bb242ce3597 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 10 Sep 2021 15:46:15 -0400 Subject: [PATCH 55/74] reverting back hasXX changes, we still need isDirty checks since hasXX is never set to false (and can't really be for this current iteration) --- .../Prototyping/NetworkTransform.cs | 77 ++++++++----------- 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index e19ec2e47e..3ef0871fac 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -282,25 +282,28 @@ public void ResetCurrentInterpolatedState() // updates `NetworkState` properties if they need to and returns a `bool` indicating whether or not there was any changes made // returned boolean would be useful to change encapsulating `NetworkVariable`'s dirty state, e.g. ReplNetworkState.SetDirty(isDirty); internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double dirtyTime) + { + return UpdateNetworkStateCheckDirtyWithInfo(ref networkState, dirtyTime).isDirty; + } + + private (bool isDirty, bool isPositionDirty, bool isRotationDirty, bool isScaleDirty) UpdateNetworkStateCheckDirtyWithInfo(ref NetworkState networkState, double dirtyTime) { var position = InLocalSpace ? m_Transform.localPosition : m_Transform.position; var rotAngles = InLocalSpace ? m_Transform.localEulerAngles : m_Transform.eulerAngles; var scale = InLocalSpace ? m_Transform.localScale : m_Transform.lossyScale; - networkState.HasPositionX = false; - networkState.HasPositionY = false; - networkState.HasPositionZ = false; - networkState.HasRotAngleX = false; - networkState.HasRotAngleY = false; - networkState.HasRotAngleZ = false; - networkState.HasScaleX = false; - networkState.HasScaleY = false; - networkState.HasScaleZ = false; + bool isDirty = false; + bool isPositionDirty = false; + bool isRotationDirty = false; + bool isScaleDirty = false; + + // todo come back to using custom isDirty check for checking if we have unauthorized modif client side? if (InLocalSpace != networkState.InLocalSpace) { networkState.InLocalSpace = InLocalSpace; + isDirty = true; } if (SyncPositionX && @@ -309,6 +312,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionX = position.x; networkState.HasPositionX = true; + isPositionDirty = true; } if (SyncPositionY && @@ -317,6 +321,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionY = position.y; networkState.HasPositionY = true; + isPositionDirty = true; } if (SyncPositionZ && @@ -325,6 +330,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.PositionZ = position.z; networkState.HasPositionZ = true; + isPositionDirty = true; } if (SyncRotAngleX && @@ -333,6 +339,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleX = rotAngles.x; networkState.HasRotAngleX = true; + isRotationDirty = true; } if (SyncRotAngleY && @@ -341,6 +348,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleY = rotAngles.y; networkState.HasRotAngleY = true; + isRotationDirty = true; } if (SyncRotAngleZ && @@ -349,6 +357,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.RotAngleZ = rotAngles.z; networkState.HasRotAngleZ = true; + isRotationDirty = true; } if (SyncScaleX && @@ -357,6 +366,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleX = scale.x; networkState.HasScaleX = true; + isScaleDirty = true; } if (SyncScaleY && @@ -365,6 +375,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleY = scale.y; networkState.HasScaleY = true; + isScaleDirty = true; } if (SyncScaleZ && @@ -373,19 +384,17 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double { networkState.ScaleZ = scale.z; networkState.HasScaleZ = true; + isScaleDirty = true; } - bool isDirty = networkState.HasScaleX || networkState.HasScaleY || networkState.HasScaleZ || - networkState.HasRotAngleX || networkState.HasRotAngleY || networkState.HasRotAngleZ || - networkState.HasPositionX || networkState.HasPositionY || networkState.HasPositionZ; + isDirty |= isPositionDirty || isRotationDirty || isScaleDirty; if (isDirty) { networkState.SentTime = dirtyTime; } - - return isDirty; + return (isDirty, isPositionDirty, isRotationDirty, isScaleDirty); } internal void ApplyNetworkStateFromAuthority(NetworkState networkState) @@ -512,55 +521,33 @@ private void OnNetworkStateChanged(NetworkState oldState, NetworkState newState) if (newState.HasPositionX) { m_PositionXInterpolator.AddMeasurement(newState.PositionX, sentTime); - LocalAuthoritativeNetworkState.PositionX = newState.PositionX; } if (newState.HasPositionY) { m_PositionYInterpolator.AddMeasurement(newState.PositionY, sentTime); - LocalAuthoritativeNetworkState.PositionY = newState.PositionY; } if (newState.HasPositionZ) { m_PositionZInterpolator.AddMeasurement(newState.PositionZ, sentTime); - LocalAuthoritativeNetworkState.PositionZ = newState.PositionZ; } - if (newState.HasRotAngleX) - { - m_RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.RotAngleX, LocalAuthoritativeNetworkState.RotAngleY, LocalAuthoritativeNetworkState.RotAngleZ), sentTime); - LocalAuthoritativeNetworkState.RotAngleX = newState.RotAngleX; - } - - if (newState.HasRotAngleY) - { - m_RotationInterpolator.AddMeasurement(Quaternion.Euler(LocalAuthoritativeNetworkState.RotAngleX, newState.RotAngleY, LocalAuthoritativeNetworkState.RotAngleZ), sentTime); - LocalAuthoritativeNetworkState.RotAngleY = newState.RotAngleY; - } - - if (newState.HasRotAngleZ) - { - m_RotationInterpolator.AddMeasurement(Quaternion.Euler(LocalAuthoritativeNetworkState.RotAngleX, LocalAuthoritativeNetworkState.RotAngleY, newState.RotAngleZ), sentTime); - LocalAuthoritativeNetworkState.RotAngleZ = newState.RotAngleZ; - } + m_RotationInterpolator.AddMeasurement(Quaternion.Euler(newState.Rotation), sentTime); if (newState.HasScaleX) { m_ScaleXInterpolator.AddMeasurement(newState.ScaleX, sentTime); - LocalAuthoritativeNetworkState.ScaleX = newState.ScaleX; } if (newState.HasScaleY) { m_ScaleYInterpolator.AddMeasurement(newState.ScaleY, sentTime); - LocalAuthoritativeNetworkState.ScaleY = newState.ScaleY; } if (newState.HasScaleZ) { m_ScaleZInterpolator.AddMeasurement(newState.ScaleZ, sentTime); - LocalAuthoritativeNetworkState.ScaleZ = newState.ScaleZ; } if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) @@ -589,7 +576,7 @@ private void Awake() // set initial value for spawn if (IsServer) { - DoUpdateToGhosts(NetworkManager.LocalTime.Time); + DoUpdateToGhosts(); } ReplNetworkState.OnValueChanged += OnNetworkStateChanged; @@ -610,9 +597,9 @@ private void OnDestroy() ReplNetworkState.OnValueChanged -= OnNetworkStateChanged; } - private void DoUpdateToGhosts(double time) + private void DoUpdateToGhosts() { - if (UpdateNetworkStateCheckDirty(ref LocalAuthoritativeNetworkState, time)) + if (UpdateNetworkStateCheckDirty(ref LocalAuthoritativeNetworkState, NetworkManager.LocalTime.Time)) { ReplNetworkState.Value = LocalAuthoritativeNetworkState; ReplNetworkState.SetDirty(true); @@ -632,14 +619,12 @@ private void FixedUpdate() // we apply the latest ReplNetworkState again to revert our changes if (!IsServer) { - var isDirty = UpdateNetworkStateCheckDirty(ref PrevNetworkState, 0); - bool isRotationDirty = PrevNetworkState.HasRotAngleX || PrevNetworkState.HasRotAngleY || PrevNetworkState.HasRotAngleZ; - if (isDirty && !isRotationDirty) + var oldStateDirtyInfo = UpdateNetworkStateCheckDirtyWithInfo(ref PrevNetworkState, 0); + if (oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) { // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes // from an unauthorized transform change or euler to quaternion conversion artifacts. - var isPositionDirty = PrevNetworkState.HasPositionX || PrevNetworkState.HasPositionY || PrevNetworkState.HasPositionZ; - var dirtyField = isPositionDirty ? "position" : "scale"; + var dirtyField = oldStateDirtyInfo.isPositionDirty ? "position" : "scale"; Debug.LogWarning($"A local change to {dirtyField} without authority detected, reverting back to latest interpolated network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } @@ -655,7 +640,7 @@ private void Update() if (IsServer) { - DoUpdateToGhosts(NetworkManager.LocalTime.Time); + DoUpdateToGhosts(); } // apply interpolated value From 33751fe615760433b7138e688b10e88e9b25865a Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 10 Sep 2021 19:37:37 -0400 Subject: [PATCH 56/74] using "SyncXX" instead of "HasXX". HasXX is never reset to false and is set to true only in certain situations. If a default value is used (for example posZ is set to 0 on spawn) hasPosZ will be false, even if we do want to apply it's value because we sync it. --- .../Prototyping/NetworkTransform.cs | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 3ef0871fac..3315e9381b 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -297,8 +297,7 @@ internal bool UpdateNetworkStateCheckDirty(ref NetworkState networkState, double bool isRotationDirty = false; bool isScaleDirty = false; - - // todo come back to using custom isDirty check for checking if we have unauthorized modif client side? + // hasPositionZ set to false when it should be true? if (InLocalSpace != networkState.InLocalSpace) { @@ -408,48 +407,48 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) // InLocalSpace Read InLocalSpace = networkState.InLocalSpace; // Position Read - if (networkState.HasPositionX) + if (SyncPositionX) { interpolatedPosition.x = Interpolate ? m_PositionXInterpolator.GetInterpolatedValue() : networkState.Position.x; } - if (networkState.HasPositionY) + if (SyncPositionY) { interpolatedPosition.y = Interpolate ? m_PositionYInterpolator.GetInterpolatedValue() : networkState.Position.y; } - if (networkState.HasPositionZ) + if (SyncPositionZ) { interpolatedPosition.z = Interpolate ? m_PositionZInterpolator.GetInterpolatedValue() : networkState.Position.z; } - if (networkState.HasRotAngleX) + if (SyncRotAngleX) { interpolatedRotAngles.x = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.x : networkState.Rotation.x; } - if (networkState.HasRotAngleY) + if (SyncRotAngleY) { interpolatedRotAngles.y = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.y : networkState.Rotation.y; } - if (networkState.HasRotAngleZ) + if (SyncRotAngleZ) { interpolatedRotAngles.z = Interpolate ? m_RotationInterpolator.GetInterpolatedValue().eulerAngles.z : networkState.Rotation.z; } // Scale Read - if (networkState.HasScaleX) + if (SyncScaleX) { interpolatedScale.x = Interpolate ? m_ScaleXInterpolator.GetInterpolatedValue() : networkState.Scale.x; } - if (networkState.HasScaleY) + if (SyncScaleY) { interpolatedScale.y = Interpolate ? m_ScaleYInterpolator.GetInterpolatedValue() : networkState.Scale.y; } - if (networkState.HasScaleZ) + if (SyncScaleZ) { interpolatedScale.z = Interpolate ? m_ScaleZInterpolator.GetInterpolatedValue() : networkState.Scale.z; } @@ -613,14 +612,13 @@ private void FixedUpdate() return; } - // try to update previously consumed NetworkState // if we have any changes, that means made some updates locally // we apply the latest ReplNetworkState again to revert our changes if (!IsServer) { var oldStateDirtyInfo = UpdateNetworkStateCheckDirtyWithInfo(ref PrevNetworkState, 0); - if (oldStateDirtyInfo.isDirty && !oldStateDirtyInfo.isRotationDirty) + if (oldStateDirtyInfo.isPositionDirty || oldStateDirtyInfo.isScaleDirty || (oldStateDirtyInfo.isRotationDirty && SyncRotAngleX && SyncRotAngleY && SyncRotAngleZ)) { // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes // from an unauthorized transform change or euler to quaternion conversion artifacts. From 93e8be7b57d159b38b2c15868d61c863f7712bd7 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Fri, 10 Sep 2021 19:50:01 -0400 Subject: [PATCH 57/74] fixing issue where we needed to do a first movement to get over network state initial values and to get per axis syncing properly --- .../Prototyping/NetworkTransform.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs index 3315e9381b..5066f3f5f9 100644 --- a/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Prototyping/NetworkTransform.cs @@ -454,7 +454,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) } // Position Apply - if (networkState.HasPositionX || networkState.HasPositionY || networkState.HasPositionZ) + if (SyncPositionX || SyncPositionY || SyncPositionZ) { if (InLocalSpace) { @@ -469,7 +469,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) } // RotAngles Apply - if (networkState.HasRotAngleX || networkState.HasRotAngleY || networkState.HasRotAngleZ) + if (SyncRotAngleX || SyncRotAngleY || SyncRotAngleZ) { if (InLocalSpace) { @@ -484,7 +484,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) } // Scale Apply - if (networkState.HasScaleX || networkState.HasScaleY || networkState.HasScaleZ) + if (SyncScaleX || SyncScaleY || SyncScaleZ) { if (InLocalSpace) { @@ -622,7 +622,7 @@ private void FixedUpdate() { // ignoring rotation dirty since quaternions will mess with euler angles, making this impossible to determine if the change to a single axis comes // from an unauthorized transform change or euler to quaternion conversion artifacts. - var dirtyField = oldStateDirtyInfo.isPositionDirty ? "position" : "scale"; + var dirtyField = oldStateDirtyInfo.isPositionDirty ? "position" : oldStateDirtyInfo.isRotationDirty ? "rotation" : "scale"; Debug.LogWarning($"A local change to {dirtyField} without authority detected, reverting back to latest interpolated network state!", this); ApplyNetworkStateFromAuthority(ReplNetworkState.Value); } From f2078203c837b5be4eb892343c68794b60de259f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 09:34:53 -0400 Subject: [PATCH 58/74] updating zoosam with latest changes --- testproject/Assets/Scenes/ZooSam.unity | 107 +++++++++++++++++++++---- 1 file changed, 93 insertions(+), 14 deletions(-) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 4cec43f1f1..c8c284a60f 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -1225,9 +1225,8 @@ MonoBehaviour: RotAngleThreshold: 0 ScaleThreshold: 0 InLocalSpace: 1 - Interpolate: 0 + Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!114 &108150026 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1335,7 +1334,7 @@ Transform: m_Children: - {fileID: 153211162} m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &110121429 GameObject: @@ -3401,7 +3400,6 @@ MonoBehaviour: InLocalSpace: 0 Interpolate: 1 FixedSendsPerSecond: 30 - UseFixedUpdate: 1 --- !u!114 &240282451 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3509,7 +3507,7 @@ Transform: m_Children: - {fileID: 1551181949} m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &250510712 GameObject: @@ -4180,7 +4178,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &351881178 GameObject: @@ -6816,7 +6814,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561613} + NetworkTransport: {fileID: 620561610} PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] @@ -7943,7 +7941,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &674940303 GameObject: @@ -8078,7 +8076,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 m_RunServerOnly: 1 - m_RunInUpdate: 1 + m_RunInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -8122,7 +8120,6 @@ MonoBehaviour: InLocalSpace: 1 Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 @@ -8199,7 +8196,7 @@ Transform: - {fileID: 702051986} - {fileID: 36747677} m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &680150732 GameObject: @@ -8393,6 +8390,89 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 687753481} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &693991909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 693991912} + - component: {fileID: 693991911} + - component: {fileID: 693991910} + m_Layer: 0 + m_Name: Camera (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &693991910 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_Enabled: 1 +--- !u!20 &693991911 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &693991912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 20, z: -16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} --- !u!1 &695189437 GameObject: m_ObjectHideFlags: 0 @@ -9333,7 +9413,7 @@ Transform: - {fileID: 398540133} - {fileID: 1399839515} m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &731245575 GameObject: @@ -25049,7 +25129,6 @@ MonoBehaviour: InLocalSpace: 0 Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!114 &1934616766 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25142,7 +25221,7 @@ Transform: - {fileID: 557794668} - {fileID: 491088867} m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1949195315 GameObject: From ee5b308b128376b0ddf248a0dcc8c0d17fcec509 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 09:34:53 -0400 Subject: [PATCH 59/74] updating zoosam with latest changes --- testproject/Assets/Scenes/ZooSam.unity | 107 +++++++++++++++--- .../ProjectSettings/EditorBuildSettings.asset | 6 +- 2 files changed, 96 insertions(+), 17 deletions(-) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 4cec43f1f1..c8c284a60f 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -1225,9 +1225,8 @@ MonoBehaviour: RotAngleThreshold: 0 ScaleThreshold: 0 InLocalSpace: 1 - Interpolate: 0 + Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!114 &108150026 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1335,7 +1334,7 @@ Transform: m_Children: - {fileID: 153211162} m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &110121429 GameObject: @@ -3401,7 +3400,6 @@ MonoBehaviour: InLocalSpace: 0 Interpolate: 1 FixedSendsPerSecond: 30 - UseFixedUpdate: 1 --- !u!114 &240282451 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3509,7 +3507,7 @@ Transform: m_Children: - {fileID: 1551181949} m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &250510712 GameObject: @@ -4180,7 +4178,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &351881178 GameObject: @@ -6816,7 +6814,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561613} + NetworkTransport: {fileID: 620561610} PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] @@ -7943,7 +7941,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &674940303 GameObject: @@ -8078,7 +8076,7 @@ MonoBehaviour: m_MoveSpeed: 5 m_RotationSpeed: 30 m_RunServerOnly: 1 - m_RunInUpdate: 1 + m_RunInUpdate: 0 --- !u!114 &678326394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -8122,7 +8120,6 @@ MonoBehaviour: InLocalSpace: 1 Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!65 &678326396 BoxCollider: m_ObjectHideFlags: 0 @@ -8199,7 +8196,7 @@ Transform: - {fileID: 702051986} - {fileID: 36747677} m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &680150732 GameObject: @@ -8393,6 +8390,89 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 687753481} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &693991909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 693991912} + - component: {fileID: 693991911} + - component: {fileID: 693991910} + m_Layer: 0 + m_Name: Camera (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &693991910 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_Enabled: 1 +--- !u!20 &693991911 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &693991912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 693991909} + m_LocalRotation: {x: 0.5, y: -0, z: -0, w: 0.8660254} + m_LocalPosition: {x: 0, y: 20, z: -16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} --- !u!1 &695189437 GameObject: m_ObjectHideFlags: 0 @@ -9333,7 +9413,7 @@ Transform: - {fileID: 398540133} - {fileID: 1399839515} m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &731245575 GameObject: @@ -25049,7 +25129,6 @@ MonoBehaviour: InLocalSpace: 0 Interpolate: 1 FixedSendsPerSecond: 50 - UseFixedUpdate: 1 --- !u!114 &1934616766 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25142,7 +25221,7 @@ Transform: - {fileID: 557794668} - {fileID: 491088867} m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1949195315 GameObject: diff --git a/testproject/ProjectSettings/EditorBuildSettings.asset b/testproject/ProjectSettings/EditorBuildSettings.asset index e03fd43770..47e80671ee 100644 --- a/testproject/ProjectSettings/EditorBuildSettings.asset +++ b/testproject/ProjectSettings/EditorBuildSettings.asset @@ -5,12 +5,12 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 - path: Assets/MainMenu.unity - guid: 21c7fd68cda9dd9488fc0cc01f885e39 - enabled: 1 path: Assets/Scenes/ZooSam.unity guid: 4683469c9a191411fbda5e426765b2fc + - enabled: 1 + path: Assets/MainMenu.unity + guid: 21c7fd68cda9dd9488fc0cc01f885e39 - enabled: 1 path: Assets/Samples/SamplesMenu.unity guid: 037562c9b1a469f498dfb34256ddf86f From 7dfecfd673093e095ae96501e68880f56bf8ebac Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 10:18:03 -0400 Subject: [PATCH 60/74] fixing bad ref --- .../Tests/Editor/com.unity.netcode.editortests.asmdef | 2 +- testproject/Assets/Scenes/ZooSam.unity | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Editor/com.unity.netcode.editortests.asmdef b/com.unity.netcode.gameobjects/Tests/Editor/com.unity.netcode.editortests.asmdef index 4cb7b05b21..205383573a 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/com.unity.netcode.editortests.asmdef +++ b/com.unity.netcode.gameobjects/Tests/Editor/com.unity.netcode.editortests.asmdef @@ -4,7 +4,7 @@ "references": [ "Unity.Netcode.Runtime", "Unity.Netcode.Editor", - "Unity.Netcode.Prototyping", + "Unity.Netcode.Components", "Unity.Multiplayer.MetricTypes", "Unity.Multiplayer.NetStats" ], diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index c8c284a60f..2b5074dd13 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6795,7 +6795,6 @@ MonoBehaviour: ConnectAddress: 127.0.0.1 ConnectPort: 7777 ServerListenPort: 7777 - Channels: [] MessageSendMode: 0 --- !u!114 &620561611 MonoBehaviour: @@ -6814,7 +6813,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561610} + NetworkTransport: {fileID: 620561613} PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] @@ -6866,7 +6865,6 @@ MonoBehaviour: DisconnectTimeout: 5 ReconnectDelay: 0.5 MaxConnectAttempts: 10 - channels: [] MessageBufferSize: 5120 SimulatePacketLossChance: 0 SimulateMinLatency: 70 From 3167e520186807a9be6facc55003959e945085a6 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 11:25:16 -0400 Subject: [PATCH 61/74] restricting access to buffered interpolator --- com.unity.netcode.gameobjects/Components/Interpolator.meta | 2 +- .../Components/Interpolator/BufferedLinearInterpolator.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Components/Interpolator.meta b/com.unity.netcode.gameobjects/Components/Interpolator.meta index 0bfe5f770f..9f11f71626 100644 --- a/com.unity.netcode.gameobjects/Components/Interpolator.meta +++ b/com.unity.netcode.gameobjects/Components/Interpolator.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 32190d476d5de4dc8b7ee8208bde82a0 +guid: eea326f149a9947ff9c89d0374e7b524 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs index 6a5ab0f896..221958df36 100644 --- a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs @@ -9,7 +9,7 @@ namespace Unity.Netcode /// Partially solves for message loss. Unclamped lerping helps hide this, but not completely /// /// - public abstract class BufferedLinearInterpolator where T : struct + internal abstract class BufferedLinearInterpolator where T : struct { // interface for mock testing, abstracting away external systems public interface IInterpolatorTime @@ -177,7 +177,7 @@ public T GetInterpolatedValue() // protected abstract SimpleInterpolator SimpleInterpolator { get; } } - public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator + internal class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator { protected override float InterpolateUnclamped(float start, float end, float time) { @@ -192,7 +192,7 @@ protected override float Interpolate(float start, float end, float time) // protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorFloat(); } - public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator + internal class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator { protected override Quaternion InterpolateUnclamped(Quaternion start, Quaternion end, float time) { From 8845a594b7643163a2b3ce143715ce13a9c9c9a3 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 11:32:09 -0400 Subject: [PATCH 62/74] adding jira to todo --- com.unity.netcode.gameobjects/Components/NetworkTransform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs index d5baeb3204..ecd9eb5d42 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs @@ -494,7 +494,7 @@ internal void ApplyNetworkStateFromAuthority(NetworkState networkState) { m_Transform.localScale = Vector3.one; var lossyScale = m_Transform.lossyScale; - // todo this conversion is messing with interpolation. local scale interpolates fine, lossy scale is jittery. must investigate + // todo this conversion is messing with interpolation. local scale interpolates fine, lossy scale is jittery. must investigate. MTT-1208 m_Transform.localScale = new Vector3(networkState.ScaleX / lossyScale.x, networkState.ScaleY / lossyScale.y, networkState.ScaleZ / lossyScale.z); } From 3883bfba4fa5246de0eccab0db1caf91d9581c05 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 17:10:35 -0400 Subject: [PATCH 63/74] removing commented lines --- .../Components/Interpolator/BufferedLinearInterpolator.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs index 221958df36..0c19afa1bd 100644 --- a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs @@ -64,7 +64,6 @@ public void ResetTo(T targetValue) m_EndTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); m_StartTimeConsumed = new NetworkTime(InterpolatorTimeProxy.TickRate, 0); - // SimpleInterpolator.ResetTo(targetValue); // for statically placed objects, so we don't interpolate from 0 to current position Update(0); } @@ -173,8 +172,6 @@ public T GetInterpolatedValue() protected abstract T Interpolate(T start, T end, float time); protected abstract T InterpolateUnclamped(T start, T end, float time); - - // protected abstract SimpleInterpolator SimpleInterpolator { get; } } internal class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator @@ -188,8 +185,6 @@ protected override float Interpolate(float start, float end, float time) { return Mathf.Lerp(start, end, time); } - - // protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorFloat(); } internal class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator @@ -203,7 +198,5 @@ protected override Quaternion Interpolate(Quaternion start, Quaternion end, floa { return Quaternion.SlerpUnclamped(start, end, time); } - - // protected override SimpleInterpolator SimpleInterpolator { get; } = new SimpleInterpolatorQuaternion(); } } \ No newline at end of file From 92b9a55841cd1e674634c168341351e0e577277d Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Mon, 13 Sep 2021 17:13:54 -0400 Subject: [PATCH 64/74] removing useless lines --- testproject/Assets/Scripts/MoveInCircle.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index f440e6f55a..c8b2fc440a 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -15,9 +15,6 @@ public class MoveInCircle : NetworkBehaviour [SerializeField] private bool m_RunInUpdate; - private Vector3 m_DebugOldPosition; - private float m_DebugLastTime; - public override void OnNetworkSpawn() { base.OnNetworkSpawn(); @@ -46,11 +43,8 @@ private void Tick(bool isFixed) { if (NetworkManager.Singleton.IsServer || !m_RunServerOnly) { - m_DebugOldPosition = transform.position; var deltaTime = isFixed ? Time.fixedDeltaTime : Time.deltaTime; transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); - // Debug.Log($"ewqqwe {Math.Round((transform.position - debug_oldPosition).magnitude, 2)} time diff {Math.Round(Time.time - lastTime, 2)}"); - m_DebugLastTime = Time.time; transform.Rotate(0, m_RotationSpeed * deltaTime, 0); transform.localScale = ((Mathf.Sin(isFixed ? Time.fixedTime : Time.time)+1) * Vector3.one); } From 2e3f566b1a9d18cbc91a76a5837971858265c021 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 14 Sep 2021 10:34:57 -0400 Subject: [PATCH 65/74] fixing default scene for builds --- testproject/ProjectSettings/EditorBuildSettings.asset | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testproject/ProjectSettings/EditorBuildSettings.asset b/testproject/ProjectSettings/EditorBuildSettings.asset index 47e80671ee..e03fd43770 100644 --- a/testproject/ProjectSettings/EditorBuildSettings.asset +++ b/testproject/ProjectSettings/EditorBuildSettings.asset @@ -5,12 +5,12 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 - path: Assets/Scenes/ZooSam.unity - guid: 4683469c9a191411fbda5e426765b2fc - enabled: 1 path: Assets/MainMenu.unity guid: 21c7fd68cda9dd9488fc0cc01f885e39 + - enabled: 1 + path: Assets/Scenes/ZooSam.unity + guid: 4683469c9a191411fbda5e426765b2fc - enabled: 1 path: Assets/Samples/SamplesMenu.unity guid: 037562c9b1a469f498dfb34256ddf86f From 67689eb515f13bd153523aeb8f27c2f76198cb3b Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 14 Sep 2021 10:36:39 -0400 Subject: [PATCH 66/74] adding missing meta files --- com.unity.netcode.gameobjects/Prototyping.meta | 8 ++++++++ .../Prototyping/Interpolator.meta | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 com.unity.netcode.gameobjects/Prototyping.meta create mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator.meta diff --git a/com.unity.netcode.gameobjects/Prototyping.meta b/com.unity.netcode.gameobjects/Prototyping.meta new file mode 100644 index 0000000000..a536014db1 --- /dev/null +++ b/com.unity.netcode.gameobjects/Prototyping.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f9f645c043894b81ab326fe4703f4c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta new file mode 100644 index 0000000000..0bfe5f770f --- /dev/null +++ b/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32190d476d5de4dc8b7ee8208bde82a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 2c4e6d116a27781218442d48e6123b6ffeb2e3fc Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Tue, 14 Sep 2021 10:55:46 -0400 Subject: [PATCH 67/74] reverting changes to samplescene, it was already in ZooSam --- testproject/Assets/Scenes/SampleScene.unity | 409 ++++---------------- 1 file changed, 67 insertions(+), 342 deletions(-) diff --git a/testproject/Assets/Scenes/SampleScene.unity b/testproject/Assets/Scenes/SampleScene.unity index fbcfdb36d3..63064c6d3d 100644 --- a/testproject/Assets/Scenes/SampleScene.unity +++ b/testproject/Assets/Scenes/SampleScene.unity @@ -533,9 +533,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 - Channel: 10 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 --- !u!1 &403665142 GameObject: @@ -854,12 +865,6 @@ MonoBehaviour: ConnectAddress: 127.0.0.1 ConnectPort: 7777 ServerListenPort: 7777 - ServerWebsocketListenPort: 8887 - SupportWebsocket: 0 - Channels: [] - UseNetcodeRelay: 0 - NetcodeRelayAddress: 127.0.0.1 - NetcodeRelayPort: 8888 MessageSendMode: 0 --- !u!114 &620561611 MonoBehaviour: @@ -879,9 +884,6 @@ MonoBehaviour: NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 620561613} - RegisteredScenes: - - SampleScene - AllowRuntimeSceneChanges: 0 PlayerPrefab: {fileID: 8685790303553767886, guid: 96e0a72e30d0c46c8a5c9a750e8f5807, type: 3} NetworkPrefabs: [] @@ -933,7 +935,6 @@ MonoBehaviour: DisconnectTimeout: 5 ReconnectDelay: 0.5 MaxConnectAttempts: 10 - channels: [] MessageBufferSize: 5120 SimulatePacketLossChance: 5 SimulateMinLatency: 60 @@ -1130,150 +1131,6 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 ---- !u!1 &678326392 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 678326399} - - component: {fileID: 678326398} - - component: {fileID: 678326397} - - component: {fileID: 678326396} - - component: {fileID: 678326394} - - component: {fileID: 678326393} - - component: {fileID: 678326395} - m_Layer: 0 - m_Name: NetworkTransformBuffered - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &678326393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_MoveSpeed: 5 - m_RotationSpeed: 30 ---- !u!114 &678326394 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: - GlobalObjectIdHash: 1079447764 - AlwaysReplicateAsRoot: 0 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 ---- !u!114 &678326395 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} - m_Name: - m_EditorClassIdentifier: - Authority: 0 - Channel: 6 - InLocalSpace: 0 - FixedSendsPerSecond: 30 ---- !u!65 &678326396 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &678326397 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &678326398 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &678326399 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678326392} - m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} - m_LocalPosition: {x: 7.71, y: 1.55, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} --- !u!1 &702051983 GameObject: m_ObjectHideFlags: 0 @@ -1954,9 +1811,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 - Channel: 10 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 --- !u!114 &963826006 MonoBehaviour: @@ -2410,9 +2278,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 - Channel: 10 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 --- !u!114 &1397037319 MonoBehaviour: @@ -2633,8 +2512,8 @@ GameObject: - component: {fileID: 1402467448} - component: {fileID: 1402467447} - component: {fileID: 1402467446} - - component: {fileID: 1402467445} - component: {fileID: 1402467444} + - component: {fileID: 1402467445} m_Layer: 0 m_Name: GrabbableBallClientAuthoritative m_TagString: Untagged @@ -2664,12 +2543,23 @@ MonoBehaviour: m_GameObject: {fileID: 1402467443} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Script: {fileID: 11500000, guid: 54c9647dc784a46bca664910f182491e, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 - Channel: 10 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 --- !u!114 &1402467446 MonoBehaviour: @@ -3110,9 +3000,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: - Authority: 0 - Channel: 10 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0 + RotAngleThreshold: 0 + ScaleThreshold: 0 InLocalSpace: 0 + Interpolate: 1 FixedSendsPerSecond: 30 --- !u!224 &1536251758 stripped RectTransform: @@ -3295,182 +3196,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1636734282} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1643885206 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1643885211} - - component: {fileID: 1643885210} - - component: {fileID: 1643885209} - - component: {fileID: 1643885208} - - component: {fileID: 1643885207} - - component: {fileID: 1643885212} - - component: {fileID: 1643885213} - m_Layer: 0 - m_Name: NetworkTransformLegacy - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1643885207 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: df4fbe773fc544428171994e08b0483f, type: 3} - m_Name: - m_EditorClassIdentifier: - FixedSendsPerSecond: 20 - AssumeSyncedSends: 1 - InterpolatePosition: 1 - SnapDistance: 10 - InterpolateServer: 1 - MinMeters: 0.15 - MinDegrees: 1.5 - ExtrapolatePosition: 0 - MaxSendsToExtrapolate: 5 - Channel: - EnableRange: 0 - EnableNonProvokedResendChecks: 0 - DistanceSendrate: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 500 - value: 20 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 ---- !u!65 &1643885208 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1643885209 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1643885210 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1643885211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10.29, y: 1.55, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1643885212 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} - m_Name: - m_EditorClassIdentifier: - GlobalObjectIdHash: 1649186279 - AlwaysReplicateAsRoot: 0 - DontDestroyWithOwner: 0 - AutoObjectParentSync: 1 ---- !u!114 &1643885213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1643885206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 307c40a41954948e7a36bb6b64b4b9cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_MoveSpeed: 5 - m_RotationSpeed: 30 --- !u!1 &1815329519 GameObject: m_ObjectHideFlags: 0 From 976002a9ddef5b527dff85008a7d5187adce09d7 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 15 Sep 2021 22:46:29 -0400 Subject: [PATCH 68/74] bumping exec order --- com.unity.netcode.gameobjects/Components/NetworkTransform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs index ecd9eb5d42..9c1555a4ce 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs @@ -9,7 +9,7 @@ namespace Unity.Netcode.Components /// A component for syncing transforms /// [AddComponentMenu("Netcode/" + nameof(NetworkTransform))] - [DefaultExecutionOrder(1000)] // this is needed to catch the update time after the transform was updated by user scripts + [DefaultExecutionOrder(100000)] // this is needed to catch the update time after the transform was updated by user scripts public class NetworkTransform : NetworkBehaviour { internal struct NetworkState : INetworkSerializable From f5e27b90ddd7fcf3868bb07c300c1bd3e695f6e1 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 15 Sep 2021 22:50:38 -0400 Subject: [PATCH 69/74] restricting public api --- .../Components/Interpolator/BufferedLinearInterpolator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs index 0c19afa1bd..93b2831799 100644 --- a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs @@ -12,7 +12,7 @@ namespace Unity.Netcode internal abstract class BufferedLinearInterpolator where T : struct { // interface for mock testing, abstracting away external systems - public interface IInterpolatorTime + internal interface IInterpolatorTime { double BufferedServerTime { get; } double BufferedServerFixedTime { get; } From 9e22bfa9e6fea4543c65c8d51a0e9f8c5b5f546e Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 15 Sep 2021 23:10:56 -0400 Subject: [PATCH 70/74] removing not submitted LiteNetLib from ZooSam --- testproject/Assets/Scenes/ZooSam.unity | 29 ++++---------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/testproject/Assets/Scenes/ZooSam.unity b/testproject/Assets/Scenes/ZooSam.unity index 2b5074dd13..b7a79d5890 100644 --- a/testproject/Assets/Scenes/ZooSam.unity +++ b/testproject/Assets/Scenes/ZooSam.unity @@ -6769,7 +6769,6 @@ GameObject: - component: {fileID: 620561612} - component: {fileID: 620561611} - component: {fileID: 620561610} - - component: {fileID: 620561613} m_Layer: 0 m_Name: NetworkManager m_TagString: Untagged @@ -6813,7 +6812,7 @@ MonoBehaviour: LogLevel: 1 NetworkConfig: ProtocolVersion: 0 - NetworkTransport: {fileID: 620561613} + NetworkTransport: {fileID: 620561610} PlayerPrefab: {fileID: 4700706668509470175, guid: 7eeaaf9e50c0afc4dab93584a54fb0d6, type: 3} NetworkPrefabs: [] @@ -6823,7 +6822,6 @@ MonoBehaviour: ConnectionData: EnableTimeResync: 0 TimeResyncInterval: 30 - EnableNetworkVariable: 1 EnsureNetworkVariableLengthSafety: 0 EnableSceneManagement: 1 ForceSamePrefabs: 1 @@ -6847,28 +6845,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &620561613 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620561609} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db28424c2ae12f64da25c9ecccded6b1, type: 3} - m_Name: - m_EditorClassIdentifier: - Port: 7777 - Address: 127.0.0.1 - PingInterval: 1 - DisconnectTimeout: 5 - ReconnectDelay: 0.5 - MaxConnectAttempts: 10 - MessageBufferSize: 5120 - SimulatePacketLossChance: 0 - SimulateMinLatency: 70 - SimulateMaxLatency: 130 --- !u!1001 &627808638 PrefabInstance: m_ObjectHideFlags: 0 @@ -17755,6 +17731,9 @@ MonoBehaviour: m_EditorClassIdentifier: NetworkManager: {fileID: 620561611} ButtonsRoot: {fileID: 0} + AuthButton: {fileID: 0} + JoinCode: {fileID: 0} + Transport: {fileID: 0} --- !u!1 &1333670311 GameObject: m_ObjectHideFlags: 0 From 96eef69eca2e73b8e8ad4e873387fcb1bfade952 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 15 Sep 2021 23:49:17 -0400 Subject: [PATCH 71/74] fixing formatting issue --- .../BufferedLinearInterpolator.cs | 6 +-- .../Components/NetworkTransform.cs | 42 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs index 93b2831799..a4c522a860 100644 --- a/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs +++ b/com.unity.netcode.gameobjects/Components/Interpolator/BufferedLinearInterpolator.cs @@ -127,7 +127,7 @@ public T Update(float deltaTime) } else { - t = (float) ((RenderTime - m_StartTimeConsumed.Time) / range); + t = (float)((RenderTime - m_StartTimeConsumed.Time) / range); } if (t > 3) // max extrapolation @@ -160,7 +160,7 @@ public void AddMeasurement(T newMeasurement, NetworkTime sentTime) if (sentTime.Time > m_EndTimeConsumed.Time || m_LifetimeConsumedCount == 0) // treat only if value is newer than the one being interpolated to right now { - m_Buffer.Add(new BufferedItem {Item = newMeasurement, TimeSent = sentTime}); + m_Buffer.Add(new BufferedItem { Item = newMeasurement, TimeSent = sentTime }); m_Buffer.Sort((item1, item2) => item2.TimeSent.Time.CompareTo(item1.TimeSent.Time)); } } @@ -199,4 +199,4 @@ protected override Quaternion Interpolate(Quaternion start, Quaternion end, floa return Quaternion.SlerpUnclamped(start, end, time); } } -} \ No newline at end of file +} diff --git a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs index 9c1555a4ce..673c5d7072 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs @@ -33,8 +33,8 @@ public bool InLocalSpace get => (Bitset & (1 << InLocalSpaceBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << InLocalSpaceBit)); - else Bitset = (ushort) (Bitset & ~(1 << InLocalSpaceBit)); + if (value) Bitset = (ushort)(Bitset | (1 << InLocalSpaceBit)); + else Bitset = (ushort)(Bitset & ~(1 << InLocalSpaceBit)); } } @@ -44,8 +44,8 @@ public bool HasPositionX get => (Bitset & (1 << PositionXBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << PositionXBit)); - else Bitset = (ushort) (Bitset & ~(1 << PositionXBit)); + if (value) Bitset = (ushort)(Bitset | (1 << PositionXBit)); + else Bitset = (ushort)(Bitset & ~(1 << PositionXBit)); } } @@ -54,8 +54,8 @@ public bool HasPositionY get => (Bitset & (1 << PositionYBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << PositionYBit)); - else Bitset = (ushort) (Bitset & ~(1 << PositionYBit)); + if (value) Bitset = (ushort)(Bitset | (1 << PositionYBit)); + else Bitset = (ushort)(Bitset & ~(1 << PositionYBit)); } } @@ -64,8 +64,8 @@ public bool HasPositionZ get => (Bitset & (1 << PositionZBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << PositionZBit)); - else Bitset = (ushort) (Bitset & ~(1 << PositionZBit)); + if (value) Bitset = (ushort)(Bitset | (1 << PositionZBit)); + else Bitset = (ushort)(Bitset & ~(1 << PositionZBit)); } } @@ -75,8 +75,8 @@ public bool HasRotAngleX get => (Bitset & (1 << RotAngleXBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << RotAngleXBit)); - else Bitset = (ushort) (Bitset & ~(1 << RotAngleXBit)); + if (value) Bitset = (ushort)(Bitset | (1 << RotAngleXBit)); + else Bitset = (ushort)(Bitset & ~(1 << RotAngleXBit)); } } @@ -85,8 +85,8 @@ public bool HasRotAngleY get => (Bitset & (1 << RotAngleYBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << RotAngleYBit)); - else Bitset = (ushort) (Bitset & ~(1 << RotAngleYBit)); + if (value) Bitset = (ushort)(Bitset | (1 << RotAngleYBit)); + else Bitset = (ushort)(Bitset & ~(1 << RotAngleYBit)); } } @@ -95,8 +95,8 @@ public bool HasRotAngleZ get => (Bitset & (1 << RotAngleZBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << RotAngleZBit)); - else Bitset = (ushort) (Bitset & ~(1 << RotAngleZBit)); + if (value) Bitset = (ushort)(Bitset | (1 << RotAngleZBit)); + else Bitset = (ushort)(Bitset & ~(1 << RotAngleZBit)); } } @@ -106,8 +106,8 @@ public bool HasScaleX get => (Bitset & (1 << ScaleXBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << ScaleXBit)); - else Bitset = (ushort) (Bitset & ~(1 << ScaleXBit)); + if (value) Bitset = (ushort)(Bitset | (1 << ScaleXBit)); + else Bitset = (ushort)(Bitset & ~(1 << ScaleXBit)); } } @@ -116,8 +116,8 @@ public bool HasScaleY get => (Bitset & (1 << ScaleYBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << ScaleYBit)); - else Bitset = (ushort) (Bitset & ~(1 << ScaleYBit)); + if (value) Bitset = (ushort)(Bitset | (1 << ScaleYBit)); + else Bitset = (ushort)(Bitset & ~(1 << ScaleYBit)); } } @@ -126,8 +126,8 @@ public bool HasScaleZ get => (Bitset & (1 << ScaleZBit)) != 0; set { - if (value) Bitset = (ushort) (Bitset | (1 << ScaleZBit)); - else Bitset = (ushort) (Bitset & ~(1 << ScaleZBit)); + if (value) Bitset = (ushort)(Bitset | (1 << ScaleZBit)); + else Bitset = (ushort)(Bitset & ~(1 << ScaleZBit)); } } @@ -671,4 +671,4 @@ public void Teleport(Vector3 newPosition, Quaternion newRotation, Vector3 newSca throw new NotImplementedException(); // TODO MTT-769 } } -} \ No newline at end of file +} From 5258c9b0c3f3e9596b6d867de7e20e0f477a8813 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Wed, 15 Sep 2021 23:54:09 -0400 Subject: [PATCH 72/74] more formatting --- .../Components/NetworkTransform.cs | 40 +++++++++---------- testproject/Assets/Scripts/MoveInCircle.cs | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs index 673c5d7072..dd4756456e 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkTransform.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkTransform.cs @@ -33,8 +33,8 @@ public bool InLocalSpace get => (Bitset & (1 << InLocalSpaceBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << InLocalSpaceBit)); - else Bitset = (ushort)(Bitset & ~(1 << InLocalSpaceBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << InLocalSpaceBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << InLocalSpaceBit)); } } } @@ -44,8 +44,8 @@ public bool HasPositionX get => (Bitset & (1 << PositionXBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << PositionXBit)); - else Bitset = (ushort)(Bitset & ~(1 << PositionXBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << PositionXBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << PositionXBit)); } } } @@ -54,8 +54,8 @@ public bool HasPositionY get => (Bitset & (1 << PositionYBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << PositionYBit)); - else Bitset = (ushort)(Bitset & ~(1 << PositionYBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << PositionYBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << PositionYBit)); } } } @@ -64,8 +64,8 @@ public bool HasPositionZ get => (Bitset & (1 << PositionZBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << PositionZBit)); - else Bitset = (ushort)(Bitset & ~(1 << PositionZBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << PositionZBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << PositionZBit)); } } } @@ -75,8 +75,8 @@ public bool HasRotAngleX get => (Bitset & (1 << RotAngleXBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << RotAngleXBit)); - else Bitset = (ushort)(Bitset & ~(1 << RotAngleXBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << RotAngleXBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << RotAngleXBit)); } } } @@ -85,8 +85,8 @@ public bool HasRotAngleY get => (Bitset & (1 << RotAngleYBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << RotAngleYBit)); - else Bitset = (ushort)(Bitset & ~(1 << RotAngleYBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << RotAngleYBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << RotAngleYBit)); } } } @@ -95,8 +95,8 @@ public bool HasRotAngleZ get => (Bitset & (1 << RotAngleZBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << RotAngleZBit)); - else Bitset = (ushort)(Bitset & ~(1 << RotAngleZBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << RotAngleZBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << RotAngleZBit)); } } } @@ -106,8 +106,8 @@ public bool HasScaleX get => (Bitset & (1 << ScaleXBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << ScaleXBit)); - else Bitset = (ushort)(Bitset & ~(1 << ScaleXBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << ScaleXBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << ScaleXBit)); } } } @@ -116,8 +116,8 @@ public bool HasScaleY get => (Bitset & (1 << ScaleYBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << ScaleYBit)); - else Bitset = (ushort)(Bitset & ~(1 << ScaleYBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << ScaleYBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << ScaleYBit)); } } } @@ -126,8 +126,8 @@ public bool HasScaleZ get => (Bitset & (1 << ScaleZBit)) != 0; set { - if (value) Bitset = (ushort)(Bitset | (1 << ScaleZBit)); - else Bitset = (ushort)(Bitset & ~(1 << ScaleZBit)); + if (value) { Bitset = (ushort)(Bitset | (1 << ScaleZBit)); } + else { Bitset = (ushort)(Bitset & ~(1 << ScaleZBit)); } } } diff --git a/testproject/Assets/Scripts/MoveInCircle.cs b/testproject/Assets/Scripts/MoveInCircle.cs index c8b2fc440a..e82f407416 100644 --- a/testproject/Assets/Scripts/MoveInCircle.cs +++ b/testproject/Assets/Scripts/MoveInCircle.cs @@ -46,7 +46,7 @@ private void Tick(bool isFixed) var deltaTime = isFixed ? Time.fixedDeltaTime : Time.deltaTime; transform.position = transform.position + transform.forward * (m_MoveSpeed * deltaTime); transform.Rotate(0, m_RotationSpeed * deltaTime, 0); - transform.localScale = ((Mathf.Sin(isFixed ? Time.fixedTime : Time.time)+1) * Vector3.one); + transform.localScale = ((Mathf.Sin(isFixed ? Time.fixedTime : Time.time) + 1) * Vector3.one); } } } From 39ec72156f9efc37d51dabd741072b576b580f06 Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 16 Sep 2021 00:02:29 -0400 Subject: [PATCH 73/74] fixing line issue --- com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs index 69656dcbd8..13f4998c89 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/InterpolatorTests.cs @@ -348,4 +348,4 @@ public void TestDuplicatedValues() Assert.That(interp, Is.EqualTo(2f)); } } -} \ No newline at end of file +} From 211f0f95d79996a56c03c32a167373a7c940492f Mon Sep 17 00:00:00 2001 From: Samuel Bellomo Date: Thu, 16 Sep 2021 10:17:21 -0400 Subject: [PATCH 74/74] removing useless meta files --- com.unity.netcode.gameobjects/Prototyping.meta | 8 -------- .../Prototyping/Interpolator.meta | 8 -------- 2 files changed, 16 deletions(-) delete mode 100644 com.unity.netcode.gameobjects/Prototyping.meta delete mode 100644 com.unity.netcode.gameobjects/Prototyping/Interpolator.meta diff --git a/com.unity.netcode.gameobjects/Prototyping.meta b/com.unity.netcode.gameobjects/Prototyping.meta deleted file mode 100644 index a536014db1..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4f9f645c043894b81ab326fe4703f4c8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta b/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta deleted file mode 100644 index 0bfe5f770f..0000000000 --- a/com.unity.netcode.gameobjects/Prototyping/Interpolator.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 32190d476d5de4dc8b7ee8208bde82a0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: