diff --git a/Assets Package/Unity2D-Quadtree-Collision-Detection-System.unitypackage b/Assets Package/Unity2D-Quadtree-Collision-Detection-System.unitypackage deleted file mode 100644 index 454ec7a..0000000 Binary files a/Assets Package/Unity2D-Quadtree-Collision-Detection-System.unitypackage and /dev/null differ diff --git a/Assets/GizmosTool/GizmosTool.cs b/Assets/GizmosTool/GizmosTool.cs deleted file mode 100644 index fc849b4..0000000 --- a/Assets/GizmosTool/GizmosTool.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.GizmosTools -{ - public static class GizmosTool - { - /// - /// 绘制圆圈 - /// - /// - /// - /// - /// - public static void DrawCircle(Vector3 center, Quaternion rotation, float radius, int step = 36) - { - //TODO:缺转向功能 - Gizmos.DrawSphere(center, radius); - //var old = Gizmos.matrix; - //if (rotation.Equals(default(Quaternion))) - // rotation = Quaternion.identity; - //Gizmos.matrix = Matrix4x4.TRS(center, rotation, Vector3.one); - //var half = height / 2; - - ////draw the 4 outer lines - //Gizmos.DrawLine(Vector3.right * radius - Vector3.up * half, Vector3.right * radius + Vector3.up * half); - //Gizmos.DrawLine(-Vector3.right * radius - Vector3.up * half, -Vector3.right * radius + Vector3.up * half); - //Gizmos.DrawLine(Vector3.forward * radius - Vector3.up * half, Vector3.forward * radius + Vector3.up * half); - //Gizmos.DrawLine(-Vector3.forward * radius - Vector3.up * half, -Vector3.forward * radius + Vector3.up * half); - - ////draw the 2 cricles with the center of rotation being the center of the cylinder, not the center of the circle itself - //DrawWireArc(center + Vector3.up * half, radius, 360, 20, rotation, center); - //DrawWireArc(center + Vector3.down * half, radius, 360, 20, rotation, center); - //Gizmos.matrix = old; - } - - public static void DrawRect(Rect rect, Vector3 position, Quaternion rotation) - { - //TODO:缺转向功能 - Gizmos.DrawLine(new Vector3(rect.x, rect.yMax, 0), new Vector3(rect.xMax, rect.yMax, 0)); - Gizmos.DrawLine(new Vector3(rect.xMax, rect.yMax, 0), new Vector3(rect.xMax, rect.y, 0)); - Gizmos.DrawLine(new Vector3(rect.xMax, rect.y, 0), new Vector3(rect.x, rect.y, 0)); - Gizmos.DrawLine(new Vector3(rect.x, rect.y, 0), new Vector3(rect.x, rect.yMax, 0)); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Example/CollisionDrawer.cs b/Assets/Quadtree Collider Detection/Example/CollisionDrawer.cs index fd1b1de..0e9313a 100644 --- a/Assets/Quadtree Collider Detection/Example/CollisionDrawer.cs +++ b/Assets/Quadtree Collider Detection/Example/CollisionDrawer.cs @@ -1,27 +1,45 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Events; namespace MtC.Tools.QuadtreeCollider { - public class CollisionDrawer : MonoBehaviour, IOnQuadtreeCollisionStay + /// + /// 绘制碰撞器的组件 + /// + public class CollisionDrawer : MonoBehaviour, IOnQuadtreeCollisionStay, IOnQuadtreeCollisionEnter, IOnQuadtreeCollisionExit { - private List _colliders = new List(); + private readonly List colliders = new List(); + + public void OnQuadtreeCollisionEnter(QuadtreeCollider collider) + { + Debug.Log("碰撞器 " + collider.GetInstanceID() + " 进入碰撞器 " + GetInstanceID() + " 的范围"); + } public void OnQuadtreeCollisionStay(QuadtreeCollider collider) { - _colliders.Add(collider); + colliders.Add(collider); + } + + public void OnQuadtreeCollisionExit(QuadtreeCollider collider) + { + Debug.Log("碰撞器 " + collider.GetInstanceID() + " 离开碰撞器 " + GetInstanceID() + " 的范围"); } private void OnDrawGizmos() { Gizmos.color = Color.yellow * 0.8f; - foreach (QuadtreeCollider collider in _colliders) - if (collider) + foreach (QuadtreeCollider collider in colliders) + { + if (collider != null) + { Gizmos.DrawLine(transform.position, collider.transform.position); + } + } - _colliders.Clear(); + colliders.Clear(); } } } diff --git a/Assets/Quadtree Collider Detection/Example/Example Scene.unity b/Assets/Quadtree Collider Detection/Example/Example Scene.unity index 4992559..dbc6384 100644 --- a/Assets/Quadtree Collider Detection/Example/Example Scene.unity +++ b/Assets/Quadtree Collider Detection/Example/Example Scene.unity @@ -43,7 +43,7 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 12 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -96,8 +96,9 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaAO: 1 m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 + m_LightingSettings: {fileID: 1416275007} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -117,6 +118,8 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -148,12 +151,12 @@ MonoBehaviour: m_GameObject: {fileID: 71954733} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 + autoSubscribe: 1 + isDetector: 1 + radius: 160 --- !u!4 &71954735 Transform: m_ObjectHideFlags: 0 @@ -166,7 +169,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &71954736 SpriteRenderer: @@ -182,6 +185,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -226,10 +231,10 @@ MonoBehaviour: m_GameObject: {fileID: 71954733} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &114666802 +--- !u!1 &343835778 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -237,53 +242,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 114666804} - - component: {fileID: 114666803} - - component: {fileID: 114666805} - - component: {fileID: 114666806} + - component: {fileID: 343835782} + - component: {fileID: 343835781} + - component: {fileID: 343835780} + - component: {fileID: 343835779} m_Layer: 0 - m_Name: Collider (9) + m_Name: Collider (8) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &114666803 +--- !u!114 &343835779 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 114666802} + m_GameObject: {fileID: 343835778} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &114666804 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 114666802} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1339, y: 196, 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!212 &114666805 +--- !u!212 &343835780 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 114666802} + m_GameObject: {fileID: 343835778} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -291,6 +279,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -326,128 +316,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &114666806 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 114666802} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &128279172 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 128279174} - - component: {fileID: 128279173} - - component: {fileID: 128279175} - - component: {fileID: 128279176} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &128279173 +--- !u!114 &343835781 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 128279172} + m_GameObject: {fileID: 343835778} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &128279174 + autoSubscribe: 1 + isDetector: 1 + radius: 210 +--- !u!4 &343835782 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 128279172} + m_GameObject: {fileID: 343835778} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1173, y: 401, z: 0} + m_LocalPosition: {x: 319, y: 626, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &128279175 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 128279172} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &128279176 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 128279172} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &163203729 +--- !u!1 &347891790 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -455,1281 +353,82 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 163203731} - - component: {fileID: 163203730} - - component: {fileID: 163203732} - - component: {fileID: 163203733} + - component: {fileID: 347891793} + - component: {fileID: 347891792} + - component: {fileID: 347891791} m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged + m_Name: Main Camera + m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &163203730 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163203729} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &163203731 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163203729} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 379, y: 752, 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!212 &163203732 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163203729} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &163203733 -MonoBehaviour: +--- !u!81 &347891791 +AudioListener: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163203729} + m_GameObject: {fileID: 347891790} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &280989818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 280989820} - - component: {fileID: 280989819} - - component: {fileID: 280989821} - - component: {fileID: 280989822} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &280989819 -MonoBehaviour: +--- !u!20 &347891792 +Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 280989818} + m_GameObject: {fileID: 347891790} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &280989820 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.7783019, g: 1, b: 0.961351, 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: 1 + orthographic size: 5 + m_Depth: -1 + 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 &347891793 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 280989818} + m_GameObject: {fileID: 347891790} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1497, y: 484, 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!212 &280989821 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 280989818} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &280989822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 280989818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &347891790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 347891793} - - component: {fileID: 347891792} - - component: {fileID: 347891791} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &347891791 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347891790} - m_Enabled: 1 ---- !u!20 &347891792 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347891790} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.7783019, g: 1, b: 0.961351, 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: 1 - orthographic size: 5 - m_Depth: -1 - 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 &347891793 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347891790} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &350286807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 350286809} - - component: {fileID: 350286808} - - component: {fileID: 350286810} - - component: {fileID: 350286811} - m_Layer: 0 - m_Name: Collider (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &350286808 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 350286807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &350286809 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 350286807} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1577, y: 238, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &350286810 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 350286807} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &350286811 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 350286807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &400926775 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 400926777} - - component: {fileID: 400926776} - - component: {fileID: 400926778} - - component: {fileID: 400926779} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &400926776 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 400926775} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &400926777 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 400926775} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1134, y: 649, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &400926778 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 400926775} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &400926779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 400926775} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &428338082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 428338084} - - component: {fileID: 428338083} - - component: {fileID: 428338085} - - component: {fileID: 428338086} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &428338083 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 428338082} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &428338084 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 428338082} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 391, y: 538, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &428338085 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 428338082} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &428338086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 428338082} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &434935521 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 434935523} - - component: {fileID: 434935522} - - component: {fileID: 434935524} - - component: {fileID: 434935525} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &434935522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434935521} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &434935523 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434935521} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 626, y: 705, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &434935524 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434935521} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &434935525 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 434935521} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &488872677 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 488872679} - - component: {fileID: 488872678} - - component: {fileID: 488872680} - - component: {fileID: 488872681} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &488872678 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 488872677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &488872679 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 488872677} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1771, y: 272, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &488872680 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 488872677} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &488872681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 488872677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &539310189 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 539310191} - - component: {fileID: 539310190} - - component: {fileID: 539310192} - - component: {fileID: 539310193} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &539310190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 539310189} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &539310191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 539310189} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 876, y: 658, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &539310192 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 539310189} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &539310193 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 539310189} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &752355515 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 752355517} - - component: {fileID: 752355516} - - component: {fileID: 752355518} - - component: {fileID: 752355519} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &752355516 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752355515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &752355517 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752355515} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1261, y: 860, 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!212 &752355518 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752355515} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &752355519 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752355515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &812252821 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 812252823} - - component: {fileID: 812252822} - - component: {fileID: 812252824} - - component: {fileID: 812252825} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &812252822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812252821} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &812252823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812252821} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 928, y: 213, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &812252824 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812252821} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &812252825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812252821} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &956370403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 956370405} - - component: {fileID: 956370404} - - component: {fileID: 956370406} - - component: {fileID: 956370407} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &956370404 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 956370403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} - m_Name: - m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &956370405 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 956370403} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1614, y: 767, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &956370406 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 956370403} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10754, 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: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 0.2, y: 0.2} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!114 &956370407 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 956370403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &999567265 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &542776031 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1737,53 +436,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 999567267} - - component: {fileID: 999567266} - - component: {fileID: 999567268} - - component: {fileID: 999567269} + - component: {fileID: 542776035} + - component: {fileID: 542776034} + - component: {fileID: 542776033} + - component: {fileID: 542776032} m_Layer: 0 - m_Name: Collider (14) + m_Name: Collider (6) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &999567266 +--- !u!114 &542776032 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999567265} + m_GameObject: {fileID: 542776031} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &999567267 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999567265} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1040, y: 806, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &999567268 +--- !u!212 &542776033 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999567265} + m_GameObject: {fileID: 542776031} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -1791,6 +473,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1826,19 +510,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &999567269 +--- !u!114 &542776034 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999567265} + m_GameObject: {fileID: 542776031} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1231568038 + autoSubscribe: 1 + isDetector: 1 + radius: 180 +--- !u!4 &542776035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542776031} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1618, y: 386, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &838401674 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1846,53 +547,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1231568040} - - component: {fileID: 1231568039} - - component: {fileID: 1231568041} - - component: {fileID: 1231568042} + - component: {fileID: 838401678} + - component: {fileID: 838401677} + - component: {fileID: 838401676} + - component: {fileID: 838401675} m_Layer: 0 - m_Name: Collider (11) + m_Name: Collider (4) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1231568039 +--- !u!114 &838401675 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1231568038} + m_GameObject: {fileID: 838401674} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1231568040 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1231568038} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 402, y: 98, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1231568041 +--- !u!212 &838401676 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1231568038} + m_GameObject: {fileID: 838401674} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -1900,6 +584,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1935,19 +621,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1231568042 +--- !u!114 &838401677 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1231568038} + m_GameObject: {fileID: 838401674} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1244684632 + autoSubscribe: 1 + isDetector: 1 + radius: 230 +--- !u!4 &838401678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 838401674} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1362, y: 741, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &975307285 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1955,10 +658,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1244684634} - - component: {fileID: 1244684633} - - component: {fileID: 1244684635} - - component: {fileID: 1244684636} + - component: {fileID: 975307289} + - component: {fileID: 975307288} + - component: {fileID: 975307287} + - component: {fileID: 975307286} m_Layer: 0 m_Name: Collider (1) m_TagString: Untagged @@ -1966,42 +669,25 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1244684633 +--- !u!114 &975307286 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1244684632} + m_GameObject: {fileID: 975307285} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1244684634 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1244684632} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 550, y: 414, 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!212 &1244684635 +--- !u!212 &975307287 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1244684632} + m_GameObject: {fileID: 975307285} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2009,6 +695,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2044,19 +732,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1244684636 +--- !u!114 &975307288 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1244684632} + m_GameObject: {fileID: 975307285} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1294430041 + autoSubscribe: 1 + isDetector: 1 + radius: 150 +--- !u!4 &975307289 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975307285} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 642, y: 281, 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!1 &980718766 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2064,53 +769,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1294430043} - - component: {fileID: 1294430042} - - component: {fileID: 1294430044} - - component: {fileID: 1294430045} + - component: {fileID: 980718770} + - component: {fileID: 980718769} + - component: {fileID: 980718768} + - component: {fileID: 980718767} m_Layer: 0 - m_Name: Collider (10) + m_Name: Collider (5) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1294430042 +--- !u!114 &980718767 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294430041} + m_GameObject: {fileID: 980718766} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1294430043 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294430041} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 685, y: 245, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1294430044 +--- !u!212 &980718768 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294430041} + m_GameObject: {fileID: 980718766} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2118,6 +806,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2153,19 +843,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1294430045 +--- !u!114 &980718769 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294430041} + m_GameObject: {fileID: 980718766} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1453172291 + autoSubscribe: 1 + isDetector: 1 + radius: 85 +--- !u!4 &980718770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980718766} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1239, y: 251, 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 &1244684632 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2173,53 +880,53 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1453172293} - - component: {fileID: 1453172292} - - component: {fileID: 1453172294} - - component: {fileID: 1453172295} + - component: {fileID: 1244684634} + - component: {fileID: 1244684633} + - component: {fileID: 1244684635} + - component: {fileID: 1244684636} m_Layer: 0 - m_Name: Collider (12) + m_Name: Detector m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1453172292 +--- !u!114 &1244684633 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453172291} + m_GameObject: {fileID: 1244684632} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1453172293 + autoSubscribe: 1 + isDetector: 1 + radius: 180 +--- !u!4 &1244684634 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453172291} + m_GameObject: {fileID: 1244684632} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 885, y: 442, z: 0} + m_LocalPosition: {x: 612, y: 474, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1453172294 +--- !u!212 &1244684635 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453172291} + m_GameObject: {fileID: 1244684632} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2227,6 +934,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2262,19 +971,80 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1453172295 +--- !u!114 &1244684636 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1453172291} + m_GameObject: {fileID: 1244684632} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1713641323 +--- !u!850595691 &1416275007 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 2 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 0 + 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: 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: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRRussianRouletteStartBounce: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + 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 &1428873807 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2282,10 +1052,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1713641325} - - component: {fileID: 1713641324} - - component: {fileID: 1713641326} - - component: {fileID: 1713641327} + - component: {fileID: 1428873811} + - component: {fileID: 1428873810} + - component: {fileID: 1428873809} + - component: {fileID: 1428873808} m_Layer: 0 m_Name: Collider (3) m_TagString: Untagged @@ -2293,42 +1063,25 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1713641324 +--- !u!114 &1428873808 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1713641323} + m_GameObject: {fileID: 1428873807} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1713641325 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1713641323} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 793, y: 853, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1713641326 +--- !u!212 &1428873809 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1713641323} + m_GameObject: {fileID: 1428873807} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2336,6 +1089,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2371,19 +1126,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1713641327 +--- !u!114 &1428873810 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1713641323} + m_GameObject: {fileID: 1428873807} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1842664531 + autoSubscribe: 1 + isDetector: 1 + radius: 100 +--- !u!4 &1428873811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1428873807} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 478, y: 816, 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 &1880702611 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2391,53 +1163,79 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1842664533} - - component: {fileID: 1842664532} - - component: {fileID: 1842664534} - - component: {fileID: 1842664535} + - component: {fileID: 1880702613} + - component: {fileID: 1880702612} m_Layer: 0 - m_Name: Collider (17) + m_Name: Quadtree Drawer m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1842664532 +--- !u!114 &1880702612 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842664531} + m_GameObject: {fileID: 1880702611} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 65a70ac2a4cabb446a7f288fa4d80f96, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1842664533 +--- !u!4 &1880702613 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842664531} + m_GameObject: {fileID: 1880702611} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 148, y: 338, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 19 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1842664534 +--- !u!1 &1893816044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1893816048} + - component: {fileID: 1893816047} + - component: {fileID: 1893816046} + - component: {fileID: 1893816045} + m_Layer: 0 + m_Name: Collider (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1893816045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893816044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!212 &1893816046 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842664531} + m_GameObject: {fileID: 1893816044} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2445,6 +1243,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2480,62 +1280,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1842664535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1842664531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1880702611 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1880702613} - - component: {fileID: 1880702612} - m_Layer: 0 - m_Name: Quadtree Drawer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1880702612 +--- !u!114 &1893816047 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880702611} + m_GameObject: {fileID: 1893816044} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31e050134da906b438e28380877283bd, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!4 &1880702613 + autoSubscribe: 1 + isDetector: 1 + radius: 130 +--- !u!4 &1893816048 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880702611} + m_GameObject: {fileID: 1893816044} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 882, y: 278, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1891200277 +--- !u!1 &2124692501 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2543,53 +1317,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1891200279} - - component: {fileID: 1891200278} - - component: {fileID: 1891200280} - - component: {fileID: 1891200281} + - component: {fileID: 2124692505} + - component: {fileID: 2124692504} + - component: {fileID: 2124692503} + - component: {fileID: 2124692502} m_Layer: 0 - m_Name: Collider (19) + m_Name: Collider (7) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1891200278 +--- !u!114 &2124692502 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1891200277} + m_GameObject: {fileID: 2124692501} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &1891200279 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1891200277} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1681, y: 531, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &1891200280 +--- !u!212 &2124692503 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1891200277} + m_GameObject: {fileID: 2124692501} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2597,6 +1354,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2632,19 +1391,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &1891200281 +--- !u!114 &2124692504 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1891200277} + m_GameObject: {fileID: 2124692501} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &2090074143 + autoSubscribe: 1 + isDetector: 1 + radius: 170 +--- !u!4 &2124692505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124692501} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 922, y: 696, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2128354228 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2652,53 +1428,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2090074145} - - component: {fileID: 2090074144} - - component: {fileID: 2090074146} - - component: {fileID: 2090074147} + - component: {fileID: 2128354232} + - component: {fileID: 2128354231} + - component: {fileID: 2128354230} + - component: {fileID: 2128354229} m_Layer: 0 - m_Name: Collider (15) + m_Name: Collider (2) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2090074144 +--- !u!114 &2128354229 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090074143} + m_GameObject: {fileID: 2128354228} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a77ce0fac99f747a42c2542e247d4d, type: 3} + m_Script: {fileID: 11500000, guid: 03b4fa466a219714481328d0cd98f12d, type: 3} m_Name: m_EditorClassIdentifier: - _autoSubscribe: 1 - _isDetector: 1 - _radius: 150 ---- !u!4 &2090074145 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090074143} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1355, y: 703, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &2090074146 +--- !u!212 &2128354230 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090074143} + m_GameObject: {fileID: 2128354228} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2706,6 +1465,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2741,15 +1502,32 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!114 &2090074147 +--- !u!114 &2128354231 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2090074143} + m_GameObject: {fileID: 2128354228} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 219583b892b3c574e9bf3a5c554c05ee, type: 3} + m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3} m_Name: m_EditorClassIdentifier: + autoSubscribe: 1 + isDetector: 1 + radius: 130 +--- !u!4 &2128354232 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2128354228} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1024, y: 466, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Quadtree Collider Detection/Example/QuadtreeDrawer.cs b/Assets/Quadtree Collider Detection/Example/QuadtreeDrawer.cs index d1d6c2e..942ad01 100644 --- a/Assets/Quadtree Collider Detection/Example/QuadtreeDrawer.cs +++ b/Assets/Quadtree Collider Detection/Example/QuadtreeDrawer.cs @@ -14,32 +14,61 @@ public class QuadtreeDrawer : MonoBehaviour { private void OnDrawGizmos() { + // 如果在游戏状态,绘制四叉树 if (Application.isPlaying) + { DrawQuadtreeNodes(GetQuadtreeRoot()); + + DrawCollidersToNodes(GetQuadtreeInstance()); + } } + /// + /// 获取四叉树根节点 + /// + /// private QuadtreeNode GetQuadtreeRoot() { - //Debug.Log("获取根节点,获取结果:" + (QuadtreeNode)typeof(Quadtree).GetField("_root", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(GetQuadtreeInstance())); + //Debug.Log("获取根节点,获取结果:" + (QuadtreeNode)typeof(Quadtree).GetField("root", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(GetQuadtreeInstance())); - return (QuadtreeNode)typeof(Quadtree).GetField("_root", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(GetQuadtreeInstance()); + return (QuadtreeNode)typeof(Quadtree).GetField("root", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(GetQuadtreeInstance()); } + /// + /// 获取四叉树实例对象 + /// + /// private Quadtree GetQuadtreeInstance() { - return (Quadtree)typeof(Quadtree).GetField("_instance", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); + return (Quadtree)typeof(Quadtree).GetField("instance", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); } + /// + /// 绘制四叉树指定节点 + /// + /// private void DrawQuadtreeNodes(QuadtreeNode quadtreeNode) { if (HaveChildren(quadtreeNode)) + { + // 有子节点的情况下,绘制子节点 DrawChildrenNode(quadtreeNode); + } else + { + // 没有子节点,绘制末端节点 DrawTipNode(quadtreeNode); + } + // 绘制节点 DrawNode(quadtreeNode); } + /// + /// 判断一个四叉树节点是否有子节点 + /// + /// + /// private bool HaveChildren(QuadtreeNode quadtreeNode) { MethodInfo method = typeof(QuadtreeNode).GetMethod("HaveChildren", BindingFlags.Instance | BindingFlags.NonPublic); @@ -49,75 +78,126 @@ private bool HaveChildren(QuadtreeNode quadtreeNode) return (bool)method.Invoke(quadtreeNode, null); } + /// + /// 绘制一个四叉树节点的所有子节点 + /// + /// private void DrawChildrenNode(QuadtreeNode quadtreeNode) { + // 遍历所有子节点并绘制 foreach (QuadtreeNode child in GetChildren(quadtreeNode)) + { DrawQuadtreeNodes(child); + } } + /// + /// 获取一个四叉树节点的所有子节点 + /// + /// + /// private IEnumerable GetChildren(QuadtreeNode quadtreeNode) { - return (List)typeof(QuadtreeNode).GetField("_children", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); + return (List)typeof(QuadtreeNode).GetField("children", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); } + /// + /// 绘制末端节点 + /// + /// private void DrawTipNode(QuadtreeNode quadtreeNode) { + // 根据节点设置颜色 Gizmos.color = GetNodeColor(quadtreeNode); Handles.color = GetNodeColor(quadtreeNode); + // 绘制节点区域 DrawArea(quadtreeNode); + + // 绘制节点中的碰撞器 DrawColliders(quadtreeNode); } + /// + /// 根据节点位置获取节点颜色 + /// + /// + /// private Color GetNodeColor(QuadtreeNode quadtreeNode) { + // 获取根节点范围和要获取颜色的节点的范围,后续根据这两个范围确认颜色 Rect rootArea = GetArea(GetQuadtreeRoot()); Rect area = GetArea(quadtreeNode); + // 计算要获取颜色的节点的位置在根节点范围中的比例 float xLerp = Mathf.InverseLerp(rootArea.xMin, rootArea.xMax, area.x); float yLerp = Mathf.InverseLerp(rootArea.yMin, rootArea.yMax, area.y); + // 通过位置比例返回颜色,越靠右越红,越靠上越绿 return new Color(xLerp, yLerp, 0.5f); } + /// + /// 获取指定节点的区域 + /// + /// + /// private Rect GetArea(QuadtreeNode quadtreeNode) { - return (Rect)typeof(QuadtreeNode).GetField("_area", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); + return (Rect)typeof(QuadtreeNode).GetField("area", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); } + /// + /// 绘制节点区域 + /// + /// private void DrawArea(QuadtreeNode quadtreeNode) { //Debug.Log("绘制区域为 " + GetArea(quadtreeNode) + " 的节点的区域"); + // 获取区域 Rect area = GetArea(quadtreeNode); + // 计算出四个顶点 Vector3 topRight = new Vector3(area.xMax, area.yMax, 0); Vector3 bottomRight = new Vector3(area.xMax, area.y, 0); Vector3 bottomLeft = new Vector3(area.x, area.y, 0); Vector3 topLeft = new Vector3(area.x, area.yMax, 0); + // 连线,画出区域 Gizmos.DrawLine(topLeft, topRight); Gizmos.DrawLine(topRight, bottomRight); Gizmos.DrawLine(bottomRight, bottomLeft); Gizmos.DrawLine(bottomLeft, topLeft); } + /// + /// 绘制一个节点中所有的碰撞器 + /// + /// private void DrawColliders(QuadtreeNode quadtreeNode) { + // 遍历碰撞器并绘制 foreach (QuadtreeCollider collider in GetColliders(quadtreeNode)) + { DrawCollider(collider); + } } + /// + /// 绘制单个碰撞器 + /// + /// private void DrawCollider(QuadtreeCollider collider) { - Vector3 beginPoint = collider.transform.position + Vector3.right * collider.maxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)); //三角函数角度是从正右方开始的,画圆起始点是最右边的点raw + Vector3 beginPoint = collider.transform.position + Vector3.right * collider.MaxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)); //三角函数角度是从正右方开始的,画圆起始点是最右边的点raw Gizmos.DrawLine(collider.transform.position, beginPoint); for (int i = 1; i <= 144; i++) { float angle = 2 * Mathf.PI / 144 * i; - float x = collider.maxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)) * Mathf.Cos(angle) + collider.transform.position.x; - float y = collider.maxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)) * Mathf.Sin(angle) + collider.transform.position.y; + float x = collider.MaxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)) * Mathf.Cos(angle) + collider.transform.position.x; + float y = collider.MaxRadius * Mathf.Max(Mathf.Abs(collider.transform.lossyScale.x), Mathf.Abs(collider.transform.lossyScale.y)) * Mathf.Sin(angle) + collider.transform.position.y; Vector3 endPoint = new Vector3(x, y, collider.transform.position.z); Gizmos.DrawLine(beginPoint, endPoint); @@ -126,36 +206,91 @@ private void DrawCollider(QuadtreeCollider collider) } } + /// + /// 获取一个节点的所有碰撞器 + /// + /// + /// private List GetColliders(QuadtreeNode quadtreeNode) { - return (List)typeof(QuadtreeNode).GetField("_colliders", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); + return (List)typeof(QuadtreeNode).GetField("colliders", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); } + /// + /// 获取一个节点及其所有子节点的碰撞器总数 + /// + /// + /// + private int GetCollidersNumber(QuadtreeNode quadtreeNode) + { + return (int)typeof(QuadtreeNode).GetMethod("GetColliderNumbers", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(quadtreeNode, new object[0]); + } + + /// + /// 绘制节点 + /// + /// private void DrawNode(QuadtreeNode node) { Gizmos.color = GetNodeColor(node); + // 绘制节点信息 DrawNodeInfomationText(node); } + /// + /// 绘制节点信息 + /// + /// private void DrawNodeInfomationText(QuadtreeNode node) { Handles.Label(GetArea(node).center, GetNodeInfomationText(node)); } + /// + /// 获取一个节点的信息文本 + /// + /// + /// private string GetNodeInfomationText(QuadtreeNode node) { string infomation = ""; - infomation += "总碰撞器数:" + GetColliders(node).Count + "\n"; + infomation += "当前节点碰撞器数:" + GetColliders(node).Count + "\n"; + infomation += "总碰撞器数:" + GetCollidersNumber(node) + "\n"; infomation += "最大检测半径:" + GetMaxRadius(node) + "\n"; return infomation; } + /// + /// 获取最大半径 + /// + /// + /// private float GetMaxRadius(QuadtreeNode quadtreeNode) { - return (float)typeof(QuadtreeNode).GetField("_maxRadius", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); + return (float)typeof(QuadtreeNode).GetField("maxRadius", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(quadtreeNode); + } + + // 绘制碰撞器到节点的映射表 + private void DrawCollidersToNodes(Quadtree instance) + { + Dictionary collidersToNodes = GetCollidersToNodes(instance); + + foreach(KeyValuePair pair in collidersToNodes) + { + Handles.Label(pair.Key.Position, "所属节点:(" + pair.Value.Area.x + ", " + pair.Value.Area.y + ")"); + } + } + + /// + /// 获取四叉树映射表 + /// + /// + private Dictionary GetCollidersToNodes(Quadtree instance) + { + return (Dictionary)typeof(Quadtree).GetField("collidersToNodes", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(instance); } } } diff --git a/Assets/Quadtree Collider Detection/MyGizmos.cs b/Assets/Quadtree Collider Detection/MyGizmos.cs new file mode 100644 index 0000000..b960bf6 --- /dev/null +++ b/Assets/Quadtree Collider Detection/MyGizmos.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MtC.Tools.QuadtreeCollider +{ + public static partial class MyGizmos + { + public static void DrawCircle(Vector3 center, float radius, int edgeNumber = 360) + { + Vector3 beginPoint = center + Vector3.right * radius; //三角函数角度是从正右方开始的,画圆起始点是最右边的点 + for (int i = 1; i <= edgeNumber; i++) + { + float angle = 2 * Mathf.PI / edgeNumber * i; + + float x = radius * Mathf.Cos(angle) + center.x; + float y = radius * Mathf.Sin(angle) + center.y; + Vector3 endPoint = new Vector3(x, y, center.z); + + Gizmos.DrawLine(beginPoint, endPoint); + + beginPoint = endPoint; + } + } + } +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/CircleQuadtreeCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/CircleQuadtreeCollider.cs index ce33175..38cccec 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/CircleQuadtreeCollider.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/CircleQuadtreeCollider.cs @@ -12,43 +12,37 @@ public class CircleQuadtreeCollider : QuadtreeCollider /// /// 半径 /// - public float radius + public float Radius { get { - return _radius * Mathf.Max(Mathf.Abs(_transform.lossyScale.x), Mathf.Abs(_transform.lossyScale.y)); //TODO:后期可以考虑通过配置文件达到不同的面向方向 + return radius * Mathf.Max(Mathf.Abs(transform.lossyScale.x), Mathf.Abs(transform.lossyScale.y)); + //TODO:后期可以考虑通过配置文件达到不同的面向方向 } - set { _radius = value; } + set { radius = value; } } [SerializeField] - private float _radius; + private float radius; - internal override float maxRadius => radius; + // 圆形碰撞器的最大半径就是半径 + internal override float MaxRadius => Radius; protected override void DrawColliderGizomoSelected() { - Gizmos.color = (isDetector ? Color.yellow : Color.green) * 0.8f; + // 检测器是黄色,碰撞器是绿色 + Gizmos.color = (IsDetector ? Color.yellow : Color.green) * 0.8f; - Vector3 beginPoint = transform.position + Vector3.right * _radius * Mathf.Max(Mathf.Abs(transform.lossyScale.x), Mathf.Abs(transform.lossyScale.y)); //三角函数角度是从正右方开始的,画圆起始点是最右边的点raw - Gizmos.DrawLine(transform.position, beginPoint); - for (int i = 1; i <= 144; i++) - { - float angle = 2 * Mathf.PI / 144 * i; - - float x = _radius * Mathf.Max(Mathf.Abs(transform.lossyScale.x), Mathf.Abs(transform.lossyScale.y)) * Mathf.Cos(angle) + transform.position.x; - float y = _radius * Mathf.Max(Mathf.Abs(transform.lossyScale.x), Mathf.Abs(transform.lossyScale.y)) * Mathf.Sin(angle) + transform.position.y; - Vector3 endPoint = new Vector3(x, y, transform.position.z); - - Gizmos.DrawLine(beginPoint, endPoint); - - beginPoint = endPoint; - } + // 绘制圆形 + MyGizmos.DrawCircle(transform.position, Radius); } private void OnValidate() { - if (_radius < 0) - _radius = 0; + // 限制编辑时半径不能小于 0 + if (radius < 0) + { + radius = 0; + } } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/Editor/QuadtreeColliderEditor.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/Editor/QuadtreeColliderEditor.cs index a912713..24532a9 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/Editor/QuadtreeColliderEditor.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/Editor/QuadtreeColliderEditor.cs @@ -12,13 +12,13 @@ namespace MtC.Tools.QuadtreeCollider [CanEditMultipleObjects] public class QuadtreeColliderEditor : Editor { - private static string AUTO_SUBSCRIBE_WARNING_TEXT = "自动订阅功能只能用于从对象实例化到销毁一直挂载的实现了四叉树碰撞事件接口的组件,这是因为自动订阅的碰撞器在Awake遍历所有组件并进行唯一一次订阅,并且不会自动取消订阅。在对象实例化后挂载的组件不会自动订阅,在对象生命周期中中途销毁的自动订阅组件会导致内存泄漏"; + private const string AUTO_SUBSCRIBE_WARNING_TEXT = "自动订阅功能只能用于从对象实例化时就挂载的实现了四叉树碰撞事件接口的组件,这是因为自动订阅的碰撞器在 Awake 时遍历所有组件并进行唯一一次订阅,并且不会自动取消订阅。在对象实例化后挂载的组件不会自动订阅。虽然不会自动取消订阅,但由于 UnityEvent 弱引用的特性不会导致内存泄漏。"; public override void OnInspectorGUI() { DrawDefaultInspector(); - if (((QuadtreeCollider)target).autoSubscribe) + if (((QuadtreeCollider)target).AutoSubscribe) EditorGUILayout.HelpBox(AUTO_SUBSCRIBE_WARNING_TEXT, MessageType.Warning); } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/QuadtreeCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/QuadtreeCollider.cs index 5c0bb63..5bc66ad 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/QuadtreeCollider.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Colliders/QuadtreeCollider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Events; namespace MtC.Tools.QuadtreeCollider { @@ -9,30 +10,35 @@ namespace MtC.Tools.QuadtreeCollider /// public abstract class QuadtreeCollider : MonoBehaviour { - protected Transform _transform; - - private List _lastCollisionColliders = new List(); + /// + /// 上一次碰撞检测时碰撞到的碰撞器 + /// + private List lastCollisionColliders = new List(); - private Action _collisionEnterEventHandler; - private Action _collisionStayEventHandler; - private Action _collisionExitEventHandler; + private readonly UnityEvent collisionEnterEventHandler = new UnityEvent(); + private readonly UnityEvent collisionStayEventHandler = new UnityEvent(); + private readonly UnityEvent collisionExitEventHandler = new UnityEvent(); - public bool autoSubscribe { get { return _autoSubscribe; } } + /// + /// 是否自动订阅 + /// + public bool AutoSubscribe { get { return autoSubscribe; } } [SerializeField] - private bool _autoSubscribe = true; + [Header("自动订阅")] + private bool autoSubscribe = true; /// /// 碰撞器的位置 /// - internal Vector2 position + internal Vector2 Position { - get { return _transform.position; } + get { return transform.position; } } /// /// 碰撞器需要检测的最大半径,超过这个半径则认为不会发生碰撞 /// - internal abstract float maxRadius + internal abstract float MaxRadius { get; } @@ -40,52 +46,47 @@ internal abstract float maxRadius /// /// 这个碰撞器是不是碰撞检测器 /// - public bool isDetector + public bool IsDetector { - get - { - return _isDetector; - } - set - { - if (_isDetector != value) // 只有有变化时才处理,更新碰撞器成本可以省下来 - { - _isDetector = value; - - if (_isDetector) - Quadtree.AddDetector(this); - else - Quadtree.RemoveDetector(this); - } - } + get { return isDetector; } + set { isDetector = value; } } [SerializeField] - private bool _isDetector; + private bool isDetector; private void Awake() { - _transform = transform; - - if (_autoSubscribe) + // 如果是自动订阅的则将物体上实现了碰撞接口的组件进行订阅 + if (autoSubscribe) + { foreach (Component component in GetComponents()) { if (component is IOnQuadtreeCollisionEnter) - _collisionEnterEventHandler += (component as IOnQuadtreeCollisionEnter).OnQuadtreeCollisionEnter; + { + SubscribeCollisionEnter(component as IOnQuadtreeCollisionEnter); + } if (component is IOnQuadtreeCollisionStay) - _collisionStayEventHandler += (component as IOnQuadtreeCollisionStay).OnQuadtreeCollisionStay; + { + SubscribeCollisionStay(component as IOnQuadtreeCollisionStay); + } if (component is IOnQuadtreeCollisionExit) - _collisionExitEventHandler += (component as IOnQuadtreeCollisionExit).OnQuadtreeCollisionExit; + { + SubscribeCollisionExit(component as IOnQuadtreeCollisionExit); + } } + } } private void OnEnable() { + // 将这个碰撞器添加到四叉树中 Quadtree.AddCollider(this); } private void OnDisable() { - Quadtree.RemoveCollider(this); + // 将这个碰撞器从四叉树中移除 + Quadtree.RemoveColliderWithMerge(this); } /// @@ -94,19 +95,30 @@ private void OnDisable() /// internal void SendCollision(List collisionColliders) { + // 对所有发生碰撞的物体进行处理 foreach (QuadtreeCollider collider in collisionColliders) { - if (!_lastCollisionColliders.Contains(collider)) - _collisionEnterEventHandler?.Invoke(collider); + // 上一次碰撞检测时没有和这个碰撞器发生碰撞,发出碰撞进入事件 + if (!lastCollisionColliders.Contains(collider)) + { + collisionEnterEventHandler?.Invoke(collider); + } - _collisionStayEventHandler?.Invoke(collider); + // 发出碰撞持续事件 + collisionStayEventHandler?.Invoke(collider); } - foreach (QuadtreeCollider collider in _lastCollisionColliders) + // 对上一次碰撞检测的时候发生碰撞,这一检测没有碰撞的碰撞器,发出碰撞离开事件 + foreach (QuadtreeCollider collider in lastCollisionColliders) + { if (!collisionColliders.Contains(collider)) - _collisionExitEventHandler?.Invoke(collider); + { + collisionExitEventHandler?.Invoke(collider); + } + } - _lastCollisionColliders = collisionColliders; + // 记录这一次碰撞检测碰撞到的碰撞器 + lastCollisionColliders = collisionColliders; } /// @@ -123,85 +135,59 @@ public bool IsCollitionToCollider(QuadtreeCollider collider) /// 订阅碰撞进入事件 /// /// - public void SubscribeCollisionEnter(Action action) + public void SubscribeCollisionEnter(IOnQuadtreeCollisionEnter subscriber) { - foreach (Action subscribedAction in _collisionEnterEventHandler.GetInvocationList()) - if (subscribedAction == action) - return; - - _collisionEnterEventHandler += action; + collisionEnterEventHandler.AddListener(subscriber.OnQuadtreeCollisionEnter); } /// /// 取消订阅碰撞进入事件 /// /// - public void CancelSubscribeCollisionEnter(Action action) + public void CancelSubscribeCollisionEnter(IOnQuadtreeCollisionEnter subscriber) { - foreach (Action subscribedAction in _collisionEnterEventHandler.GetInvocationList()) - if (subscribedAction == action) - { - _collisionEnterEventHandler -= action; - return; - } + collisionEnterEventHandler.RemoveListener(subscriber.OnQuadtreeCollisionEnter); } /// /// 订阅碰撞停留事件 /// /// - public void SubscribeCollisionStay(Action action) + public void SubscribeCollisionStay(IOnQuadtreeCollisionStay subscriber) { - foreach (Action subscribedAction in _collisionStayEventHandler.GetInvocationList()) - if (subscribedAction == action) - return; - - _collisionStayEventHandler += action; + collisionStayEventHandler.AddListener(subscriber.OnQuadtreeCollisionStay); } /// /// 取消订阅碰撞停留事件 /// /// - public void CancelSubscribeCollisionStay(Action action) + public void CancelSubscribeCollisionStay(IOnQuadtreeCollisionStay subscriber) { - foreach (Action subscribedAction in _collisionStayEventHandler.GetInvocationList()) - if (subscribedAction == action) - { - _collisionStayEventHandler -= action; - return; - } + collisionStayEventHandler.RemoveListener(subscriber.OnQuadtreeCollisionStay); } /// /// 订阅碰撞离开事件 /// /// - public void SubscribeCollisionExit(Action action) + public void SubscribeCollisionExit(IOnQuadtreeCollisionExit subscriber) { - foreach (Action subscribedAction in _collisionExitEventHandler.GetInvocationList()) - if (subscribedAction == action) - return; - - _collisionExitEventHandler += action; + collisionExitEventHandler.AddListener(subscriber.OnQuadtreeCollisionExit); } /// /// 取消订阅碰撞离开事件 /// /// - public void CancelSubscribeCollisionExit(Action action) + public void CancelSubscribeCollisionExit(IOnQuadtreeCollisionExit subscriber) { - foreach (Action subscribedAction in _collisionExitEventHandler.GetInvocationList()) - if (subscribedAction == action) - { - _collisionExitEventHandler -= action; - return; - } + collisionExitEventHandler.RemoveListener(subscriber.OnQuadtreeCollisionExit); } private void OnDrawGizmosSelected() { + // 绘制碰撞器 Gizmo DrawColliderGizomoSelected(); } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Editor/QuadtreeConfigEditorWindow.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Editor/QuadtreeConfigEditorWindow.cs index 5937a5e..cd070b1 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Editor/QuadtreeConfigEditorWindow.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Editor/QuadtreeConfigEditorWindow.cs @@ -7,18 +7,18 @@ namespace MtC.Tools.QuadtreeCollider { public class QuadtreeConfigEditorWindow : EditorWindow { - private QuadtreeConfig config + private QuadtreeConfig Config { get { - if (_config != null) - return _config; + if (config != null) + return config; - _config = GetSettingObject(); - return _config; + config = GetSettingObject(); + return config; } } - private QuadtreeConfig _config; + private QuadtreeConfig config; [MenuItem("Tools/Quadtree/Quadtree Config")] private static void GetWindow() @@ -40,7 +40,7 @@ private void DrawProposal() private void DrawSettingEditor() { - Editor.CreateEditor(config).DrawDefaultInspector(); + Editor.CreateEditor(Config).DrawDefaultInspector(); } QuadtreeConfig GetSettingObject() @@ -96,10 +96,10 @@ void OnSceneGUI(SceneView sceneView) { Handles.color = Color.red * 0.9f; - Vector3 upperRight = new Vector3(QuadtreeConfig.startArea.xMax, QuadtreeConfig.startArea.yMax, 0); - Vector3 lowerRight = new Vector3(QuadtreeConfig.startArea.xMax, QuadtreeConfig.startArea.yMin, 0); - Vector3 lowerLeft = new Vector3(QuadtreeConfig.startArea.xMin, QuadtreeConfig.startArea.yMin, 0); - Vector3 upperLeft = new Vector3(QuadtreeConfig.startArea.xMin, QuadtreeConfig.startArea.yMax, 0); + Vector3 upperRight = new Vector3(QuadtreeConfig.StartArea.xMax, QuadtreeConfig.StartArea.yMax, 0); + Vector3 lowerRight = new Vector3(QuadtreeConfig.StartArea.xMax, QuadtreeConfig.StartArea.yMin, 0); + Vector3 lowerLeft = new Vector3(QuadtreeConfig.StartArea.xMin, QuadtreeConfig.StartArea.yMin, 0); + Vector3 upperLeft = new Vector3(QuadtreeConfig.StartArea.xMin, QuadtreeConfig.StartArea.yMax, 0); Handles.DrawLine(upperRight, lowerRight); Handles.DrawLine(lowerRight, lowerLeft); diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/QuadtreeConfig.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/QuadtreeConfig.cs index db9dc64..ecb905a 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/QuadtreeConfig.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/QuadtreeConfig.cs @@ -12,50 +12,82 @@ public class QuadtreeConfig : ScriptableObject /// public const string CONFIG_OBJECT_NAME = "Quadtree Config"; - private static QuadtreeConfig config + private static QuadtreeConfig Config { get { - if (_config != null) - return _config; + if (config != null) + return config; else - _config = Resources.Load(CONFIG_OBJECT_NAME); - return _config; + config = Resources.Load(CONFIG_OBJECT_NAME); + return config; } } - private static QuadtreeConfig _config; + private static QuadtreeConfig config; /// /// 一个节点里的碰撞器数量上限,超过上限后进行分割 /// - public static int maxCollidersNumber + public static int MaxCollidersNumber { - get { return config._maxCollidersNumber; } + get { return Config.maxCollidersNumber; } } [SerializeField] [Header("单个节点的直属碰撞器数量上限,超过这个数量则判断为需要分割")] - private int _maxCollidersNumber = 10; + private int maxCollidersNumber = 10; /// /// 单个节点的最短边的最小长度,当任意一个边的长度小于这个长度时,无论碰撞器数量,不再进行分割 /// - public static float minSideLength + public static float MinSideLength { - get { return config._minSideLength; } + get { return Config.minSideLength; } } [SerializeField] [Header("单个节点的最短边长,节点任意一条边边长小于这个值则不能再进行分割")] - private float _minSideLength = 10; // 这个值用于应对过度分割导致树深度过大性能反而下降的情况,同时可以避免大量碰撞器位置完全相同导致的无限分割 + private float minSideLength = 10; // 这个值用于应对过度分割导致树深度过大性能反而下降的情况,同时可以避免大量碰撞器位置完全相同导致的无限分割 + + /// + /// 一个节点里的碰撞器数量上限,超过上限后进行分割 + /// + public static int MinCollidersNumber + { + get { return Config.minCollidersNumber; } + } + [SerializeField] + [Header("单个父级节点的所有子节点的碰撞器数量和下限,低于这个数量则判断为需要合并子节点到这个节点")] + private int minCollidersNumber = 5; /// /// 初始根节点范围 /// - public static Rect startArea + public static Rect StartArea { - get { return config._startArea; } + get { return Config.startArea; } } [SerializeField] [Header("四叉树创建时的范围")] - private Rect _startArea = new Rect(-1, -1, 1922, 1082); + private Rect startArea = new Rect(-1, -1, 1922, 1082); + + private void OnValidate() + { + // 最大碰撞器数量必须大于0,否则会无限分割 + if(maxCollidersNumber < 1) + { + maxCollidersNumber = 1; + } + + // 最小边长必须大于0,否则一旦所有碰撞器聚集到一个位置将会发生无限分割 + if(minSideLength < 0) + { + minSideLength = 0.1f; + } + + // 最小碰撞器数量必须小于最大碰撞器数量,否则会发生合并分割来回跳 + if (minCollidersNumber >= maxCollidersNumber) + { + minCollidersNumber = maxCollidersNumber - 1; + } + } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Resources/Quadtree Config.asset b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Resources/Quadtree Config.asset index 572c4eb..fe45de8 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Resources/Quadtree Config.asset +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Config/Resources/Quadtree Config.asset @@ -9,12 +9,13 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c2e632ee1d4e0094c805794c82ea76a6, type: 3} + m_Script: {fileID: 11500000, guid: 742584cee55bd2c4b9469b9c7adef272, type: 3} m_Name: Quadtree Config m_EditorClassIdentifier: - _maxCollidersNumber: 5 - _minSideLength: 100 - _startArea: + maxCollidersNumber: 10 + minSideLength: 10 + minCollidersNumber: 7 + startArea: serializedVersion: 2 x: -1 y: -1 diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Detectors/QuadtreeCollisionDetector.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Detectors/QuadtreeCollisionDetector.cs index 878e0ad..c905217 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Detectors/QuadtreeCollisionDetector.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Detectors/QuadtreeCollisionDetector.cs @@ -5,6 +5,9 @@ namespace MtC.Tools.QuadtreeCollider { + /// + /// 四叉树碰撞检测器 + /// internal static class QuadtreeCollisionDetector { /// @@ -43,8 +46,7 @@ private static bool CircleToCircle(QuadtreeCollider colliderA, QuadtreeCollider CircleQuadtreeCollider circleColliderA = (CircleQuadtreeCollider)colliderA; CircleQuadtreeCollider circleColliderB = (CircleQuadtreeCollider)colliderB; - return Vector2.Distance(circleColliderA.position, circleColliderB.position) <= circleColliderA.radius + circleColliderB.radius; - //TODO:圆形碰撞器的半径和最大检测半径是一样的,如果功能无误可以考虑不进行强转节约计算量 + return Vector2.Distance(circleColliderA.Position, circleColliderB.Position) <= circleColliderA.Radius + circleColliderB.Radius; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/AddCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/AddCollider.cs index ddb9311..84b6d93 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/AddCollider.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/AddCollider.cs @@ -2,14 +2,17 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System.Linq; namespace MtC.Tools.QuadtreeCollider { - // 添加碰撞器部分 + /// + /// 四叉树添加碰撞器部分 + /// internal partial class Quadtree : MonoBehaviour { /// - /// 将判断根节点位于新根节点的哪个子节点索引的映射表,规则:[上1, 右1] + /// 比特索引,将判断根节点位于新根节点的哪个子节点索引的映射表,规则:[上1, 右1] /// private static readonly Dictionary indexByteToInt = new Dictionary { @@ -19,87 +22,159 @@ internal partial class Quadtree : MonoBehaviour { 0b10, 3 }, // 左上 => 10 => 3 }; - internal void DoAddCollider(QuadtreeCollider collider) + /// + /// 添加碰撞器 + /// + /// + internal QuadtreeNode.OperationResult DoAddCollider(QuadtreeCollider collider) { - while (!_root.AddCollider(collider)) //TODO:此处假设存入碰撞器失败的原因只会是碰撞器不在四叉树范围中,如果出现存入错误可能就是因为这里出了问题 + // 存入 + QuadtreeNode.OperationResult result = root.AddColliderByArea(collider); + + // 循环存入碰撞器,直到存入成功 + while (!result.Success) + { + // 如果存入失败则说明碰撞器在四叉树外,让四叉树向碰撞器方向生长 UpwordGroupToCollider(collider); + + // 再次存入 + result = root.AddColliderByArea(collider); + } + // XXX:逻辑上存入失败的原因只可能是碰撞器不在范围内,但也不排除意外的可能,如果发生死循环 bug,可以考虑从这里处理 + + // 更新映射表 + collidersToNodes.OverlayMerge(result.CollidersToNodes).RemoveOnValueIsNull(); + + return result; } + /// + /// 让四叉树向碰撞器方向生长 + /// + /// private void UpwordGroupToCollider(QuadtreeCollider collider) { + // 获取当前根节点在新的四叉树根节点中的位置的比特索引 byte mainChildIndexByte = GetMainChildIndexByte(collider); + // 获取新的四叉树根节点的子节点列表 List children = GetChildren(mainChildIndexByte); - Rect newRootArea = new Rect(children[QuadtreeNode.LEFT_BOTTOM_CHILD_INDEX].area.position, children[QuadtreeNode.LEFT_BOTTOM_CHILD_INDEX].area.size * 2); + // 创建新的四叉树根节点的区域 + Rect newRootArea = new Rect(children[QuadtreeNode.LEFT_BOTTOM_CHILD_INDEX].Area.position, children[QuadtreeNode.LEFT_BOTTOM_CHILD_INDEX].Area.size * 2); - _root = new QuadtreeNode(newRootArea, children, indexByteToInt[mainChildIndexByte]); + // 创建新的四叉树节点,并设为新的根节点 + root = new QuadtreeNode(newRootArea, children, indexByteToInt[mainChildIndexByte]); } + /// + /// 获取当前根节点在新的四叉树中的子节点位置的比特索引 + /// + /// + /// private byte GetMainChildIndexByte(QuadtreeCollider collider) { + // 默认左下角 byte indexByte = 0b00; - if (collider.position.x < _root.area.x) - indexByte |= 0b01; // 碰撞器位于现有区域原点的左边 => 四叉树向左生长 => 根节点是新根节点右边的节点 => 判断左右的右侧位设为1 - if (collider.position.y < _root.area.y) + // 碰撞器位于现有区域原点的左边 => 四叉树向左生长 => 根节点是新根节点右边的节点 => 判断左右的右侧位设为1 + if (collider.Position.x < root.Area.x) + { + indexByte |= 0b01; + } + + // 碰撞器位于现有区域原点的下边 => 四叉树向下生长 => 根节点是新根节点上边的节点 => 判断上下的上方向位设为1 + if (collider.Position.y < root.Area.y) + { indexByte |= 0b10; + } return indexByte; } + /// + /// 获取生长后的四叉树的子节点列表 + /// + /// + /// private List GetChildren(byte mainChildIndexByte) { + // 获取生长后的四叉树所需的 xy 轴的 最小、中间、最大 坐标 GetX(mainChildIndexByte, out float xMin, out float xMiddle, out float xMax); GetY(mainChildIndexByte, out float yMin, out float yMiddle, out float yMax); List children = new List(); - children.Add(indexByteToInt[mainChildIndexByte] == 0 ? _root : new QuadtreeNode(new Rect(xMiddle, yMiddle, _root.area.width, _root.area.height))); - children.Add(indexByteToInt[mainChildIndexByte] == 1 ? _root : new QuadtreeNode(new Rect(xMiddle, yMin, _root.area.width, _root.area.height))); - children.Add(indexByteToInt[mainChildIndexByte] == 2 ? _root : new QuadtreeNode(new Rect(xMin, yMin, _root.area.width, _root.area.height))); - children.Add(indexByteToInt[mainChildIndexByte] == 3 ? _root : new QuadtreeNode(new Rect(xMin, yMiddle, _root.area.width, _root.area.height))); + // 添加子节点,如果是当前根节点的位置则设为当前根节点,否则创建新节点 + children.Add(indexByteToInt[mainChildIndexByte] == 0 ? root : new QuadtreeNode(new Rect(xMiddle, yMiddle, root.Area.width, root.Area.height))); + children.Add(indexByteToInt[mainChildIndexByte] == 1 ? root : new QuadtreeNode(new Rect(xMiddle, yMin, root.Area.width, root.Area.height))); + children.Add(indexByteToInt[mainChildIndexByte] == 2 ? root : new QuadtreeNode(new Rect(xMin, yMin, root.Area.width, root.Area.height))); + children.Add(indexByteToInt[mainChildIndexByte] == 3 ? root : new QuadtreeNode(new Rect(xMin, yMiddle, root.Area.width, root.Area.height))); return children; } + /// + /// 获取新的四叉树的 x 轴 左、中、右 三个坐标 + /// + /// + /// + /// + /// private void GetX(byte mainChildIndexByte, out float xMin, out float xMiddle, out float xMax) { if (IsGrowToRight(mainChildIndexByte)) { - xMin = _root.area.x; - xMiddle = _root.area.xMax; - xMax = _root.area.xMax + _root.area.width; + xMin = root.Area.x; + xMiddle = root.Area.xMax; + xMax = root.Area.xMax + root.Area.width; } else { - xMin = _root.area.x - _root.area.width; - xMiddle = _root.area.x; - xMax = _root.area.xMax; + xMin = root.Area.x - root.Area.width; + xMiddle = root.Area.x; + xMax = root.Area.xMax; } } + /// + /// 检测四叉树是否向右生长 + /// + /// + /// bool IsGrowToRight(byte mainChildIndexByte) { return (mainChildIndexByte & 0b01) == 0; } + /// + /// 获取新的四叉树的 y 轴 底、中、顶 三个坐标 + /// + /// + /// + /// + /// private void GetY(byte mainChildIndexByte, out float yMin, out float yMiddle, out float yMax) { if (IsGrowToUp(mainChildIndexByte)) { - yMin = _root.area.y; - yMiddle = _root.area.yMax; - yMax = _root.area.yMax + _root.area.height; + yMin = root.Area.y; + yMiddle = root.Area.yMax; + yMax = root.Area.yMax + root.Area.height; } else { - yMin = _root.area.y - _root.area.height; - yMiddle = _root.area.y; - yMax = _root.area.yMax; + yMin = root.Area.y - root.Area.height; + yMiddle = root.Area.y; + yMax = root.Area.yMax; } } + /// + /// 检测四叉树是否向上生长 + /// + /// + /// bool IsGrowToUp(byte mainChildIndexByte) { return (mainChildIndexByte & 0b10) == 0; diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs index 694ab30..14e1994 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs @@ -1,48 +1,75 @@ using System.Collections.Generic; using UnityEngine; +using System.Linq; namespace MtC.Tools.QuadtreeCollider { - // 实例部分 /// - /// 四叉树包装类 + /// 四叉树实例部分 /// internal partial class Quadtree : MonoBehaviour { /// - /// 所有检测器 + /// 四叉树根节点 /// - private List _detectors = new List(); + private QuadtreeNode root = null; /// - /// 四叉树根节点 + /// 碰撞器到节点的映射表 /// - private QuadtreeNode _root = null; + private readonly Dictionary collidersToNodes = new Dictionary(); private void Awake() { - _root = new QuadtreeNode(QuadtreeConfig.startArea); // 节点创建过程中使用了Resources.Load,这个方法不能通过类的字段声明时赋值来调用 + // 节点创建过程中使用了Resources.Load,这个方法不能通过类的字段声明时赋值来调用 + root = new QuadtreeNode(QuadtreeConfig.StartArea); } private void Update() { + // 更新四叉树 UpdateQuadtree(); + // 进行检测 Detect(); } + /// + /// 更新四叉树 + /// private void UpdateQuadtree() { - _root.Update(); + // 从根节点开始更新碰撞器位置 + QuadtreeNode.OperationResult positionResult = root.UpdatePosition(); + + // 更新映射表 + collidersToNodes.OverlayMerge(positionResult.CollidersToNodes).RemoveOnValueIsNull(); + + // 从根节点更新最大半径 + root.UpdateMaxRadius(); + + // 从包装类两次调用而不是从根节点一次调用的原因是,更新位置时可能有的节点跑到了树外面,这就需要生长四叉树,根节点就会改变 + // 因为生长出的节点原来是没有碰撞器的,因此这些节点不需要进行碰撞器位置越界更新 + // 但这些节点需要进行最大半径更新,否则新节点的最大半径是负无穷,会导致生长的这一帧碰撞检测错误 } + /// + /// 进行碰撞检测 + /// private void Detect() { - List detectors = new List(_detectors); // 防止在进行检测时发生检测器列表的变化,直接用碰撞器列表内容创建新列表 - foreach (QuadtreeCollider detector in detectors) + // 筛选出所有碰撞器中是检测器的 + List detectorsTemp = collidersToNodes.Keys.Where(collider => collider.IsDetector).ToList(); + + foreach (QuadtreeCollider detector in detectorsTemp) { - List collisionColliders = instance._root.GetCollidersInCollision(detector); + // 获取所有与当前遍历到的碰撞器发生碰撞的碰撞器 + List collisionColliders = Instance.root.GetCollidersInCollision(detector); + + // 移除当前遍历的碰撞器本身 collisionColliders.Remove(detector); - detector.SendCollision(collisionColliders); //TODO:如果在检测时报出空异常等异常,可能是这里没有进行空异常的判断导致的 + + // 发出碰撞事件 + detector.SendCollision(collisionColliders); } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs index d8a5bbe..ca4d5ce 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs @@ -4,90 +4,117 @@ namespace MtC.Tools.QuadtreeCollider { - // 单例部分 + /// + /// 四叉树单例部分 + /// internal partial class Quadtree : MonoBehaviour { /// /// 实例 /// - private static Quadtree instance + private static Quadtree Instance { get { - if (_instance != null) - return _instance; + if (instance != null) + return instance; lock (typeof(Quadtree)) { - if (_instance == null) + if (instance == null) { - _instance = new GameObject("Quadtree").AddComponent(); - DontDestroyOnLoad(_instance); + // 创建一个带四叉树组件的对象,并设为不随场景加载销毁 + instance = new GameObject("Quadtree").AddComponent(); + DontDestroyOnLoad(instance); } - return _instance; + return instance; } } } - private static Quadtree _instance; + private static Quadtree instance; /// /// 向四叉树中添加碰撞器 /// /// - public static void AddCollider(QuadtreeCollider collider) + public static QuadtreeNode.OperationResult AddCollider(QuadtreeCollider collider) { - instance.DoAddCollider(collider); + // 不能重复存入碰撞器 + if (Instance.collidersToNodes.ContainsKey(collider)) + { + return new QuadtreeNode.OperationResult(false); + } - if (collider.isDetector) - AddDetector(collider); + // 向实例中添加碰撞器 + return Instance.DoAddCollider(collider); } /// - /// 在重新存入碰撞器时使用的存入方法,不会改变检测器列表 + /// 从四叉树中移除碰撞器,符合条件时会合并节点 /// /// - internal static void AddColliderOnReset(QuadtreeCollider collider) + /// + public static QuadtreeNode.OperationResult RemoveColliderWithMerge(QuadtreeCollider collider) { - instance.DoAddCollider(collider); - - // 重新存入碰撞器是将四叉树中存在的碰撞器取出来重新存入,前后的碰撞器列表并没有变化,检测器列表更不会变化,省一步快一步 + return RemoveCollider(collider, true); } /// - /// 添加检测器,只会添加进检测列表,不会添加碰撞器 + /// 从四叉树中移除碰撞器,不进行合并 /// - /// - internal static void AddDetector(QuadtreeCollider detector) + /// + internal static QuadtreeNode.OperationResult RemoveColliderWithOutMerge(QuadtreeCollider collider) { - if (!instance._detectors.Contains(detector)) - instance._detectors.Add(detector); + return RemoveCollider(collider, false); } /// /// 从四叉树中移除碰撞器 /// /// - public static void RemoveCollider(QuadtreeCollider collider) + /// 是否需要在需要合并的时候进行合并 + /// + internal static QuadtreeNode.OperationResult RemoveCollider(QuadtreeCollider collider, bool withMerge) { - if (_instance == null) - return; + // 如果没有实例,不进行处理,这一步是必须的,否则在游戏关闭时会发生销毁时四叉树实例一次次出现,进而导致异常 + if(instance == null) + { + return new QuadtreeNode.OperationResult(false); + } - _instance._root.RemoveCollider(collider); + // 映射表里没有这个碰撞器,说明树里没有这个碰撞器,直接返回失败 + if (!Instance.collidersToNodes.ContainsKey(collider)) + { + return new QuadtreeNode.OperationResult(false); + } - if (collider.isDetector) - RemoveDetector(collider); - } + // 根据映射表直接从末梢节点移除碰撞器 + QuadtreeNode.OperationResult result; + if (withMerge) + { + result = Instance.collidersToNodes[collider].RemoveColliderFromSelfWithMerge(collider); + } + else + { + result = Instance.collidersToNodes[collider].RemoveColliderFromSelfWithOutMerge(collider); + } - /// - /// 移除检测器,只会移除出监测列表,不会移除碰撞器 - /// - /// - internal static void RemoveDetector(QuadtreeCollider detector) - { - if (_instance == null) - return; + if (result.Success) + { + // 移除成功后更新映射表,覆盖合并映射表并移除空值 + Instance.collidersToNodes.OverlayMerge(result.CollidersToNodes).RemoveOnValueIsNull(); + } + else + { + throw new System.ArgumentOutOfRangeException( + "移除碰撞器 " + + "(" + collider.Position.x + ", " + collider.Position.y + ")" + + " 时发生错误:碰撞器到节点的映射表中存在这个碰撞器,但映射到的节点 " + + "(" + Instance.collidersToNodes[collider].Area.ToString() + ")" + + " 移除失败,可能是碰撞器并不在节点中"); + } - _instance._detectors.Remove(detector); + return result; } } -} \ No newline at end of file +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/AddCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/AddCollider.cs index 96e0aab..83341cb 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/AddCollider.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/AddCollider.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System.Linq; namespace MtC.Tools.QuadtreeCollider { @@ -9,84 +10,197 @@ namespace MtC.Tools.QuadtreeCollider internal partial class QuadtreeNode { /// - /// 向四叉树中存入碰撞器 + /// 根据节点范围向四叉树中存入碰撞器,只当碰撞器在节点范围内时才存入 /// /// 存入的碰撞器 /// 如果成功存入,返回 true - internal bool AddCollider(QuadtreeCollider collider) + internal OperationResult AddColliderByArea(QuadtreeCollider collider) { - if (!_area.Contains(collider.position)) - return false; + return AddCollider(collider, (nodeParam, colliderParam) => + { + // 如果碰撞器在节点范围内,说明碰撞器可以存入这个节点 + return nodeParam.Area.Contains(colliderParam.Position); + }); + } + + /// + /// 根据指定标准存入碰撞器 + /// + /// 要存入的碰撞器 + /// 如果这个方法返回 true 这说明这个碰撞器可以存入当前节点 + /// + private OperationResult AddCollider(QuadtreeCollider collider, Func canAdd) + { + // 不符合存入标准的直接返回存入失败 + if (!canAdd(this, collider)) + { + // 不符合存入标准并不会导致映射表的变化,只返回失败即可 + return new OperationResult(false); + } + // 有子节点,发给子节点保存 if (HaveChildren()) - return AddColliderIntoChildren(collider); + { + return AddColliderIntoChildren(collider, (nodeParam, colliderParam) => nodeParam.AddCollider(colliderParam, canAdd)); + } - AddColliderIntoSelf(collider); - return true; + // 没有子节点,保存节点并返回结果 + return AddColliderIntoSelf(collider); } - private bool AddColliderIntoChildren(QuadtreeCollider collider) + /// + /// 将碰撞器按照指定标准存入到子节点 + /// + /// 要存入的碰撞器 + /// 存入方法 + /// + private OperationResult AddColliderIntoChildren(QuadtreeCollider collider, Func addCollider) { - foreach (QuadtreeNode child in _children) - if (child.AddCollider(collider)) - return true; + // 遍历子节点存入碰撞器 + foreach (QuadtreeNode child in children) + { + // 如果有一个子节点存入成功,则将这个节点的操作结果作为结果返回 + OperationResult result = addCollider(child, collider); + if (result.Success) + { + return result; + } + } - throw new ArgumentOutOfRangeException("向范围是 " + _area + " 的节点的子节点存入碰撞器 " + collider + " 时发生错误:碰撞器没有存入任何子节点"); // 正常流程中不会运行到这 + // 正常流程中不会运行到的所有子节点都保存失败的情况 + throw new ArgumentOutOfRangeException("向范围是 " + area + " 的节点的子节点存入碰撞器 " + collider + " 时发生错误:碰撞器没有存入任何子节点"); } - private void AddColliderIntoSelf(QuadtreeCollider collider) + /// + /// 向当前节点添加碰撞器 + /// + /// + private OperationResult AddColliderIntoSelf(QuadtreeCollider collider) { - _colliders.Add(collider); + // 向当前节点添加肯定是成功的 + OperationResult result = new OperationResult(true); + + // 添加进碰撞器列表 + colliders.Add(collider); + // 记录下碰撞器到这个节点的映射 + result.CollidersToNodes.Add(collider, this); + // 如果需要分割节点则进行分割 if (NeedSplit()) - Split(); - } + { + // 分割节点 + OperationResult splitResult = Split(); - private bool NeedSplit() - { - return _colliders.Count > QuadtreeConfig.maxCollidersNumber && _area.height > QuadtreeConfig.minSideLength && _area.width > QuadtreeConfig.minSideLength; + // 将分割节点的映射覆盖到返回结果的映射中 + result.CollidersToNodes.OverlayMerge(splitResult.CollidersToNodes); + } + + return result; } - private void Split() + /// + /// 检测是否需要分割节点 + /// + /// + private bool NeedSplit() { - /* - * 清除掉不在自己区域内的碰撞器,防止下发碰撞器失败 - * 分割处子节点并下发碰撞器 - * 把清除掉的那些碰撞器重新存入四叉树 - * - * 实际是进行了一次位置更新,但为了防止节点碰撞器互相越界导致的多重更新将分割写在存入和取出中间 - */ - List outOfAreaColliders = GetAndRemoveCollidersOutOfField(); - DoSplite(); - ResetCollidersIntoQuadtree(outOfAreaColliders); + return + // 碰撞器数量超过节点内最大碰撞器数量 + colliders.Count > QuadtreeConfig.MaxCollidersNumber + // 节点高度超过节点最小高度 + && area.height > QuadtreeConfig.MinSideLength + // 节点宽度超过节点最小宽度 + && area.width > QuadtreeConfig.MinSideLength; } - private void DoSplite() + /// + /// 分割节点 + /// + private OperationResult Split() { + // 创建子节点 CreateChildren(); - SetAllColliderIntoChindren(); + + // 把碰撞器分发给子节点,返回操作结果 + return SetAllColliderIntoChindren(); } + /// + /// 创建子节点 + /// private void CreateChildren() { - float halfWidth = _area.width / 2; // 为了防止float的乘除运算误差,一次运算求出宽高的一半,子节点的宽高使用加减运算获得 - float halfHeight = _area.height / 2; // 误差的来源是浮点数的储存方式,除非出现新的储存方式,否则误差将作为标准现象保留下去 + // 计算出宽高的一半用于创建子节点,先算出一半是为了防止可能出现的计算误差 + float halfWidth = area.width / 2; + float halfHeight = area.height / 2; - _children = new List + // 创建子节点 + children = new List { - new QuadtreeNode(new Rect(_area.x + halfWidth, _area.y + halfHeight, _area.width - halfWidth, _area.height - halfHeight), this), // 右上子节点 - new QuadtreeNode(new Rect(_area.x + halfWidth, _area.y, _area.width - halfWidth, halfHeight), this), // 右下子节点 - new QuadtreeNode(new Rect(_area.x, _area.y, halfWidth, halfHeight), this), // 左下子节点 - new QuadtreeNode(new Rect(_area.x, _area.y + halfHeight, halfWidth, _area.height - halfHeight), this) // 左上子节点 + new QuadtreeNode(new Rect(area.x + halfWidth, area.y + halfHeight, area.width - halfWidth, area.height - halfHeight), this), // 右上子节点 + new QuadtreeNode(new Rect(area.x + halfWidth, area.y, area.width - halfWidth, halfHeight), this), // 右下子节点 + new QuadtreeNode(new Rect(area.x, area.y, halfWidth, halfHeight), this), // 左下子节点 + new QuadtreeNode(new Rect(area.x, area.y + halfHeight, halfWidth, area.height - halfHeight), this) // 左上子节点 }; } - private void SetAllColliderIntoChindren() + /// + /// 把碰撞器分发给子节点 + /// + private OperationResult SetAllColliderIntoChindren() { - foreach (QuadtreeCollider collider in _colliders) - AddColliderIntoChildren(collider); + // 分发操作必然成功 + OperationResult result = new OperationResult(true); + + // 把当前节点的碰撞器全部存入到子节点,这里为了防止可能有碰撞器已经离开了节点范围,需要根据方向而不是范围存入 + foreach (QuadtreeCollider collider in colliders) + { + // 根据方向进行存入 + OperationResult addResult = AddColliderByDirection(collider); + + // 因为分发给子节点后子节点可能也会发生分割,因此通过覆盖合并的方式把子节点的映射合并进返回结果中 + result.CollidersToNodes.OverlayMerge(addResult.CollidersToNodes); + } + + // 清空当前节点存储的碰撞器 + colliders.Clear(); + + return result; + + // 分发功能如果使用先移除越界的碰撞器分割后重新存入树,则有可能因为移除节点导致需要合并,形成 分割反而导致了合并 的逻辑套娃 + } + + /// + /// 根据碰撞器相对于节点的位置向四叉树中存入碰撞器 + /// + /// + /// + private OperationResult AddColliderByDirection(QuadtreeCollider collider) + { + return AddCollider(collider, (nodeParam, colliderParam) => + { + // 没有父节点的是根节点,根节点可以存入任何方向的碰撞器 + if(nodeParam.parent == null) + { + return true; + } + + // 如果检测的节点是发起这个方法的节点,无论碰撞器在什么位置,都可以存入到这个节点中 + if (nodeParam == this) + { + return true; + } + + // 当前节点相对于父节点的方向与碰撞器相对于父节点的方向,在 X 轴上是否一致 + bool colliderAndNodeOnSameXSide = !((nodeParam.Area.center.x >= nodeParam.parent.Area.center.x) ^ (colliderParam.Position.x >= nodeParam.parent.Area.center.x)); + // 当前节点相对于父节点的方向与碰撞器相对于父节点的方向,在 Y 轴上是否一致 + bool colliderAndNodeOnSameYSide = !((nodeParam.Area.center.y >= nodeParam.parent.Area.center.y) ^ (colliderParam.Position.y >= nodeParam.parent.Area.center.y)); + + // 这里使用 >= 是因为 Rect 的范围是(包含左边和底边,不包含顶边和右边) - _colliders.Clear(); + // 两个方向都一致,说明碰撞器可以存入这个节点 + return colliderAndNodeOnSameXSide && colliderAndNodeOnSameYSide; + }); } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Basic.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Basic.cs index 530e2fb..d272865 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Basic.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Basic.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System.Linq; namespace MtC.Tools.QuadtreeCollider { @@ -33,27 +34,27 @@ internal partial class QuadtreeNode /// /// 父节点 /// - private QuadtreeNode _parent = null; + private QuadtreeNode parent = null; /// /// 四叉树节点所拥有的区域 /// - internal Rect area + internal Rect Area { - get { return _area; } + get { return area; } } - private Rect _area = default; + private Rect area = default; /// /// 这个节点所拥有的碰撞器 /// - private List _colliders = new List(); + private List colliders = new List(); /// /// 这个节点所拥有的的子节点 /// - private List _children = null; + private List children = null; /// /// 这个节点所拥有的所有碰撞器中,需要检测半径最长的碰撞器的检测半径 /// - private float _maxRadius = DEFAULT_MAX_RADIUS; + private float maxRadius = DEFAULT_MAX_RADIUS; /// /// 根节点的构造方法,只有区域没有父节点。根节点 @@ -61,7 +62,7 @@ internal Rect area /// internal QuadtreeNode(Rect area) { - _area = area; + this.area = area; } /// @@ -71,7 +72,7 @@ internal QuadtreeNode(Rect area) /// internal QuadtreeNode(Rect area, QuadtreeNode parent) : this(area) { - _parent = parent; + this.parent = parent; } /// @@ -81,17 +82,73 @@ internal QuadtreeNode(Rect area, QuadtreeNode parent) : this(area) /// internal QuadtreeNode(Rect area, List children, int mainNodeIndex) : this(area) { - _children = children; + this.children = children; - _maxRadius = children[mainNodeIndex]._maxRadius; + // 逆向生长出的节点没有碰撞器,之前根节点的最大半径就是新的根节点的最大半径 + maxRadius = children[mainNodeIndex].maxRadius; - foreach (QuadtreeNode child in _children) - child._parent = this; + // 给所有子节点设置父节点 + foreach (QuadtreeNode child in this.children) + { + child.parent = this; + } } + /// + /// 检测当前节点是否有子节点 + /// + /// private bool HaveChildren() { - return _children != null; // 子节点List只在创建子节点时才会创建,判断是不是null就能判断有没有子节点 + // 子节点List只在创建子节点时才会创建,判断是不是null就能判断有没有子节点 + return children != null; + } + } + + /// + /// 的扩展方法类 + /// + internal static partial class DictionaryExtension + { + /// + /// 将指定的 Dictionary 中的内容直接覆盖进调用这个方法的 Dictionary 中
+ /// 【注意】这个方法会导致调用的 Dictionary 内容变化 + ///
+ /// + /// + /// + /// + /// + public static Dictionary OverlayMerge(this Dictionary mainDictonary, Dictionary subDictonary) + { + // 遍历整个 subDictionary + foreach(KeyValuePair pair in subDictonary) + { + // 使用根据索引存值的特性,如果没有这个 Key 则添加,有这个 Key 则覆盖 + mainDictonary[pair.Key] = subDictonary[pair.Key]; + } + + return mainDictonary; + } + + /// + /// 移除掉 Value 为 null 的值
+ /// 【注意】这个方法会导致调用的 Dictionary 内容变化 + ///
+ /// + /// + /// + /// + public static Dictionary RemoveOnValueIsNull(this Dictionary mainDictonary) + { + List nullKeys = mainDictonary.Where(pair => pair.Value == null).Select(pair => pair.Key).ToList(); + + nullKeys.ForEach(key => + { + mainDictonary.Remove(key); + }); + + return mainDictonary; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Detect.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Detect.cs index 0d3da54..4105a20 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Detect.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Detect.cs @@ -14,37 +14,68 @@ internal partial class QuadtreeNode /// internal List GetCollidersInCollision(QuadtreeCollider collider) { + // 如果指定碰撞器不可能与当前节点内的任何碰撞器碰撞,返回空列表 if (!PossibleCollisions(collider)) + { return new List(); + } + // 如果有子节点,从子节点中寻找发生碰撞的碰撞器 if (HaveChildren()) + { return GetCollidersInCollisionFromChildren(collider); + } + // 没有子节点,从当前节点中寻找发生碰撞的碰撞器 return GetCollidersInCollisionFromSelf(collider); } + /// + /// 检测指定碰撞器是否有可能与当前节点内的任何碰撞器发生碰撞 + /// + /// + /// private bool PossibleCollisions(QuadtreeCollider collider) { - return _area.DistanceToPoint(collider.position) <= _maxRadius + collider.maxRadius; // 如果节点区域到碰撞器的距离小于等于节点最大检测半径和碰撞器最大检测半径之和,则说明节点中可能有碰撞器能够与传入的碰撞器发生碰撞 + // 如果节点区域到碰撞器的距离小于等于节点最大检测半径和碰撞器最大检测半径之和,则说明节点中可能有碰撞器能够与传入的碰撞器发生碰撞 + return area.DistanceToPoint(collider.Position) <= maxRadius + collider.MaxRadius; } + /// + /// 从子节点中获取与指定碰撞器发生碰撞的碰撞器 + /// + /// + /// private List GetCollidersInCollisionFromChildren(QuadtreeCollider collider) { List colliders = new List(); - foreach (QuadtreeNode child in _children) + // 遍历子节点进行碰撞检测并保存发生碰撞的碰撞器 + foreach (QuadtreeNode child in children) + { colliders.AddRange(child.GetCollidersInCollision(collider)); + } return colliders; } + /// + /// 从当前节点中获取与指定碰撞器发生碰撞的碰撞器 + /// + /// + /// private List GetCollidersInCollisionFromSelf(QuadtreeCollider collider) { List colliders = new List(); - foreach (QuadtreeCollider currentCollider in _colliders) + // 遍历所有碰撞器,如果与指定碰撞器发生碰撞则记录到列表里 + foreach (QuadtreeCollider currentCollider in this.colliders) + { if (currentCollider.IsCollitionToCollider(collider)) + { colliders.Add(currentCollider); + } + } return colliders; } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs index c37230c..67b290f 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System.Linq; namespace MtC.Tools.QuadtreeCollider { @@ -8,60 +9,220 @@ namespace MtC.Tools.QuadtreeCollider internal partial class QuadtreeNode { /// - /// 从树中移除碰撞器 + /// 从当前节点中移除指定碰撞器,不进行合并 /// /// - internal void RemoveCollider(QuadtreeCollider collider) + /// + internal OperationResult RemoveColliderFromSelfWithOutMerge(QuadtreeCollider collider) { - if (!RemoveColliderByPosition(collider)) // 首先根据位置移除碰撞器,但有时候碰撞器移出了所在节点的范围,就会发生找不到节点无法移除的情况 - RemoveColliderFromAllNodes(collider); // 此时使用全节点遍历移除 + bool listResult = colliders.Remove(collider); + + if (listResult) + { + // 创建操作成功的返回对象 + OperationResult result = new OperationResult(true); + + // 映射表值为 null 表示碰撞器不属于任何节点 + result.CollidersToNodes.Add(collider, null); + + return result; + } + else + { + // 返回移除失败,移除失败不改变映射表,直接返回失败即可 + return new OperationResult(false); + } } - private bool RemoveColliderByPosition(QuadtreeCollider collider) + /// + /// 从当前节点中移除指定碰撞器,并根据需要合并 + /// + /// + /// + internal OperationResult RemoveColliderFromSelfWithMerge(QuadtreeCollider collider) { - if (HaveChildren()) - return RemoveColliderFromChildrenByPosition(collider); + // 移除碰撞器 + OperationResult result = RemoveColliderFromSelfWithOutMerge(collider); + + // 移除失败,不需要合并,直接返回结果 + if(!result.Success) + { + return result; + } + + // 向上合并 + OperationResult mergeResult = UpwordMerge(); - return RemoveColliderFromSelfByPosition(collider); + // 如果合并成功,将合并导致的映射表更新加入到结果中 + if (mergeResult.Success) + { + result.CollidersToNodes.OverlayMerge(mergeResult.CollidersToNodes); + } + + return result; } - private bool RemoveColliderFromChildrenByPosition(QuadtreeCollider collider) + /// + /// 如果当前节点达到了合并条件,返回 true + /// + /// + private bool NeedMerge() { - foreach (QuadtreeNode child in _children) - if (child.RemoveColliderByPosition(collider)) - return true; + // 有子节点,且节点中的碰撞器总数小于最小碰撞器总数,就是达到了合并条件 + return + HaveChildren() + && GetColliderNumbers() < QuadtreeConfig.MinCollidersNumber; + } - return false; + /// + /// 获取当前节点及所有子节点的总计碰撞器数量 + /// + /// + private int GetColliderNumbers() + { + if (HaveChildren()) + { + // 有子节点,子节点的碰撞器数量和就是这个节点的碰撞器数量 + int number = 0; + children.ForEach(child => number += child.GetColliderNumbers()); + return number; + } + else + { + // 没有子节点,返回碰撞器列表数量 + return colliders.Count; + } } - private bool RemoveColliderFromSelfByPosition(QuadtreeCollider collider) + /// + /// 从当前节点开始,向上合并节点,直到不能合并为止 + /// + /// + private OperationResult UpwordMerge() { - if (_area.Contains(collider.position)) - return RemoveColliderFromSelf(collider); + // 先准备一个合并失败的结果 + OperationResult result = new OperationResult(false); + + // 从当前节点开始 + QuadtreeNode currentNode = this; + + // 逻辑比较繁琐,使用死循环加跳出 + while (true) + { + // 当前节点是 null,这种情况是合并完了根节点后的循环,直接结束循环 + if (currentNode == null) + { + break; + } + + // 当前节点是末梢,末梢本身不能合并,向上一级 + if (!currentNode.HaveChildren()) + { + // 向上一级 + currentNode = currentNode.parent; + + // 再次循环 + continue; + } + + // 当前节点不能合并,结束合并 + if (!currentNode.NeedMerge()) + { + break; + } - return false; + // 合并并记录结果 + result = currentNode.Merge(); + + // 向上移一级 + currentNode = currentNode.parent; + } + + return result; } - private bool RemoveColliderFromSelf(QuadtreeCollider collider) + /// + /// 合并当前节点 + /// + /// + private OperationResult Merge() { - return _colliders.Remove(collider); + // 合并节点必然成功 + OperationResult result = new OperationResult(true); + + // 将当前节点和所有子节点的碰撞器移除并记录 + OperationResult removeResult = RemoveAllColliders(); + + // 把子节点列表抛弃掉 + children = null; + + // 把移除的子节点重新添加到当前节点中,这里使用直接添加,因为合并操作并不会导致节点达到分割标准 + OperationResult addCollidersResult = AddCollidersIntoSelf(removeResult.CollidersToNodes.Select(pair => pair.Key).ToList()); + + // 更新映射表修改记录 + result.CollidersToNodes.OverlayMerge(addCollidersResult.CollidersToNodes); + + // 返回记录 + return result; } - private bool RemoveColliderFromAllNodes(QuadtreeCollider collider) + /// + /// 将当前节点和所有子节点的碰撞器移除 + /// + /// + private OperationResult RemoveAllColliders() { - if (HaveChildren()) - return RemoveColliderFromChildrenAndAllNodes(collider); + // 清空碰撞器必然成功 + OperationResult result = new OperationResult(true); + + if (!HaveChildren()) + { + // 没有子节点,移除碰撞器并返回 + + // 将所有碰撞器记录到操作结果里,映射的节点是 null,表示从树里移除 + result.CollidersToNodes = colliders.Select(collider => new KeyValuePair(collider, null)).ToDictionary(pair => pair.Key, pair => pair.Value); + + // 清空碰撞器列表 + colliders.Clear(); + + return result; + } + else + { + // 有子节点,通知子节点清空碰撞器并合并记录 + + children.ForEach(child => + { + result.CollidersToNodes.OverlayMerge(child.RemoveAllColliders().CollidersToNodes); + }); - return RemoveColliderFromSelf(collider); + return result; + } } - private bool RemoveColliderFromChildrenAndAllNodes(QuadtreeCollider collider) + /// + /// 向当前节点批量添加碰撞器 + /// + /// + /// + private OperationResult AddCollidersIntoSelf(List newColliders) { - foreach (QuadtreeNode child in _children) - if (child.RemoveColliderFromAllNodes(collider)) - return true; + // 批量添加必然成功 + OperationResult result = new OperationResult(true); + + // 将碰撞器添加到碰撞器列表里 + colliders.AddRange(newColliders); + + // 去重 + colliders = new List(colliders.Distinct()); + + // 记录映射变化 + result.CollidersToNodes = newColliders + .Where(collider => collider != null) + .Select(collider => new KeyValuePair(collider, this)) + .ToDictionary(pair => pair.Key, pair => pair.Value); - return false; + return result; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Result.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Result.cs new file mode 100644 index 0000000..60fa176 --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Result.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MtC.Tools.QuadtreeCollider +{ + internal partial class QuadtreeNode + { + /// + /// 操作的返回对象 + /// + internal class OperationResult + { + /// + /// 操作成功 + /// + public bool Success { private set; get; } + /// + /// 操作后影响到的碰撞器到节点的映射表 + /// + public Dictionary CollidersToNodes { get; set; } = new Dictionary(); + + public OperationResult(bool success) + { + Success = success; + } + } + } +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs index 3a52638..3c5a286 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs @@ -7,89 +7,190 @@ namespace MtC.Tools.QuadtreeCollider internal partial class QuadtreeNode { /// - /// 更新四叉树中的所有节点 + /// 更新碰撞器位置 /// - internal void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - } - - private void UpdatePosition() + /// + internal OperationResult UpdatePosition() { if (HaveChildren()) - UpdateChildrenPosition(); + { + // 有子节点,通知子节点更新碰撞器位置 + return UpdateChildrenPosition(); + } else - UpdateSelfPosition(); + { + // 没有子节点,更新当前节点内的碰撞器位置 + return UpdateSelfPosition(); + } } - private void UpdateChildrenPosition() + /// + /// 更新子节点的碰撞器位置 + /// + private OperationResult UpdateChildrenPosition() { - foreach (QuadtreeNode child in _children) - child.UpdatePosition(); - } + // 更新碰撞器位置必定成功 + OperationResult result = new OperationResult(true); - private void UpdateSelfPosition() - { - List outOfAreaColliders = GetAndRemoveCollidersOutOfField(); - ResetCollidersIntoQuadtree(outOfAreaColliders); + // 通知所有子节点更新碰撞器位置 + foreach (QuadtreeNode child in children) + { + // 通知子节点更新碰撞器位置 + OperationResult childResult = child.UpdatePosition(); + + // 将子节更新导致的映射表更新合并到总结果里 + result.CollidersToNodes.OverlayMerge(childResult.CollidersToNodes); + } + + // 如果达到了合并标准则进行合并 + if (NeedMerge()) + { + // 合并所有子节点 + OperationResult mergeResult = Merge(); + + // 记录映射表变化 + result.CollidersToNodes.OverlayMerge(mergeResult.CollidersToNodes); + } + + // 这里需要在所有子节点更新完毕后进行是否需要合并的判断,在遍历子节点的过程中决不能合并节点,否则可能遍历到一半就到了合并标准,之后的遍历就会发生逻辑错误 + + return result; } - private List GetAndRemoveCollidersOutOfField() + /// + /// 更新当前节点内的碰撞器的位置 + /// + private OperationResult UpdateSelfPosition() { - List outOfFieldColliders = new List(); + // 更新碰撞器位置必定成功 + OperationResult result = new OperationResult(true); - foreach (QuadtreeCollider collider in _colliders) - if (!_area.Contains(collider.position)) - outOfFieldColliders.Add(collider); + // 移除所有当前节点保存的、已经离开当前节点范围的碰撞器,并将这些碰撞器保存起来 + OperationResult removeResult = GetAndRemoveCollidersOutOfArea(); - foreach (QuadtreeCollider collider in outOfFieldColliders) - RemoveSelfColliderOnReset(collider); + // 合并移除导致的映射表变更 + result.CollidersToNodes.OverlayMerge(removeResult.CollidersToNodes); + + // 把移除的碰撞器重新存入四叉树 + OperationResult resetResult = ResetCollidersIntoQuadtree(new List(removeResult.CollidersToNodes.Keys)); + + // 合并重新存入导致的映射表变更 + result.CollidersToNodes.OverlayMerge(resetResult.CollidersToNodes); - return outOfFieldColliders; + return result; } - private void RemoveSelfColliderOnReset(QuadtreeCollider collider) + /// + /// 移除所有当前节点保存的、已经离开当前节点范围的碰撞器,并返回 + /// + /// + private OperationResult GetAndRemoveCollidersOutOfArea() { - _colliders.Remove(collider); - - // TODO:可以通过添加字典使封装类具有直接从树梢移除碰撞器的能力,这个方法就可以提取到包装类去了 - // TODO:移除不是完全从包装类进行,出现bug优先排查此处 + OperationResult result = new OperationResult(true); + + // 遍历所有碰撞器,超出节点范围的记录下来 + foreach (QuadtreeCollider collider in colliders) + { + if (!area.Contains(collider.Position)) + { + result.CollidersToNodes.Add(collider, null); + } + } + + // 将所有超出节点范围的碰撞器移除出四叉树 + foreach (QuadtreeCollider collider in new List(result.CollidersToNodes.Keys)) + { + // 移除碰撞器 + OperationResult removeResult = Quadtree.RemoveColliderWithOutMerge(collider); + + // 记录映射表的变化 + result.CollidersToNodes.OverlayMerge(removeResult.CollidersToNodes); + } + + // 返回结果 + return result; } - private void ResetCollidersIntoQuadtree(List outOfFieldColliders) + /// + /// 将碰撞器重新存入四叉树 + /// + /// + private OperationResult ResetCollidersIntoQuadtree(List outOfFieldColliders) { + // 重新存入必定成功 + OperationResult result = new OperationResult(true); + + // 通过包装类将碰撞器从根节点存入 foreach (QuadtreeCollider collider in outOfFieldColliders) - Quadtree.AddColliderOnReset(collider); // 直接通过包装类从根节点存入 + { + // 通过包装类重新存入碰撞器 + OperationResult addResult = Quadtree.AddCollider(collider); + + // 将映射表变更合并进结果中 + result.CollidersToNodes.OverlayMerge(addResult.CollidersToNodes); + } + + // 这里并不需要担心重新存入导致分割问题,首先重新存入的是越界的,不会存入当前节点,当前节点不会分割。 + // 如果存到已更新的节点,已更新的节点分割不影响操作。如果存到未更新的节点,为更新的节点分割只会在遍历到的时候把更新下发到分割出的子节点中,不会导致逻辑问题。 + + return result; } - private float UpdateMaxRadius() + /// + /// 更新最大半径 + /// + /// + internal float UpdateMaxRadius() { if (HaveChildren()) - return _maxRadius = UpdateChildrenMaxRadius(); + { + // 有子节点,通知子节点更新最大半径,并在子节点更新后设置当前节点的最大半径 + return maxRadius = UpdateChildrenMaxRadius(); + } else - return _maxRadius = UpdateSelfMaxRadius(); + { + // 没有子节点,更新当前节点的最大半径 + return maxRadius = UpdateSelfMaxRadius(); + } } + /// + /// 更新子节点的最大半径 + /// + /// private float UpdateChildrenMaxRadius() { - _maxRadius = DEFAULT_MAX_RADIUS; + maxRadius = DEFAULT_MAX_RADIUS; - foreach (QuadtreeNode child in _children) - _maxRadius = Mathf.Max(_maxRadius, child.UpdateMaxRadius()); + // 遍历所有子节点更新最大半径,并保留最大的半径作为当前节点的最大半径 + foreach (QuadtreeNode child in children) + { + maxRadius = Mathf.Max(maxRadius, child.UpdateMaxRadius()); + } - return _maxRadius; + // 返回最大半径 + return maxRadius; } + /// + /// 更新当前节点的最大半径 + /// + /// private float UpdateSelfMaxRadius() { - _maxRadius = DEFAULT_MAX_RADIUS; - - foreach (QuadtreeCollider collider in _colliders) - if (collider.maxRadius > _maxRadius) - _maxRadius = collider.maxRadius; - - return _maxRadius; + maxRadius = DEFAULT_MAX_RADIUS; + + // 遍历所有碰撞器,找出最大半径 + foreach (QuadtreeCollider collider in colliders) + { + if (collider.MaxRadius > maxRadius) + { + maxRadius = collider.MaxRadius; + } + } + + // 返回最大半径 + return maxRadius; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Dictionary Test/DictionaryTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Dictionary Test/DictionaryTest.cs new file mode 100644 index 0000000..9d9cd60 --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Dictionary Test/DictionaryTest.cs @@ -0,0 +1,103 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using NUnit.Framework; +using System.Text; + + +namespace MtC.Tools.QuadtreeCollider.Test +{ + [TestFixture] + public class DictionaryTest + { + [Test] + public void UnionTest() + { + // 主字典 + Dictionary mainDictionary = new Dictionary(); + // 副字典 + Dictionary subDictionary = new Dictionary(); + + mainDictionary.Add(1, "One"); + mainDictionary.Add(2, "Two"); + + subDictionary.Add(3, "Three"); + + // 没有重复内容的 Union + mainDictionary = mainDictionary.Union(subDictionary).ToDictionary(pair => pair.Key, pair => pair.Value); + Debug.Log("没有重复的 Union:" + PrintDictionary(mainDictionary)); + + // 有重复的 Union + mainDictionary = mainDictionary.Union(subDictionary).ToDictionary(pair => pair.Key, pair => pair.Value); + Debug.Log("重复合并了 3 的 Union:" + PrintDictionary(mainDictionary)); + + // 合并修改了的内容 + subDictionary[3] = "NEW THREE"; + mainDictionary = mainDictionary.Union(subDictionary).ToDictionary(pair => pair.Key, pair => pair.Value); + Debug.Log("合并了修改后的 3 的 Union:" + PrintDictionary(mainDictionary)); + + // 合并时如果有相同的 Key 不同值的情况会报错,这个方法不是很好用 + } + + [Test] + public void RepeatAdd() + { + Dictionary dictionary = new Dictionary(); + + // 存入新的值 + dictionary.Add(1, "One"); + Debug.Log("存入新值:" + PrintDictionary(dictionary)); + + // 存入重复值 + dictionary.Add(1, "One"); + Debug.Log("存入重复值:" + PrintDictionary(dictionary)); + + // 存入重复 Key 的不同值 + dictionary.Add(1, "NEW ONE"); + Debug.Log("存入重复 Key 的不同值" + PrintDictionary(dictionary)); + + // 只要存入已有的 Key 就会报错 + } + + [Test] + public void SetByIndex() + { + Dictionary dictionary = new Dictionary(); + + // 存入新的值 + dictionary[1] = "One"; + Debug.Log("存入新值:" + PrintDictionary(dictionary)); + + // 存入重复值 + dictionary[1] = "One"; + Debug.Log("存入重复值:" + PrintDictionary(dictionary)); + + // 存入重复 Key 的不同值 + dictionary[1] = "NEW ONE"; + Debug.Log("存入重复 Key 的不同值" + PrintDictionary(dictionary)); + + // 使用索引方式存值时,如果没有这个索引会添加,有这个索引会覆盖 + } + + private string PrintDictionary(Dictionary dictionary) + { + StringBuilder stringBuilder = new StringBuilder(); + + stringBuilder.Append("{"); + + foreach (KeyValuePair pair in dictionary) + { + stringBuilder.Append("("); + stringBuilder.Append(pair.Key.ToString()); + stringBuilder.Append(", "); + stringBuilder.Append(pair.Value.ToString()); + stringBuilder.Append("), "); + } + + stringBuilder.Append("}"); + + return stringBuilder.ToString(); + } + } +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs index 9125a83..bc8f490 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs @@ -4,64 +4,67 @@ using NUnit.Framework; using System; -/// -/// 事件委托的订阅机制测试 -/// -[TestFixture] -public class SubscribeTest +namespace MtC.Tools.QuadtreeCollider.Test { - private Action _actions; - - [TearDown] - public void TearDown() - { - if (_actions != null) - foreach (Action a in _actions.GetInvocationList()) - _actions -= a; - } - - [Test] - public void RepeatSubscribe() + /// + /// 事件委托的订阅机制测试 + /// + [TestFixture] + public class SubscribeTest { - _actions += Say; - _actions += Say; - _actions += Say; - - Debug.Log(_actions.GetInvocationList().Length == 1 ? "重复订阅不会产生多个订阅" : "重复订阅会产生多个订阅"); - } + private Action actions; - [Test] - public void RepeatCancelSubscribe() - { - bool exception = false; - - try + [TearDown] + public void TearDown() { - _actions -= Say; + if (actions != null) + foreach (Action a in actions.GetInvocationList()) + actions -= a; } - catch + + [Test] + public void RepeatSubscribe() { - exception = true; + actions += Say; + actions += Say; + actions += Say; + + Debug.Log(actions.GetInvocationList().Length == 1 ? "重复订阅不会产生多个订阅" : "重复订阅会产生多个订阅"); } - Debug.Log(exception ? "重复取消订阅会导致异常" : "重复取消订阅会导致异常"); - } + [Test] + public void RepeatCancelSubscribe() + { + bool exception = false; - [Test] - public void Subscribed() - { - bool subscribed = false; - _actions += Say; + try + { + actions -= Say; + } + catch + { + exception = true; + } - foreach (Action action in _actions.GetInvocationList()) - if (action == Say) - subscribed = true; + Debug.Log(exception ? "重复取消订阅会导致异常" : "重复取消订阅会导致异常"); + } - Debug.Log(subscribed ? "使用 == 可以判断出是否已经订阅" : "使用 == 无法判断出是否已经订阅"); - } + [Test] + public void Subscribed() + { + bool subscribed = false; + actions += Say; - private void Say(string str) - { - Debug.Log(str); + foreach (Action action in actions.GetInvocationList()) + if (action == Say) + subscribed = true; + + Debug.Log(subscribed ? "使用 == 可以判断出是否已经订阅" : "使用 == 无法判断出是否已经订阅"); + } + + private void Say(string str) + { + Debug.Log(str); + } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs index 58231c5..28daec7 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs @@ -2,53 +2,73 @@ using System.Collections.Generic; using UnityEngine; using NUnit.Framework; +using System.Linq; -[TestFixture] -public class ListTest +namespace MtC.Tools.QuadtreeCollider.Test { - /// - /// 测试List和LLinkedList的foreach速度 - /// - [Test] - public void ForeachSpeed() + [TestFixture] + public class ListTest { - List list = new List(); - LinkedList linkedList = new LinkedList(); - - for (int i = 0; i < 1000000; i++) + /// + /// 测试List和LLinkedList的foreach速度 + /// + [Test] + public void ForeachSpeed() { - list.Add(i); - linkedList.AddLast(i); - } + List list = new List(); + LinkedList linkedList = new LinkedList(); - System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); + for (int i = 0; i < 1000000; i++) + { + list.Add(i); + linkedList.AddLast(i); + } - stopwatch.Start(); + System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); - foreach (int value in list) - continue; + stopwatch.Start(); - stopwatch.Stop(); + foreach (int value in list) + continue; - Debug.Log("list:" + stopwatch.ElapsedMilliseconds); + stopwatch.Stop(); - stopwatch.Start(); + Debug.Log("list:" + stopwatch.ElapsedMilliseconds); - foreach (int value in linkedList) - continue; + stopwatch.Start(); - stopwatch.Stop(); + foreach (int value in linkedList) + continue; - Debug.Log("linkedlist:" + stopwatch.ElapsedMilliseconds); - } + stopwatch.Stop(); - [Test] - public void RemoveCount() - { - List list = new List { 1, 2, 3 }; + Debug.Log("linkedlist:" + stopwatch.ElapsedMilliseconds); + } + + /// + /// 测试 List 的 Remove 方法会不会导致总数减少 + /// + [Test] + public void RemoveCount() + { + List list = new List { 1, 2, 3 }; - list.Remove(1); + list.Remove(1); - Debug.Log(list.Count == 2 ? "List.Remove 会导致总数减少" : "List.Remove不会导致总数减少"); + Debug.Log(list.Count == 2 ? "List.Remove 会导致总数减少" : "List.Remove不会导致总数减少"); + } + + /// + /// 测试 Distinct 方法会不会导致原列表变化 + /// + [Test] + public void Distinct() + { + List list = new List { "Hello", "World", "Hello" }; + + List distinctList = new List(list.Distinct()); + + Debug.Log(list.Count == 2 ? "list.Distinct 会改变原列表" : "list.Distinct 不会改变原列表"); + } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs index f0dc54c..98b5527 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs @@ -3,42 +3,45 @@ using UnityEngine; using NUnit.Framework; -/// -/// 用于测试C#的重载功能的测试类 -/// -public class OverloadTest +namespace MtC.Tools.QuadtreeCollider.Test { /// - /// 测试当存在父子级 + /// 用于测试C#的重载功能的测试类 /// - [Test] - public void ParentTypeChildObject() + public class OverloadTest { - ParentClass child = new ChildClass(); - ParentClass brother = new BrotherClass(); - - Log(child); - Log(brother); - } - - private void Log(ParentClass parent) - { - Debug.Log("父类Log,对象 = " + parent); - } - - private void Log(ChildClass child) - { - Debug.Log("子类Log,对象 = " + child); + /// + /// 测试当存在父子级 + /// + [Test] + public void ParentTypeChildObject() + { + ParentClass child = new ChildClass(); + ParentClass brother = new BrotherClass(); + + Log(child); + Log(brother); + } + + private void Log(ParentClass parent) + { + Debug.Log("父类Log,对象 = " + parent); + } + + private void Log(ChildClass child) + { + Debug.Log("子类Log,对象 = " + child); + } + + private void Log(BrotherClass brother) + { + Debug.Log("子类兄弟Log,对象 = " + brother); + } + + class ParentClass { } + + class ChildClass : ParentClass { } + + class BrotherClass : ParentClass { } } - - private void Log(BrotherClass brother) - { - Debug.Log("子类兄弟Log,对象 = " + brother); - } - - class ParentClass { } - - class ChildClass : ParentClass { } - - class BrotherClass : ParentClass { } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecCenterTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecCenterTest.cs new file mode 100644 index 0000000..50ffdb9 --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecCenterTest.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using NUnit.Framework; + +namespace MtC.Tools.QuadtreeCollider.Test +{ + [TestFixture] + public class RecCenterTest + { + [Test] + public void CenterTest() + { + Rect rect = new Rect(-1, -1, 2, 2); + + if (rect.center == Vector2.zero) + { + Debug.Log("Rect 的 Center 默认返回视觉上的中心,即 x y 各一半"); + } + else if (rect.center == -Vector2.one) + { + Debug.Log("Rect 的 Center 默认返回一个角,即 x,y 各一半"); + } + else + { + Debug.Log("数值为 " + rect.ToString() + " 的 Rect 的 Center 返回是 " + rect.center); + } + } + } +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs index 00b6cf8..c4c27af 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs @@ -1,33 +1,36 @@ using NUnit.Framework; using UnityEngine; -/// -/// 测试Rect的Contains的效果测试类 -/// -[TestFixture] -public class RectContainsTest +namespace MtC.Tools.QuadtreeCollider.Test { - private const float WIDTH = 10f; - private const float HEIGHT = 25f; - private const float X = 10f; - private const float Y = 2f; - - private Rect _rect; - - [SetUp] - public void SetUp() - { - _rect = new Rect(X, Y, WIDTH, HEIGHT); - } - /// - /// 测试Rect的Contains,最右边的点是否不包含在Rect中 + /// 测试Rect的Contains的效果测试类 /// - [Test] - public void Contains_RightBorder_False() + [TestFixture] + public class RectContainsTest { - Vector2 right = new Vector2(X + WIDTH, (Y + HEIGHT) / 2); + private const float WIDTH = 10f; + private const float HEIGHT = 25f; + private const float X = 10f; + private const float Y = 2f; + + private Rect rect; + + [SetUp] + public void SetUp() + { + rect = new Rect(X, Y, WIDTH, HEIGHT); + } + + /// + /// 测试Rect的Contains,最右边的点是否不包含在Rect中 + /// + [Test] + public void Contains_RightBorder_False() + { + Vector2 right = new Vector2(X + WIDTH, (Y + HEIGHT) / 2); - Assert.IsFalse(_rect.Contains(right)); + Assert.IsFalse(rect.Contains(right)); + } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs index 94172d1..0666ffb 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs @@ -1,38 +1,41 @@ using NUnit.Framework; using UnityEngine; -/// -/// 测试Rect的new和set两个方法的速度 -/// -public class RectNewSetSpeedTest +namespace MtC.Tools.QuadtreeCollider.Test { - [Test] - public void NewSetSpeed() + /// + /// 测试Rect的new和set两个方法的速度 + /// + public class RectNewSetSpeedTest { - const int LOOP_TIME = 10000000; + [Test] + public void NewSetSpeed() + { + const int LOOP_TIME = 10000000; - long newTime; - long setTime; + long newTime; + long setTime; - System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); - Rect rect = new Rect(); + System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); + Rect rect = new Rect(); - stopwatch.Start(); - for (int i = 0; i < LOOP_TIME; i++) - rect = new Rect(i, i, i, i); - stopwatch.Stop(); - newTime = stopwatch.ElapsedMilliseconds; - Debug.Log("循环创建Rect " + LOOP_TIME + " 次,耗时 " + newTime + " 毫秒"); + stopwatch.Start(); + for (int i = 0; i < LOOP_TIME; i++) + rect = new Rect(i, i, i, i); + stopwatch.Stop(); + newTime = stopwatch.ElapsedMilliseconds; + Debug.Log("循环创建Rect " + LOOP_TIME + " 次,耗时 " + newTime + " 毫秒"); - stopwatch.Reset(); + stopwatch.Reset(); - stopwatch.Start(); - for (int i = 0; i < LOOP_TIME; i++) - rect.Set(i, i, i, i); - stopwatch.Stop(); - setTime = stopwatch.ElapsedMilliseconds; - Debug.Log("向Rect存值 " + LOOP_TIME + " 次,耗时 " + setTime + " 毫秒"); + stopwatch.Start(); + for (int i = 0; i < LOOP_TIME; i++) + rect.Set(i, i, i, i); + stopwatch.Stop(); + setTime = stopwatch.ElapsedMilliseconds; + Debug.Log("向Rect存值 " + LOOP_TIME + " 次,耗时 " + setTime + " 毫秒"); - Debug.Log(newTime > setTime ? "向已有Rect存值比创建新Rect快" : "创建新Rect比向已有Rect存值要快"); + Debug.Log(newTime > setTime ? "向已有Rect存值比创建新Rect快" : "创建新Rect比向已有Rect存值要快"); + } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/Quadtree Collider Tests/QuadTreeTest.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/Quadtree Collider Tests/QuadTreeTest.cs deleted file mode 100644 index 11e74c2..0000000 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/Quadtree Collider Tests/QuadTreeTest.cs +++ /dev/null @@ -1,80 +0,0 @@ -//using System.Collections; -//using System.Collections.Generic; -//using UnityEngine; -//using NUnit.Framework; -//using System.Reflection; -//using System; -//using MtC.Tools.QuadtreeCollider; - -// 此测试依赖于旧版本四叉树,测试结果正确,测试的代码不会更新 - -//[TestFixture] -//public class QuadTreeTest -//{ -// /// -// /// 测试四叉树创建子节点方法创建的子节点的中央分隔线是否紧贴,如果上下左右子节点的范围的边缘没有重合,则代表四叉树有空隙,落入空隙的碰撞器将无法存入树 -// /// -// [Test] -// [TestCase(1f, 2f, 4f, 3f)] -// [TestCase(2.0649f, 4.97412f, 264.94125f, 23.64985f)] -// [TestCase(0.0001f, 0.0001f, 0.001f, 0.0001f)] -// public void CreateChildren_Half(float x, float y, float width, float height) -// { -// QuadtreeNode quadtree = new QuadtreeNode(new Rect(x, y, width, height)); - -// InvokeCreateChildren(quadtree); - -// List children = GetChildren(quadtree); - -// Assert.AreEqual(GetArea(children[3]).xMax, GetArea(children[0]).xMin); -// Assert.AreEqual(GetArea(children[1]).yMax, GetArea(children[0]).yMin); -// } - -// private void InvokeCreateChildren(QuadtreeNode quadtree) -// { -// string createChildrenMathodName = "CreateChildren"; - -// MethodInfo method = quadtree.GetType().GetMethod(createChildrenMathodName, BindingFlags.Instance | BindingFlags.NonPublic); - -// method.Invoke(quadtree, new object[0]); -// } - -// private List GetChildren(QuadtreeNode quadtree) -// { -// string childrenName = "_children"; - -// FieldInfo childrenField = quadtree.GetType().GetField(childrenName, BindingFlags.NonPublic | BindingFlags.Instance); - -// return (List)childrenField.GetValue(quadtree); -// } - -// private Rect GetArea(QuadtreeNode quadtree) -// { -// string fieldName = "_area"; - -// FieldInfo childrenField = quadtree.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); - -// return (Rect)childrenField.GetValue(quadtree); -// } - -// /// -// /// 测试四叉树创建子节点方法创建的子节点的边缘部分是否和父节点一致,如果不同,则四叉树有可能出现空隙,导致在空隙中的碰撞器无法存入四叉树 -// /// -// [Test] -// [TestCase(1f, 2f, 4f, 3f)] -// [TestCase(2.0649f, 4.97412f, 264.94125f, 23.64985f)] -// [TestCase(0.0001f, 0.0001f, 0.001f, 0.0001f)] -// public void CreateChildren_Edge(float x, float y, float width, float height) -// { -// QuadtreeNode quadtree = new QuadtreeNode(new Rect(x, y, width, height)); - -// InvokeCreateChildren(quadtree); - -// List children = GetChildren(quadtree); - -// Assert.AreEqual(x + width, GetArea(children[0]).xMax); -// Assert.AreEqual(y + height, GetArea(children[0]).yMax); -// Assert.AreEqual(x, GetArea(children[2]).xMin); -// Assert.AreEqual(y, GetArea(children[2]).yMin); -// } -//} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity index 20895cf..7773a35 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity @@ -43,7 +43,7 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 12 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -94,10 +94,12 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 + m_LightingSettings: {fileID: 4890085278179872738, guid: 810f6e5ac8c55e942bcba15ec6b025c7, + type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -117,6 +119,8 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -148,7 +152,7 @@ MonoBehaviour: m_GameObject: {fileID: 11868090} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreReversedGraphics: 1 @@ -165,7 +169,7 @@ MonoBehaviour: m_GameObject: {fileID: 11868090} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: m_UiScaleMode: 1 @@ -265,17 +269,17 @@ MonoBehaviour: m_GameObject: {fileID: 44991393} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 40 @@ -327,7 +331,7 @@ MonoBehaviour: m_GameObject: {fileID: 355988631} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 00a6b92f57745754e953dd074de27dad, type: 3} + m_Script: {fileID: 11500000, guid: eabba575ab51f974580e2a9bc8deb032, type: 3} m_Name: m_EditorClassIdentifier: --- !u!58 &355988633 @@ -381,6 +385,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -392,6 +398,7 @@ SpriteRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -561,6 +568,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -572,6 +581,7 @@ SpriteRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting new file mode 100644 index 0000000..f4c4a9c --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Enter Execute TimeSettings + serializedVersion: 2 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 0 + 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: 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: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRRussianRouletteStartBounce: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + 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 diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/EnterLoger.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/EnterLoger.cs new file mode 100644 index 0000000..29a1843 --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/EnterLoger.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace MtC.Tools.QuadtreeCollider.Test +{ + public class EnterLoger : MonoBehaviour + { + private float lastTime; + + private void OnTriggerEnter2D(Collider2D collision) + { + Debug.Log("TriggerEnter,与上一次时间间隔:" + (Time.time - lastTime)); + lastTime = Time.time; + } + } +} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Loger.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Loger.cs deleted file mode 100644 index cf12c6d..0000000 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Loger.cs +++ /dev/null @@ -1,15 +0,0 @@ -using UnityEngine; - -namespace MtC.Tools.QuadtreeCollider.Test.API.OnTriggerEnterExecuteTime -{ - public class Loger : MonoBehaviour - { - private float _lastTime; - - private void OnTriggerEnter2D(Collider2D collision) - { - Debug.Log("TriggerEnter,与上一次时间间隔:" + (Time.time - _lastTime)); - _lastTime = Time.time; - } - } -} diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs index 7c7a0f8..ce1c0c1 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs @@ -1,19 +1,19 @@ using UnityEngine; -namespace MtC.Tools.QuadtreeCollider.Test.API.OnTriggerEnterExecuteTime +namespace MtC.Tools.QuadtreeCollider.Test { public class TriggetMove : MonoBehaviour { - public Vector3 _triggerPosition; - public Vector3 _outOfTriggerPosition; - public int _moveTime; + public Vector3 triggerPosition; + public Vector3 outOfTriggerPosition; + public int moveTime; private void Update() { - for(int i = 0; i < _moveTime; i++) + for(int i = 0; i < moveTime; i++) { - transform.position = _triggerPosition; - transform.position = _outOfTriggerPosition; + transform.position = triggerPosition; + transform.position = outOfTriggerPosition; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs index 1484ab2..5797322 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs @@ -1,15 +1,15 @@ using UnityEngine; -namespace MtC.Tools.QuadtreeCollider.Test.API.TriggerExecuteTime +namespace MtC.Tools.QuadtreeCollider.Test { public class Loger : MonoBehaviour { - private float _lastTriggerTime; + private float lastTriggerTime; private void OnTriggerStay2D(Collider2D collision) { - Debug.Log("发生触发,与上一次触发的间隔为:" + (Time.time - _lastTriggerTime)); - _lastTriggerTime = Time.time; + Debug.Log("发生触发,与上一次触发的间隔为:" + (Time.time - lastTriggerTime)); + lastTriggerTime = Time.time; } } } diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity index 24ca107..bac4ef5 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity @@ -43,7 +43,7 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 12 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -94,10 +94,12 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 + m_LightingSettings: {fileID: 4890085278179872738, guid: a3974b67abc381942ba5493a74ef3138, + type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -117,6 +119,8 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -192,6 +196,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -203,6 +209,7 @@ SpriteRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -249,7 +256,7 @@ MonoBehaviour: m_GameObject: {fileID: 639801381} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e8423cc5485849546a6e34d75f558fd7, type: 3} + m_Script: {fileID: 11500000, guid: 0fc55de9a385a2845a79b2c0aac19c39, type: 3} m_Name: m_EditorClassIdentifier: --- !u!114 &639801387 @@ -261,7 +268,7 @@ MonoBehaviour: m_GameObject: {fileID: 639801381} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 65d45d91a09afa54db54d40e2d1a1d7d, type: 3} + m_Script: {fileID: 11500000, guid: 6f14b6fcf126fa74887f2214304b0f0e, type: 3} m_Name: m_EditorClassIdentifier: --- !u!1 &872608341 @@ -291,7 +298,7 @@ MonoBehaviour: m_GameObject: {fileID: 872608341} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal @@ -310,7 +317,7 @@ MonoBehaviour: m_GameObject: {fileID: 872608341} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} m_Name: m_EditorClassIdentifier: m_FirstSelected: {fileID: 0} @@ -358,7 +365,7 @@ MonoBehaviour: m_GameObject: {fileID: 1054764611} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreReversedGraphics: 1 @@ -375,7 +382,7 @@ MonoBehaviour: m_GameObject: {fileID: 1054764611} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: m_UiScaleMode: 1 @@ -560,6 +567,8 @@ SpriteRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -571,6 +580,7 @@ SpriteRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -654,17 +664,17 @@ MonoBehaviour: m_GameObject: {fileID: 2090503379} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} m_FontSize: 40 diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test SceneSettings.lighting b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test SceneSettings.lighting new file mode 100644 index 0000000..99bc1c6 --- /dev/null +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test SceneSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Test SceneSettings + serializedVersion: 2 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 0 + 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: 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: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRRussianRouletteStartBounce: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + 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 diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs index c7ea573..028a2d9 100644 --- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs +++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace MtC.Tools.QuadtreeCollider.Test.API.TriggerExecuteTime +namespace MtC.Tools.QuadtreeCollider.Test { /// /// 通过等待时间的循环达到降低Update频率的效果的脚本 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/Example Scene.unity deleted file mode 100644 index 11d05aa..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/Example Scene.unity +++ /dev/null @@ -1,3925 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &6625853 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6625855} - - component: {fileID: 6625854} - m_Layer: 0 - m_Name: Collider (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &6625854 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6625853} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &6625855 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6625853} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &29366547 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 29366548} - - component: {fileID: 29366549} - m_Layer: 0 - m_Name: Collider (65) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &29366548 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 29366547} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 915, y: 1600, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 53 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &29366549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 29366547} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &62486224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 62486225} - - component: {fileID: 62486226} - m_Layer: 0 - m_Name: Collider (73) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &62486225 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62486224} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 900.5, y: 1614.3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 63 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &62486226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 62486224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &79933485 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 79933487} - - component: {fileID: 79933486} - m_Layer: 0 - m_Name: Collider (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &79933486 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 79933485} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &79933487 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 79933485} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 180, y: 560, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &106968428 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 106968429} - - component: {fileID: 106968430} - m_Layer: 0 - m_Name: Collider (45) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &106968429 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 106968428} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 756, y: 1580, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 36 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &106968430 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 106968428} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &194083925 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 194083926} - - component: {fileID: 194083927} - m_Layer: 0 - m_Name: Collider (80) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &194083926 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 194083925} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 310.8, y: 1685.8, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 70 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &194083927 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 194083925} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &208251600 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 208251601} - - component: {fileID: 208251602} - m_Layer: 0 - m_Name: Collider (48) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &208251601 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208251600} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 886.4, y: 1592.1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 55 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &208251602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208251600} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &208646123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 208646124} - - component: {fileID: 208646125} - m_Layer: 0 - m_Name: Collider (77) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &208646124 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208646123} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 897.7, y: 1619.2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 67 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &208646125 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 208646123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &215959903 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 215959904} - - component: {fileID: 215959905} - m_Layer: 0 - m_Name: Collider (75) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &215959904 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 215959903} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 895.7, y: 1614.1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 65 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &215959905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 215959903} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &277161006 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 277161008} - - component: {fileID: 277161007} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &277161007 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277161006} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &277161008 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277161006} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 575, y: 1617, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &282854659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 282854661} - - component: {fileID: 282854660} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &282854660 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 282854659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &282854661 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 282854659} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 702, y: 272, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &318323221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 318323222} - - component: {fileID: 318323223} - m_Layer: 0 - m_Name: Collider (76) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &318323222 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 318323221} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 895.4, y: 1617.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 66 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &318323223 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 318323221} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &367910742 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 367910743} - - component: {fileID: 367910744} - m_Layer: 0 - m_Name: Collider (82) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &367910743 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 367910742} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 307.39996, y: 1683.3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 72 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &367910744 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 367910742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &373068638 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 373068640} - - component: {fileID: 373068639} - m_Layer: 0 - m_Name: Collider (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &373068639 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 373068638} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &373068640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 373068638} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1044, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &440853067 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 440853068} - - component: {fileID: 440853069} - m_Layer: 0 - m_Name: Collider (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &440853068 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 440853067} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 298, y: 1659, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 31 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &440853069 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 440853067} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &460205790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 460205791} - - component: {fileID: 460205792} - m_Layer: 0 - m_Name: Collider (51) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &460205791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 460205790} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 861, y: 1693, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 40 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &460205792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 460205790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &496513800 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 496513801} - - component: {fileID: 496513803} - - component: {fileID: 496513802} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &496513801 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496513800} - 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: 1513167038} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &496513802 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496513800} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\uFF0C\u6CE8\u610F\u8FD9\u4E00\u6B65\u7684\u78B0\u649E\u5668\u6CA1\u6709\u4F53\u79EF\uFF0C\u56E0\u6B64\u53EA\u6709\u78B0\u649E\u5230\u5706\u5FC3\u624D\u89C6\u4E3A\u78B0\u649E\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &496513803 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 496513800} - m_CullTransparentMesh: 0 ---- !u!1 &537640761 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 537640762} - - component: {fileID: 537640763} - m_Layer: 0 - m_Name: Collider (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &537640762 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 537640761} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 811, y: 1666, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 35 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &537640763 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 537640761} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &538859732 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 538859734} - - component: {fileID: 538859733} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &538859733 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 538859732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &538859734 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 538859732} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 167, y: 1613, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &545734439 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 545734440} - - component: {fileID: 545734441} - m_Layer: 0 - m_Name: Collider (49) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &545734440 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 545734439} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 819.8, y: 1593.3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 56 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &545734441 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 545734439} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &550617714 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 550617716} - - component: {fileID: 550617715} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &550617715 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 550617714} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &550617716 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 550617714} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 941, y: 1727, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &676975317 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 676975318} - - component: {fileID: 676975319} - m_Layer: 0 - m_Name: Collider (64) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &676975318 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 676975317} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 936, y: 1626, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 52 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &676975319 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 676975317} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &677515189 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 677515191} - - component: {fileID: 677515190} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &677515190 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 677515189} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &677515191 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 677515189} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 204, y: 889, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &685529773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 685529774} - - component: {fileID: 685529775} - m_Layer: 0 - m_Name: Collider (53) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &685529774 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 685529773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 847, y: 1503, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 41 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &685529775 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 685529773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &693527826 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 693527827} - - component: {fileID: 693527828} - m_Layer: 0 - m_Name: Collider (46) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &693527827 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693527826} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 652, y: 1518, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 37 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &693527828 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 693527826} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &704225948 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 704225950} - - component: {fileID: 704225949} - m_Layer: 0 - m_Name: Collider (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &704225949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 704225948} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &704225950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 704225948} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 172, y: 1117, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &707860055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 707860057} - - component: {fileID: 707860056} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &707860056 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 707860055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &707860057 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 707860055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 935, y: 554, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &748148865 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 748148867} - - component: {fileID: 748148866} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &748148866 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748148865} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &748148867 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 748148865} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 998, y: 1054, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &758784560 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 758784561} - - component: {fileID: 758784562} - m_Layer: 0 - m_Name: Collider (50) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &758784561 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 758784560} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 809, y: 1835, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 39 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &758784562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 758784560} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &767782001 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 767782003} - - component: {fileID: 767782002} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &767782002 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 767782001} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &767782003 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 767782001} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 300, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &774431447 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 774431448} - - component: {fileID: 774431449} - m_Layer: 0 - m_Name: Collider (71) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &774431448 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 774431447} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 897.1, y: 1615.2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 61 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &774431449 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 774431447} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &808775576 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 808775578} - - component: {fileID: 808775577} - m_Layer: 0 - m_Name: Collider (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &808775577 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 808775576} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &808775578 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 808775576} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1421, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &810616696 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 810616697} - - component: {fileID: 810616698} - m_Layer: 0 - m_Name: Collider (84) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &810616697 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810616696} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 305.7, y: 1687.3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 74 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &810616698 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810616696} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &831338212 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 831338213} - - component: {fileID: 831338214} - m_Layer: 0 - m_Name: Collider (68) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &831338213 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 831338212} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 874.4, y: 1622.1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 58 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &831338214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 831338212} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &832775882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 832775883} - - component: {fileID: 832775884} - m_Layer: 0 - m_Name: Collider (79) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &832775883 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 832775882} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 307.39996, y: 1685, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 69 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &832775884 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 832775882} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &859350009 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 859350010} - - component: {fileID: 859350011} - m_Layer: 0 - m_Name: Collider (57) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &859350010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 859350009} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 217, y: 1906, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 45 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &859350011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 859350009} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &860084098 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 860084099} - - component: {fileID: 860084100} - m_Layer: 0 - m_Name: Collider (81) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &860084099 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860084098} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 310.8, y: 1684.1001, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 71 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &860084100 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 860084098} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &864300053 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 864300055} - - component: {fileID: 864300054} - m_Layer: 0 - m_Name: Collider (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &864300054 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864300053} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &864300055 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864300053} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 889, y: 1253, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &910450180 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 910450181} - - component: {fileID: 910450182} - m_Layer: 0 - m_Name: Collider (56) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &910450181 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 910450180} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 189, y: 1764, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 44 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &910450182 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 910450180} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &923906862 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 923906863} - - component: {fileID: 923906864} - m_Layer: 0 - m_Name: Collider (83) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &923906863 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 923906862} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 306, y: 1683.9, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 73 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &923906864 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 923906862} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &940509575 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 940509577} - - component: {fileID: 940509576} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &940509576 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940509575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &940509577 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940509575} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 146, y: 1365, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &949412362 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 949412363} - - component: {fileID: 949412364} - m_Layer: 0 - m_Name: Collider (60) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &949412363 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949412362} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 917, y: 1510, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 48 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &949412364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949412362} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &990893420 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 990893422} - - component: {fileID: 990893421} - m_Layer: 0 - m_Name: Collider (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &990893421 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990893420} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &990893422 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990893420} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 446, y: 572, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1120947955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1120947957} - - component: {fileID: 1120947956} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1120947956 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120947955} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1120947957 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120947955} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1121989369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1121989371} - - component: {fileID: 1121989370} - m_Layer: 0 - m_Name: Collider (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1121989370 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121989369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1121989371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121989369} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 801, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1132382033 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1132382035} - - component: {fileID: 1132382034} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1132382034 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1132382033} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1132382035 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1132382033} - 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: 1749669975} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1174197943 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1174197944} - - component: {fileID: 1174197945} - m_Layer: 0 - m_Name: Collider (66) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1174197944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174197943} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 934, y: 1590, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 54 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1174197945 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174197943} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1204616541 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1204616543} - - component: {fileID: 1204616542} - m_Layer: 0 - m_Name: Collider (37) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1204616542 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1204616541} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1204616543 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1204616541} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 697, y: 1780, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1246714055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1246714056} - - component: {fileID: 1246714057} - m_Layer: 0 - m_Name: Collider (78) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1246714056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1246714055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 305.09998, y: 1687, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 68 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1246714057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1246714055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1265367532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1265367535} - - component: {fileID: 1265367534} - - component: {fileID: 1265367533} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1265367533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1265367532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1265367534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1265367532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1265367535 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1265367532} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1275825528 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1275825529} - - component: {fileID: 1275825530} - m_Layer: 0 - m_Name: Collider (58) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1275825529 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275825528} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 469, y: 1858, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 46 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1275825530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275825528} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1316825364 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1316825365} - - component: {fileID: 1316825366} - m_Layer: 0 - m_Name: Collider (55) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1316825365 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1316825364} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 68, y: 1895, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 43 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1316825366 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1316825364} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1405537660 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1405537662} - - component: {fileID: 1405537661} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1405537661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1405537660} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1405537662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1405537660} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 500, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1425571343 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1425571345} - - component: {fileID: 1425571344} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1425571344 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1425571343} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dfeb54cc9a2b12047a324879c5216e32, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!4 &1425571345 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1425571343} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1434576432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1434576433} - - component: {fileID: 1434576434} - m_Layer: 0 - m_Name: Collider (47) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1434576433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1434576432} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 872, y: 1101, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 38 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1434576434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1434576432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1489755424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1489755425} - - component: {fileID: 1489755426} - m_Layer: 0 - m_Name: Collider (72) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1489755425 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1489755424} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 900.5, y: 1616, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 62 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1489755426 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1489755424} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1513167034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1513167038} - - component: {fileID: 1513167037} - - component: {fileID: 1513167036} - - component: {fileID: 1513167035} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1513167035 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1513167034} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1513167036 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1513167034} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &1513167037 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1513167034} - 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 &1513167038 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1513167034} - 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: 496513801} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1524439221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1524439223} - - component: {fileID: 1524439222} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1524439222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1524439221} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1524439223 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1524439221} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 809, y: 1418, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1530635115 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1530635117} - - component: {fileID: 1530635116} - m_Layer: 0 - m_Name: Collider (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1530635116 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1530635115} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1530635117 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1530635115} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 423, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1582353662 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1582353663} - - component: {fileID: 1582353664} - m_Layer: 0 - m_Name: Collider (67) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1582353663 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1582353662} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 865.4, y: 1566.1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 57 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1582353664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1582353662} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1586306542 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1586306543} - - component: {fileID: 1586306544} - m_Layer: 0 - m_Name: Collider (54) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1586306543 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1586306542} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 324, y: 301, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 42 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1586306544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1586306542} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1589599346 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1589599347} - - component: {fileID: 1589599348} - m_Layer: 0 - m_Name: Collider (61) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1589599347 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1589599346} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 877, y: 1547, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 49 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1589599348 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1589599346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1605819926 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1605819927} - - component: {fileID: 1605819928} - m_Layer: 0 - m_Name: Collider (62) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1605819927 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605819926} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 927, y: 1570, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 50 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1605819928 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605819926} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1612960082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1612960083} - - component: {fileID: 1612960084} - m_Layer: 0 - m_Name: Collider (70) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1612960083 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1612960082} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 894.8, y: 1617.2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 60 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1612960084 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1612960082} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1619388885 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1619388886} - - component: {fileID: 1619388887} - m_Layer: 0 - m_Name: Collider (42) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1619388886 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1619388885} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 905, y: 1636, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 33 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1619388887 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1619388885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1642103893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1642103895} - - component: {fileID: 1642103894} - m_Layer: 0 - m_Name: Detector - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1642103894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1642103893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 354d700c6b7cc7f4c9b2641394c1a696, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 500 ---- !u!4 &1642103895 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1642103893} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 485, y: 1155, 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 &1653076107 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1653076109} - - component: {fileID: 1653076108} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1653076108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653076107} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1653076109 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1653076107} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 865, y: 1786, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1668344714 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1668344718} - - component: {fileID: 1668344717} - - component: {fileID: 1668344716} - - component: {fileID: 1668344715} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1668344715 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1668344714} - m_Enabled: 1 ---- !u!124 &1668344716 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1668344714} - m_Enabled: 1 ---- !u!20 &1668344717 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1668344714} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.6273585, g: 1, b: 0.87883854, 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: -1 - 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 &1668344718 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1668344714} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1741257724 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1741257725} - - component: {fileID: 1741257726} - m_Layer: 0 - m_Name: Collider (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1741257725 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1741257724} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 948, y: 1596, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 32 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1741257726 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1741257724} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1749669974 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1749669975} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1749669975 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1749669974} - 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: - - {fileID: 1132382035} - - {fileID: 940509577} - - {fileID: 767782003} - - {fileID: 282854661} - - {fileID: 1405537662} - - {fileID: 1809938452} - - {fileID: 1653076109} - - {fileID: 1753578398} - - {fileID: 677515191} - - {fileID: 1120947957} - - {fileID: 2068685282} - - {fileID: 538859734} - - {fileID: 550617716} - - {fileID: 277161008} - - {fileID: 1524439223} - - {fileID: 2021403205} - - {fileID: 748148867} - - {fileID: 707860057} - - {fileID: 808775578} - - {fileID: 1121989371} - - {fileID: 1530635117} - - {fileID: 1809725499} - - {fileID: 373068640} - - {fileID: 79933487} - - {fileID: 1901884983} - - {fileID: 704225950} - - {fileID: 990893422} - - {fileID: 864300055} - - {fileID: 1204616543} - - {fileID: 1770857353} - - {fileID: 6625855} - - {fileID: 440853068} - - {fileID: 1741257725} - - {fileID: 1619388886} - - {fileID: 2061593967} - - {fileID: 537640762} - - {fileID: 106968429} - - {fileID: 693527827} - - {fileID: 1434576433} - - {fileID: 758784561} - - {fileID: 460205791} - - {fileID: 685529774} - - {fileID: 1586306543} - - {fileID: 1316825365} - - {fileID: 910450181} - - {fileID: 859350010} - - {fileID: 1275825529} - - {fileID: 1866657897} - - {fileID: 949412363} - - {fileID: 1589599347} - - {fileID: 1605819927} - - {fileID: 2094855765} - - {fileID: 676975318} - - {fileID: 29366548} - - {fileID: 1174197944} - - {fileID: 208251601} - - {fileID: 545734440} - - {fileID: 1582353663} - - {fileID: 831338213} - - {fileID: 1935401765} - - {fileID: 1612960083} - - {fileID: 774431448} - - {fileID: 1489755425} - - {fileID: 62486225} - - {fileID: 1926795160} - - {fileID: 215959904} - - {fileID: 318323222} - - {fileID: 208646124} - - {fileID: 1246714056} - - {fileID: 832775883} - - {fileID: 194083926} - - {fileID: 860084099} - - {fileID: 367910743} - - {fileID: 923906863} - - {fileID: 810616697} - - {fileID: 2019281532} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1753578396 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1753578398} - - component: {fileID: 1753578397} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1753578397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753578396} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1753578398 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753578396} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 712, y: 1110, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1770857351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1770857353} - - component: {fileID: 1770857352} - m_Layer: 0 - m_Name: Collider (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1770857352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1770857351} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1770857353 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1770857351} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1809725497 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809725499} - - component: {fileID: 1809725498} - m_Layer: 0 - m_Name: Collider (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1809725498 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809725497} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1809725499 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809725497} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1447, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1809938450 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809938452} - - component: {fileID: 1809938451} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1809938451 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809938450} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1809938452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809938450} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 938, y: 1536, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1866657896 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1866657897} - - component: {fileID: 1866657898} - m_Layer: 0 - m_Name: Collider (59) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1866657897 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866657896} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 752, y: 1879, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 47 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1866657898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1866657896} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1901884981 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1901884983} - - component: {fileID: 1901884982} - m_Layer: 0 - m_Name: Collider (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &1901884982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901884981} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1901884983 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901884981} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 372, y: 1580, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1926795159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1926795160} - - component: {fileID: 1926795161} - m_Layer: 0 - m_Name: Collider (74) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1926795160 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1926795159} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 897.1, y: 1613.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 64 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1926795161 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1926795159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1935401764 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1935401765} - - component: {fileID: 1935401766} - m_Layer: 0 - m_Name: Collider (69) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1935401765 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1935401764} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 853.4, y: 1596.1, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 59 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1935401766 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1935401764} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2019281531 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2019281532} - - component: {fileID: 2019281533} - m_Layer: 0 - m_Name: Collider (85) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &2019281532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019281531} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 308, y: 1689, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 75 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2019281533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019281531} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2021403203 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2021403205} - - component: {fileID: 2021403204} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &2021403204 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2021403203} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &2021403205 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2021403203} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 492, y: 1382, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2061593966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2061593967} - - component: {fileID: 2061593968} - m_Layer: 0 - m_Name: Collider (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &2061593967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2061593966} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 725, y: 1721, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 34 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2061593968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2061593966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2068685280 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2068685282} - - component: {fileID: 2068685281} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &2068685281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068685280} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &2068685282 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068685280} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 366, y: 1777, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2094855764 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2094855765} - - component: {fileID: 2094855766} - m_Layer: 0 - m_Name: Collider (63) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &2094855765 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2094855764} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 284, y: 1696, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1749669975} - m_RootOrder: 51 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2094855766 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2094855764} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6dbb6fa54997d848bf136ab3253b31c, type: 3} - m_Name: - m_EditorClassIdentifier: diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeBasic.cs b/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeBasic.cs deleted file mode 100644 index b590e24..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeBasic.cs +++ /dev/null @@ -1,361 +0,0 @@ -/* - * 碰撞检测听起来很高端实际上一点科技含量都没有。 - * 用圆形碰撞器举例:碰撞检测就是计算两个碰撞器的圆心距离和半径和哪个大,半径和大就说明碰撞了。 - * 如果是更复杂的碰撞器则可能需要计算边的碰撞,但原理上都逃不脱一个步骤:把所有碰撞器暴力遍历一遍。 - * - * 但是纯暴力遍历会有一个很大的问题:假设碰撞器太多了遍历计算量太大怎么办? - * 于是一种新的思路出现了:先找出可能发生碰撞的碰撞器,之后再遍历。 - * 四叉树就是基于这种思路产生的。 - * - * 四叉树通过将空间划分为一个个的小区域来逐步找到真正可能发生碰撞的碰撞器。 - * 四叉树的原理核心在于“分割”:当一个节点的空间里有过多的碰撞器时,就把这个节点分成四个子节点,每个子节点拥有父节点1/4的空间,这个空间里的碰撞器也传给子节点,这样需要遍历的碰撞器就会变少。 - * - * - * - * 这个脚本里的是最基础的四叉树,由节点和叶子两部分构成。 - * 节点是四叉树的每个分支,节点组成树本身。 - * 叶子是碰撞器在树立的映射,树通过叶子判断是否发生碰撞。 - * - * 这个四叉树的功能只有插入、检测、移除,碰撞器没有半径是一个个点,并且如果碰撞器移动检测结果不会随之变化 - * - * 只有这个脚本是不能使用的,因此还有两个脚本是 QuadtreeBasicCollider 和 QuadtreeBasicObject - * QuadtreeBasicCollider 是碰撞器,挂载在物体上 - * QuadtreeBasicObject 是四叉树物体,用来在场景加载时建立四叉树,之后才能进行碰撞检测 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step0Basic -{ - /* - * 这个是“泛型”,有泛型的类和方法可以在调用的时候指定类型,Unity的 GetComponent<> 就应用了泛型 - */ - public class QuadtreeLeafBasic - { - /* - * get,set访问器,C#的常用封装方式,看起来是这样的: - * - * 修饰符 类型 访问器名 - * { - * get - * { - * 这里面需要return - * } - * set - * { - * 这里存入的量用 value 表示 - * } - * } - * - * 假设有一个访问器是这样的: - * public int age - * { - * get - * { - * return _age; - * } - * set - * { - * _age = value; - * } - * } - * int _age - * - * 赋值会调用 set 进行赋值,赋值在 set 里就是那个 value - * 取值会调用 get 进行返回 - */ - public T obj - { - get { return _obj; } - } - T _obj; //叶子映射的对象,在检测碰撞的时候会以数组形式返回出去 - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public QuadtreeLeafBasic(T obj, Vector2 position) - { - _obj = obj; - _position = position; - } - } - - - - public class QuadtreeBasic - { - QuadtreeBasicField _field; //这个类在下面 - - QuadtreeBasic _upperRightChild; //四个子节点 - QuadtreeBasic _lowerRightChild; - QuadtreeBasic _lowerLeftChild; - QuadtreeBasic _upperLeftChild; - - List> _leafs = new List>(); //叶子List,用来存储这个节点里的叶子 - - int _maxLeafsNumber; //这个节点里最多能容纳多少叶子,如果超过了这个值则要分割节点 - float _minSideLength; //可以分割到的最小边长,如果节点的宽或高已经小于这个值,那么不管有多少叶子都不能分割 - /* - * 最小边长的设计是应对一种极端情况的:假设有大量的碰撞器他们的位置完全一样,那么无论怎么分割节点都不会把他们分隔开,分割将会无限循环下去 - * 增加最小边长之后就可以应对这种情况:就算是最极端情况也只会一口气分割到最小大小,不会无限分割下去 - */ - - - public QuadtreeBasic(float top, float right, float bottom, float left, int maxLeafsNumber, float minSideLength) - { - _field = new QuadtreeBasicField(top, right, bottom, left); - - _maxLeafsNumber = maxLeafsNumber; - _minSideLength = minSideLength; - - DrawField(); //在 Scene 面板绘制四叉树范围,删掉不影响功能 - } - - /* - * 存入叶子 - * - * 首先来解决一个用词混乱的问题: - * 在二叉树里没有子节点的节点称为“叶子节点”或“叶子”,因为他们处于树的末端,在树的结构看来就是叶子一样。这样命名后就得到了子节点的节点是“树枝”、没有子节点的节点是“叶子”的形象命名。 - * 但在四叉树里这个命名方式行不通————四叉树里的“叶子”指的是联系碰撞器和树之间的映射对象,是和节点完全不同的类。 - * 因此我们将四叉树里有子节点的节点称为“树枝”或“树干”他们只负责构成四叉树,不负责储存叶子;处于四叉树末端的没有子节点的节点称为“树梢”,他们负责存储叶子;“叶子”则是映射对象,这样就形成了“树干”连接“树梢”,“树梢”连接“叶子”的形象命名。 - * 而没有父节点的那个节点和二叉树一样称为“根”或“根节点” - * - * 存入叶子的流程是: - * 先判断这个节点有没有子节点,没有的话说明是树梢,直接存入叶子就行。 - * 如果这个节点有子节点,则说明这是树枝,要向下寻找可以存入这个叶子的子节点。 - * 寻找可以存入子节点的叶子的方法很简单:如果叶子的位置到在子节点的区域里,则说明可以存进去。 - * 如此向下递归知道树梢再存进去就可以了。 - */ - public void SetLeaf(QuadtreeLeafBasic leaf) - { - if (DontHaveChildren()) - SetLeafToSelf(leaf); - else - SetLeafToChildren(leaf); - } - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - void SetLeafToSelf(QuadtreeLeafBasic leaf) - { - _leafs.Add(leaf); - CheckAndDoSplit(); - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树梢节点存入位置在" + leaf.position + "的叶子"); - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void SetLeafToChildren(QuadtreeLeafBasic leaf) - { - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树枝节点向子节点存入位置在" + leaf.position + "的叶子"); - /* - * 如果叶子在子节点的范围里,向这个子节点里存入叶子 - * 用 else if 的原因是 Field.Contains 把边缘处的点也算在范围里,这如果一个叶子在两个节点的交界处只用一个 if 就会重复存入 - */ - if (_upperRightChild._field.Contains(leaf.position)) - _upperRightChild.SetLeaf(leaf); - else if (_lowerRightChild._field.Contains(leaf.position)) - _lowerRightChild.SetLeaf(leaf); - else if (_lowerLeftChild._field.Contains(leaf.position)) - _lowerLeftChild.SetLeaf(leaf); - else if (_upperLeftChild._field.Contains(leaf.position)) - _upperLeftChild.SetLeaf(leaf); - } - - /* - * 分割,四叉树的核心来了 - * - * 分割就是先把这个节点的范围分成四份,分别给四个子节点,之后把这个节点里的所有叶子按位置存进四个子节点里。 - * 分割完成后这个节点就从树梢变成了树枝,而四个子节点成为了新的树梢。 - */ - void Split() - { - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树梢节点达到分割条件,进行分割"); - - //计算出横竖的中心坐标 - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - //用上面计算的中心坐标和原本的区域组合出四个子节点的区域来,并且把最大叶子数、最小宽高一起传给子节点 - _upperRightChild = new QuadtreeBasic(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength); - _lowerRightChild = new QuadtreeBasic(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength); - _lowerLeftChild = new QuadtreeBasic(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength); - _upperLeftChild = new QuadtreeBasic(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength); - - //生成完子节点后把这个节点里的所有叶子分给子节点 - foreach (QuadtreeLeafBasic leaf in _leafs) //假设你不会用 foreach ,请看 QuadtreeBasicDetector - SetLeafToChildren(leaf); - _leafs = null; //将叶子分给子节点后这个节点就不需要继续保留叶子了,把叶子List设为null,让C#的清理器来清理掉节省内存 - } - - /* - * 碰撞检测 - * - * 四叉树的碰撞检测同样分两部分: - * 树梢部分非常无脑:暴力检测全部叶子是否碰撞 - * 树枝部分则十分巧妙,需要一些解说: - * 首先根据四叉树的设计,每个节点都有一个区域,不论是树枝还是树梢。 - * 树梢里存在着数量不固定的叶子,可以分布在树梢范围内的任何一个位置。 - * 树枝本身虽然不保存叶子,但树枝的区域和他的子节点树梢的范围是重合的,也就是说在树枝的范围里同样有数量不固定的叶子,可能分布在任意一个位置。 - * 再看四叉树碰撞检测的流程: 找出可能有叶子发生碰撞的节点 -> 在这个节点的四个子节点里找出可能发生碰撞的节点 -> 在这个节点的四个子节点里找出可能发生碰撞的节点 -> ... -> 找到可能有叶子发生碰撞的树梢节点 -> 暴力检测这个树梢下面的叶子 - * - * 这样可以得出一个结论:如果检测的范围与节点的范围有重合,那么这个节点下面就有可能有叶子会发生碰撞。 - * 又因为检测范围是一个圆,所以通过比较检测点到节点区域的距离和检测半径就能判断出这个节点是否可能发生碰撞。 - */ - public T[] CheckCollision(Vector2 checkPosition, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPosition, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPosition, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPosition, float checkRadius) - { - List objs = new List(); - - foreach (QuadtreeLeafBasic leaf in _leafs) - if (Vector2.Distance(checkPosition, leaf.position) <= checkRadius) //开头说的没有一丁点技术含量的距离检测, Vector2.Distance可以计算出两个点的距离,之后和检测半径一比较就知道有没有检测到了 - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPosition, float checkRadius) - { - List objs = new List(); - - if (_upperRightChild._field.PointToFieldDistance(checkPosition) <= checkRadius) - objs.AddRange(_upperRightChild.CheckCollision(checkPosition, checkRadius)); //这里用的不是 if else 而是连续存入,因为检测的范围是一个圆,基本不可能只在一个节点范围里,因此要把每个子节点都考虑到 - if (_lowerRightChild._field.PointToFieldDistance(checkPosition) <= checkRadius) - objs.AddRange(_lowerRightChild.CheckCollision(checkPosition, checkRadius)); - if (_lowerLeftChild._field.PointToFieldDistance(checkPosition) <= checkRadius) - objs.AddRange(_lowerLeftChild.CheckCollision(checkPosition, checkRadius)); - if (_upperLeftChild._field.PointToFieldDistance(checkPosition) <= checkRadius) - objs.AddRange(_upperLeftChild.CheckCollision(checkPosition, checkRadius)); - - return objs.ToArray(); - } - - /* - * 移除叶子 - * - * 移除叶子很简单,先是跟插入叶子时一样根据坐标找到叶子所在的树梢,之后直接移除就可以了。 - */ - public void RemoveLeaf(QuadtreeLeafBasic leaf) - { - if (DontHaveChildren()) - RemoveLeafFromSelf(leaf); - else - RemoveLeafFromChildren(leaf); - } - - void RemoveLeafFromSelf(QuadtreeLeafBasic leaf) - { - _leafs.Remove(leaf); - - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树梢节点移除位置在" + leaf.position + "的叶子"); - } - - void RemoveLeafFromChildren(QuadtreeLeafBasic leaf) - { - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树枝节点从子节点移除位置在" + leaf.position + "的叶子"); - - if (_upperRightChild._field.Contains(leaf.position)) - _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - _upperLeftChild.RemoveLeaf(leaf); - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, Mathf.Infinity); //Mathf.Infinity:正无穷,显示时间设置为正无穷就会一直显示 - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, Mathf.Infinity); //Color:颜色类,Color.blue:自带的蓝色 - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, Mathf.Infinity); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, Mathf.Infinity); - //Debug.DrawLine(Vector3 start, Vector3 end, Color color, float duration):画线,参数依次是:起点、终点、颜色、显示时间 - //【注意】这个方法的持续时间是基于 Time.deltaTime 实现的,也就是说只有在游戏运行模式下才有效,如果在编辑模式下使用,绘制的线不管经过多长时间都不会消失 - } - } - - public class QuadtreeBasicField - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public QuadtreeBasicField(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); //这一步是这样的:如果点在左边,则左边坐标 - 点是正数,返回距离;如果在右边,则点 - 右边坐标是正数,返回距离;如果在中间,则两个计算都是负数,返回0 - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); //三角函数,别说这个你不会 - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeColliderBasic.cs b/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeColliderBasic.cs deleted file mode 100644 index 54aca20..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeColliderBasic.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 四叉树的碰撞器,挂载在需要参与碰撞检测的物体上 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step0Basic -{ - public class QuadtreeColliderBasic : MonoBehaviour - { - QuadtreeLeafBasic _leaf; - - private void Awake() - { - _leaf = new QuadtreeLeafBasic(gameObject, GetLeafPosition()); - } - Vector2 GetLeafPosition() - { - return new Vector2(transform.position.x, transform.position.y); - /* - * 阅读下面部分时请将碰撞器想成是固定的不能移动的。 - * - * 先来学一个词: - * 映射:数学术语,指两个元素的集之间元素相互“对应”的关系。 - * 开发里也有“映射”这个概念,碰撞器和叶子的一一对应就是映射,可以说“叶子是碰撞器在四叉树里的映射”。 - * - * 新人在遇到“映射”这个概念的时候经常会被绕进去,比如这个四叉树检测的映射就有一个可能搞蒙新人的地方: - * 四叉树是二维的,Unity的三维的,那么四叉树的xy两个轴对应的是Unity的xy轴还是xz轴呢?也就是说这个四叉树是用在“竖起来”的平面上还是“平放着”的平面上呢? - * - * 实际上四叉树到底是哪个平面是可以设置的。 - * - * 首先我们要理解的一点是: - * 四叉树的平面和Unity的世界空间是分离的,四叉树实际上不知道Unity的世界空间里各个碰撞器到底在哪半径多少,他只能根据存入的叶子来做判断。 - * 这也是为什么在Unity里移动碰撞器检测的结果不会随之变化————四叉树里的叶子没有一起变化,叶子里的数据还是碰撞器刚生成的时候存入的数据。 - * - * 理解了这一点后向下就简单了。 - * - * 看上面的代码,这个代码将碰撞器的Unity世界坐标的x,y坐标设为叶子的坐标,也就是说四叉树平面的xy轴和Unity的xy轴对应,四叉树平面是竖起来的。 - * 那么如果是把Unity世界坐标的 x,z 设为叶子坐标呢?当然是四叉树平面的xy轴对应Unity的xz轴,四叉树平面是躺倒的。 - * - * 也就是说四叉树的平面是什么方向实际上取决于存入叶子的时候的设置,四叉树自己根本不知道Unity的世界里发生了什么,他只会在他自己的二维世界里任劳任怨的完成他的任务。 - * 这种 - * - * - * 可能有朋友要问了:如果我有的碰撞器是xy,有的碰撞器是xz,有的则是yz,甚至是斜着存的会怎么样? - * 这个问题接近了映射这个概念的本质了,映射的关键就是“对应”,在这个四叉树里就是把Unity空间里的碰撞器和四叉树里的叶子对应,这样四叉树就可以通过对叶子进行碰撞检测得出碰撞器的碰撞情况。 - * 那么假设有一个叶子和碰撞器没有对应好呢?比如碰撞器已经改变了位置但叶子里记录的位置还是原来的位置。结果当然是检测出错。 - * - * 知道了对应关系和对应出错之后再看前面的问题:同一场景里有多种映射规则会怎么样? - * 答案是:其实也不会怎么样。只要不怕乱尽管用。 - * - * 咸鱼作者以前玩过一个游戏,地图是上下两部分,下面的部分是倒影,有意思的是上下两部分都只显示一部分物体,两边加起来才是真的地图,这种功能就可以上面的物体正着映射,下面的物体反着映射。 - * 开发本来就是随意发挥成分很多的,只要自己控制得住就尽管放手去用。 - * - * 万一玩脱了不要找咸鱼作者撒气→_→ - */ - } - - - /* - * 在 OnEnble 和 OnDisable 里写存入和移除叶子方法。 - * OnEnable 是Unity自带的在脚本激活的时候自动调用的方法,脚本激活后向四叉树存入叶子,碰撞器生效。 - * OnDisable 则是在脚本禁用的时候自动调用的,脚本禁用后从四叉树里移除叶子,碰撞器失效。 - * - * 一个脚本实现一个功能,脚本激活则功能生效,脚本禁用则功能失效,这是面向组件的编程方式,也是Unity所使用的方式,这段话主要是给新朋友写的,老手看了别笑话我。 - */ - private void OnEnable() - { - QuadtreeObjectBasic.SetLeaf(_leaf); - } - - private void OnDisable() - { - QuadtreeObjectBasic.RemoveLeaf(_leaf); - } - - //关于 OnDrawGizmos 请看 QuadtreeBaiscObject - private void OnDrawGizmos() - { - if (!enabled) return; //在更新到正式第二版之后才发现OnDrawGizmos就算是停用了组件也会运行,于是加上这个组件停用直接返回 - - Gizmos.color = Color.green; - - MyGizmos.DrawCircle(transform.position, 10, 20); //Mygizmos是一个自写的类,位置在 QuadtreeCollider 里,这个方法是画圆圈的 - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeDetectorBasic.cs b/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeDetectorBasic.cs deleted file mode 100644 index 6a09a45..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeDetectorBasic.cs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 四叉树检测脚本,仅有显示发生碰撞的功能。 - * - * 使用方式是挂载到需要检测碰撞的物体上,之后开始运行,在 Scene 面板里拖动物体,如果发生了碰撞的话在 Console 面板里会看到碰撞信息。 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step0Basic -{ - public class QuadtreeDetectorBasic : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] //关于[SerializeField]请看 QuadtreeBasicObject - float _radius; - - //关于 OnDrawGizmo 请看 QuadtreeBasicObject - private void OnDrawGizmos() - { - DrawRadius(); - DrawCollision(); - } - - void DrawRadius() - { - Gizmos.color = Color.yellow * 0.8f; - MyGizmos.DrawCircle(transform.position, _radius, 60); //Mygizmos是一个自写的类,位置在 QuadtreeCollider 里,这个方法是画圆圈的 - } - - void DrawCollision() - { - Gizmos.color = Color.yellow; - - GameObject[] colliders = QuadtreeObjectBasic.CheckCollision(transform.position, _radius); - - foreach (GameObject collider in colliders) - Gizmos.DrawLine(transform.position, collider.transform.position); //Gizmos.DrawLine:绘制一条线,参数是两个Vector3,就是线的两端 - /* - * 假设你不会用foreach,它的格式是: - * foreach(类型 变量名A in 同类型的数组或List或其他集合类的变量B) - * { - * 这个大括号会遍历那个变量B里的每个元素,每次遍历都会用前面的变量名A,可以理解为一个简写版的for循环 - * - * 假设你连“遍历”这个词都不知道,遍历的意思是从头到尾把每个元素都过一遍 - * } - */ - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeObjectBasic.cs b/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeObjectBasic.cs deleted file mode 100644 index 327f377..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/0_Basic/QuadtreeObjectBasic.cs +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 四叉树物体脚本,使用时挂载在需要进行四叉树碰撞检测的场景里的物体上并写上需要的参数。 - * - * 注意这个脚本的执行顺序必须在 QuadtreeBasicCollider 前面,设置方式是 Edit -> Project Settings -> Script Excution Order,点"+"选择要设置执行顺序的脚本,上下拖动,越靠上执行越早 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step0Basic -{ - public class QuadtreeObjectBasic : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] //加了这个的变量可以不写public就在 Inspector 面板展示,如果有变量需要在 Inspector 面板展示但又不需要public则应该用[SerializeField] - float _top; -#pragma warning disable 0649 - [SerializeField] - float _right; -#pragma warning disable 0649 - [SerializeField] - float _bottom; -#pragma warning disable 0649 - [SerializeField] - float _left; -#pragma warning disable 0649 - [SerializeField] - int _maxLeafsNumber; -#pragma warning disable 0649 - [SerializeField] - float _minSideLength; - - static QuadtreeBasic _quadtree; //static方法必须要static变量,所以这里设为static - - - private void Awake() - { - _quadtree = new QuadtreeBasic(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - /* - * 存入。移除。检测三个方法都是 static ,因为static方法可以通过类名调用,这样就省去了每个检测器都要 Find 一次四叉树物体的工作 - */ - public static void SetLeaf(QuadtreeLeafBasic leaf) - { - _quadtree.SetLeaf(leaf); - } - - public static void RemoveLeaf(QuadtreeLeafBasic leaf) - { - _quadtree.RemoveLeaf(leaf); - } - - public static GameObject[] CheckCollision(Vector2 checkPosition, float radius) - { - return _quadtree.CheckCollision(checkPosition, radius); - } - - /* - * OnDrawGizmos:Unity自带方法之一,在绘制Gizmo的时候调用,一般来说只要在Scene面板上做了操作就会绘制Gizmo - * Gizmo是个很难解释的词汇,它直译叫“小工具”,Unity自带碰撞器的体积的线是Gizmo,移动、缩放。旋转物体的那几个工具同样是Gizmo,就是直译里说的“工具” - * Gizmo在Unity里是一次次的“绘制”出来的,在绘制Unity自带Gizmo的同时也可以通过 OnDrawGizmo 自己设定需要绘制的Gizmo - * 一般来说Gizmo只能在 Scene 面板里看到,在 Game 面板里看不到,因为这是为了方便开发才写的工具,在实际游戏过程里是没有用的 - * - * 虽然不会写Gizmo也不会对功能有什么影响,但会写Gizmo可以让开发过程更舒服 - */ - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; //Gizmos.color:绘制Gizmo的颜色 - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - /* - * OnValidate:Unity自带方法之一,当 Inspector 面板的数值变化时调用,一般用来限制数据的调整,防止误操作导致的bug - */ - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/Example Scene.unity deleted file mode 100644 index 0ab2c85..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/Example Scene.unity +++ /dev/null @@ -1,1346 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &33324924 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 33324925} - - component: {fileID: 33324926} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &33324925 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33324924} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1007, y: 1539, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &33324926 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 33324924} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 ---- !u!1 &139665278 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 139665279} - - component: {fileID: 139665280} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &139665279 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139665278} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &139665280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139665278} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &170996237 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 170996238} - - component: {fileID: 170996239} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &170996238 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170996237} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 68, y: 1120, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &170996239 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170996237} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &248682647 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 248682649} - - component: {fileID: 248682648} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &248682648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 248682647} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b9d1ca10fe0105f49b08c43c3a59889c, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 ---- !u!4 &248682649 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 248682647} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 565, y: 1095, 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 &266105606 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 266105608} - - component: {fileID: 266105607} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &266105607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 266105606} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 078845f8024501145a971f9edacdc503, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!4 &266105608 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 266105606} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &289372340 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 289372341} - - component: {fileID: 289372342} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &289372341 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 289372340} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 467, y: 72, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &289372342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 289372340} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &303927712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 303927713} - - component: {fileID: 303927714} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &303927713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 303927712} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 211, y: 308, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &303927714 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 303927712} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &509511000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 509511002} - - component: {fileID: 509511001} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!114 &509511001 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 509511000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!4 &509511002 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 509511000} - 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: 1120101591} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &560824379 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 560824380} - - component: {fileID: 560824381} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &560824380 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560824379} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 289, y: 1588, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &560824381 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560824379} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &612013895 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 612013899} - - component: {fileID: 612013898} - - component: {fileID: 612013897} - - component: {fileID: 612013896} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &612013896 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612013895} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &612013897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612013895} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &612013898 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612013895} - 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 &612013899 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 612013895} - 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: 1088345187} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &853884843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 853884844} - - component: {fileID: 853884845} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &853884844 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 853884843} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 530, y: 580, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &853884845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 853884843} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1088345186 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1088345187} - - component: {fileID: 1088345189} - - component: {fileID: 1088345188} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1088345187 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1088345186} - 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: 612013899} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1088345188 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1088345186} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &1088345189 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1088345186} - m_CullTransparentMesh: 0 ---- !u!1 &1120101590 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1120101591} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1120101591 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1120101590} - 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: - - {fileID: 509511002} - - {fileID: 1271169237} - - {fileID: 139665279} - - {fileID: 1266525819} - - {fileID: 560824380} - - {fileID: 1602456315} - - {fileID: 1149304231} - - {fileID: 289372341} - - {fileID: 303927713} - - {fileID: 853884844} - - {fileID: 1350610265} - - {fileID: 170996238} - - {fileID: 1310574760} - - {fileID: 33324925} - - {fileID: 1488995687} - - {fileID: 2083982323} - - {fileID: 1613095278} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1149304230 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1149304231} - - component: {fileID: 1149304232} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1149304231 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1149304230} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 897, y: 219, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1149304232 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1149304230} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &1266525818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1266525819} - - component: {fileID: 1266525820} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1266525819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266525818} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1266525820 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1266525818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &1271169236 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1271169237} - - component: {fileID: 1271169238} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1271169237 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271169236} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1271169238 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1271169236} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &1294188676 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1294188680} - - component: {fileID: 1294188679} - - component: {fileID: 1294188678} - - component: {fileID: 1294188677} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1294188677 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294188676} - m_Enabled: 1 ---- !u!124 &1294188678 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294188676} - m_Enabled: 1 ---- !u!20 &1294188679 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294188676} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.7311321, g: 1, b: 0.9341393, 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: -1 - 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 &1294188680 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1294188676} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1310574759 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1310574760} - - component: {fileID: 1310574761} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1310574760 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1310574759} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 262, y: 842, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1310574761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1310574759} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &1350610264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1350610265} - - component: {fileID: 1350610266} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1350610265 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1350610264} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 11, y: 664, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1350610266 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1350610264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1358137647 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1358137650} - - component: {fileID: 1358137649} - - component: {fileID: 1358137648} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1358137648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1358137647} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1358137649 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1358137647} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1358137650 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1358137647} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1488995686 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1488995687} - - component: {fileID: 1488995688} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1488995687 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1488995686} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1002, y: 1151, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1488995688 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1488995686} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1602456314 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1602456315} - - component: {fileID: 1602456316} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1602456315 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1602456314} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 677, y: 1871, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1602456316 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1602456314} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1613095277 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1613095278} - - component: {fileID: 1613095279} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &1613095278 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613095277} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 614, y: 1219, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1613095279 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613095277} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 500 ---- !u!1 &2083982322 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2083982323} - - component: {fileID: 2083982324} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 4294967295 - m_IsActive: 1 ---- !u!4 &2083982323 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2083982322} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 881, y: 763, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1120101591} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2083982324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2083982322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db899b5bef48b0546a139d74de8edb18, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeColliderRadius.cs b/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeColliderRadius.cs deleted file mode 100644 index 7706ff4..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeColliderRadius.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 增加了半径的碰撞器,跟第零步的碰撞器基本没区别 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step1Radius -{ - public class QuadtreeColliderRadius : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - Transform _transform; - QuadtreeLeafRadius _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeLeafRadius(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - QuadtreeObjectRadius.SetLeaf(_leaf); - } - - private void OnDisable() - { - QuadtreeObjectRadius.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.localScale.x, transform.localScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeDetectorRadius.cs b/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeDetectorRadius.cs deleted file mode 100644 index 99b323b..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeDetectorRadius.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step1Radius -{ - public class QuadtreeDetectorRadius : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] - float _radius; - - private void OnDrawGizmos() - { - DrawRadius(); - DrawCollision(); - } - - void DrawRadius() - { - Gizmos.color = Color.yellow * 0.8f; - MyGizmos.DrawCircle(transform.position, _radius, 60); - } - - void DrawCollision() - { - foreach (GameObject collider in QuadtreeObjectRadius.CheckCollision(transform.position, _radius)) - Gizmos.DrawLine(transform.position, collider.transform.position); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeObjectRadius.cs b/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeObjectRadius.cs deleted file mode 100644 index 85d9fa2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeObjectRadius.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 四叉树脚本,挂载在需要四叉树碰撞检测的场景里的物体上,设置好数值后就能进行检测了。 - * - * 执行顺序要在 QuadtreeCollider 之前 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step1Radius -{ - public class QuadtreeObjectRadius : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] - float _top; -#pragma warning disable 0649 - [SerializeField] - float _right; -#pragma warning disable 0649 - [SerializeField] - float _bottom; -#pragma warning disable 0649 - [SerializeField] - float _left; -#pragma warning disable 0649 - [SerializeField] - int _maxLeafsNumber; -#pragma warning disable 0649 - [SerializeField] - float _minSideLength; - - static QuadtreeRadius _quadtree; - - private void Awake() - { - _quadtree = new QuadtreeRadius(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - public static void SetLeaf(QuadtreeLeafRadius leaf) - { - _quadtree.SetLeaf(leaf); - } - - public static void RemoveLeaf(QuadtreeLeafRadius leaf) - { - _quadtree.RemoveLeaf(leaf); - } - - public static GameObject[] CheckCollision(Vector2 checkPosition, float radius) - { - return _quadtree.CheckCollision(checkPosition, radius); - } - - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeRadius.cs b/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeRadius.cs deleted file mode 100644 index b6294d2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/1_Radius/QuadtreeRadius.cs +++ /dev/null @@ -1,392 +0,0 @@ -/* - * 增加了半径的四叉树,同样有配合使用的 QuadtreeWithRadiusObject 和 QuadtreeWithRadiusCollider - * - * 增加了半径后存入、检测、移除的步骤都有所改变 - * - * 先从检测开始: - * 在第零步里面已经写过如何判断,原理是自上到下找到树梢之后计算距离和检测半径。 - * 在增加了碰撞器半径后向下找到树梢的步骤出现了变化: - * 第零步的叶子没有半径,不管叶子在节点区域里的哪个位置,叶子的碰撞范围都不会超出节点范围。 - * 这一步的叶子有了半径,如果叶子的位置比较靠近节点区域边缘,这个叶子的碰撞范围就会超出节点区域。 - * 这样向下检测一个子节点有没有可能发生碰撞时就需要考虑到这个子节点区域里半径最大的那个节点可能已经处于边缘处。 - * 当然我们可以通过遍历节点里所有的叶子得出最大半径,但这样暴力解决计算量比不用四叉树还大。 - * 为了减少计算量我们可以给每个节点存一个最大半径,这样就只需要查看一次最大半径就可以判断出结果。 - * 也就是说需要增加最大半径。 - * - * 之后看存入: - * 第零步光存入就算完,但增加了最大半径这个值后就不一样了,需要每次存入的时候都更新最大半径。 - * 光是自身更新还不够,还要向上更新,否则会出现这样一种情况: - * 在左上角有一个树梢里有一个叶子半径巨大无比,碰撞区域比整个四叉树的区域还要大。 - * 测试点在右下角。 - * 在根节点向下找的时候法线左上方的子节点的最大半径很小,以为他不会发生碰撞,没有向下寻找。 - * 这样这个不管检测哪都会碰到的叶子就因为有一节数值的最大半径太小而被忽略掉了。 - * 为了应对这种情况必须要向上更新最大半径。 - * - * 最后是移除 - * 第零步的移除也是移除就算完了,这一步的移除则要计算新的最大半径。 - * 当然也要向上更新,不然最大的叶子已经没了还计算过来会浪费计算量。 - * - * 附带增加了存入和移除叶子的是否成功的bool返回 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step1Radius -{ - public class QuadtreeLeafRadius - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - public QuadtreeLeafRadius(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - - - public class QuadtreeRadius - { - QuadtreeWithRadiusField _field; - - float _maxRadius = Mathf.NegativeInfinity; - /* - * 这个值代表着这个节点里半径最大的那个叶子的半径,节点里没有叶子时设为0或者任何负数都不影响正确性,设为负无穷的原因如下: - * - * 由于这个四叉树在第零步的基础上增加了叶子的半径,碰撞检测向下递归时判断子节点有没有可能有叶子发生碰撞就变得复杂了: - * 一个节点里可以有好多种半径的叶子,每个叶子可能在任意位置,因此要判断一个子节点里有没有叶子可能发生碰撞的方法变成了 计算检测点到子节点区域的距离,如果这个距离小于测试半径和子节点最大半径的叶子的半径,则说明这个子节点里有可能有叶子会碰撞到。 - * - * 根据这个方法,如果一个子节点的最大半径是负数,则判断会发生有趣的现象:检测范围已经覆盖到了这个节点的范围,但因为节点半径是负数,判断上要减去这个值。 - * 那么如果一个子节点的最大半径是负无穷,那么即使测试半径再怎么大,这个节点也不会被判断为可能发生碰撞。(除非测试半径是正无穷,设为正无穷肯定不是正常流程,至少不是这个四叉树的正常流程) - * 如果将没有叶子的节点的最大半径设为负无穷,则碰撞检测时这个节点判断为不会发生碰撞,就不会向下迭代这个节点,可以节省一点计算量。 - */ - - QuadtreeRadius _parent; - /* - * 父节点,用来向上更新最大半径 - */ - - QuadtreeRadius _upperRightChild; - QuadtreeRadius _lowerRightChild; - QuadtreeRadius _lowerLeftChild; - QuadtreeRadius _upperLeftChild; - - List> _leafs = new List>(); - - int _maxLeafsNumber; - float _minSideLength; - - /* - * 构造方法增加一个父节点参数,默认值是null。 - * 创建四叉树时不传参数,分割时传当前节点,这样根节点就没有父节点,其他节点都有父节点,向上更新半径就可以进行。 - */ - public QuadtreeRadius(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeRadius parent = null) - { - _field = new QuadtreeWithRadiusField(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _parent = parent; - - DrawField(); //绘制节点范围,删除不影响功能 - } - - /* - * 存入叶子 - * 在第零步的基础上增加了更新半径功能和返回存入是否成功功能 - */ - public bool SetLeaf(QuadtreeLeafRadius leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(QuadtreeLeafRadius leaf) - { - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(QuadtreeLeafRadius leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newMaxRaiuds = GetChildrenMaxRadius(); - if (newMaxRaiuds != _maxRadius) - { - _maxRadius = newMaxRaiuds; - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(QuadtreeLeafRadius leaf) - { - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - /* - * 分割跟第零步完全一样 - */ - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在((" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "))的树梢节点达到分割条件,进行分割"); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeRadius(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, this); - _lowerRightChild = new QuadtreeRadius(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, this); - _lowerLeftChild = new QuadtreeRadius(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, this); - _upperLeftChild = new QuadtreeRadius(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, this); - - foreach (QuadtreeLeafRadius leaf in _leafs) //因为这里向子节点存入所有叶子,最大半径的叶子依然在范围里,不需要对最大半径做特别处理 - SetLeafToChildren(leaf); - _leafs = null; - } - - /* - * 碰撞检测,比第零步多了个叶子半径,原理还是根据距离做判断 - */ - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (QuadtreeLeafRadius leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeRadius child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.CheckCollision(checkPoint, checkRadius); - return new T[0]; - } - - /* - * 移除叶子,比第零步多了更新最大半径的步骤和移除是否成功的返回 - */ - public bool RemoveLeaf(QuadtreeLeafRadius leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(QuadtreeLeafRadius leaf) - { - bool removeLeafBool = _leafs.Remove(leaf); - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius); - return removeLeafBool; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) //只有在最大半径变化的时候才需要更新半径。 - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; //默认值设置为负无穷,原理在开头就说过,是为了在没有叶子的时候可以直接跳过节省计算量。 - - foreach (QuadtreeLeafRadius leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) //首先节点最大半径就是所有叶子里最大的半径,所以如果遍历到了和节点最大半径相同的叶子,就不会有更大的叶子了,直接return,节省计算量。 - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(QuadtreeLeafRadius leaf) - { - Debug.Log("位置在((" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "))的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - - Debug.LogError("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的节点,移除叶子失败,叶子不在任何一个子节点的区域里"); - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, Mathf.Infinity); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, Mathf.Infinity); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, Mathf.Infinity); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, Mathf.Infinity); - } - } - - public class QuadtreeWithRadiusField - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public QuadtreeWithRadiusField(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/Example Scene.unity deleted file mode 100644 index 9b22197..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/Example Scene.unity +++ /dev/null @@ -1,1436 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &186484556 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 186484557} - - component: {fileID: 186484558} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &186484557 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 186484556} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &186484558 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 186484556} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &274950494 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 274950495} - - component: {fileID: 274950496} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &274950495 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274950494} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &274950496 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274950494} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 04d310c0cfab925449c88fb6bc9f9d21, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!1 &314418536 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 314418537} - - component: {fileID: 314418538} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &314418537 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 314418536} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 29, y: 294, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &314418538 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 314418536} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &365002318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 365002321} - - component: {fileID: 365002320} - - component: {fileID: 365002319} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &365002319 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365002318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &365002320 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365002318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &365002321 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 365002318} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &631734339 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 631734340} - - component: {fileID: 631734341} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &631734340 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 631734339} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 913, y: 1790, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &631734341 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 631734339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &639922975 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 639922976} - - component: {fileID: 639922977} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &639922976 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 639922975} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 942, y: 1413, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &639922977 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 639922975} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &653339185 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 653339186} - - component: {fileID: 653339187} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &653339186 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 653339185} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 33, y: 979, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &653339187 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 653339185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &715499024 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 715499025} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &715499025 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 715499024} - 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: - - {fileID: 2003620625} - - {fileID: 903687110} - - {fileID: 791188402} - - {fileID: 186484557} - - {fileID: 314418537} - - {fileID: 1898850597} - - {fileID: 1579233396} - - {fileID: 1193084236} - - {fileID: 1109666460} - - {fileID: 653339186} - - {fileID: 631734340} - - {fileID: 639922976} - - {fileID: 1037778242} - - {fileID: 1137181614} - - {fileID: 2139070464} - - {fileID: 1208643017} - - {fileID: 1194802015} - - {fileID: 1234084022} - - {fileID: 1171149216} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &735751334 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 735751335} - - component: {fileID: 735751337} - - component: {fileID: 735751336} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &735751335 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735751334} - 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: 2141977218} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &735751336 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735751334} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u78B0\u649E\u5668\u548C\u8C03\u6574\u534A\u5F84\u89C2\u770B\u6548\u679C\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &735751337 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 735751334} - m_CullTransparentMesh: 0 ---- !u!1 &791188401 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 791188402} - - component: {fileID: 791188403} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &791188402 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 791188401} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &791188403 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 791188401} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &903687109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 903687110} - - component: {fileID: 903687111} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &903687110 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 903687109} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &903687111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 903687109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1037778241 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1037778242} - - component: {fileID: 1037778243} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1037778242 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037778241} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 195, y: 1589, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1037778243 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1037778241} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &1109666459 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1109666460} - - component: {fileID: 1109666461} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1109666460 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1109666459} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 688, y: 495, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1109666461 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1109666459} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &1137181613 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1137181614} - - component: {fileID: 1137181615} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1137181614 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137181613} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 708, y: 827, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1137181615 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1137181613} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 ---- !u!1 &1169039927 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1169039931} - - component: {fileID: 1169039930} - - component: {fileID: 1169039929} - - component: {fileID: 1169039928} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1169039928 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1169039927} - m_Enabled: 1 ---- !u!124 &1169039929 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1169039927} - m_Enabled: 1 ---- !u!20 &1169039930 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1169039927} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.79607844, g: 1, b: 0.9454705, 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: -1 - 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 &1169039931 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1169039927} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1171149215 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1171149216} - - component: {fileID: 1171149217} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1171149216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1171149215} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 987, y: 383, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1171149217 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1171149215} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1193084235 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1193084236} - - component: {fileID: 1193084237} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1193084236 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1193084235} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 405, y: 1067, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1193084237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1193084235} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 ---- !u!1 &1194802014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1194802015} - - component: {fileID: 1194802016} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1194802015 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1194802014} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 615, y: 168, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1194802016 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1194802014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1208643016 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1208643017} - - component: {fileID: 1208643018} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1208643017 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208643016} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 327, y: 16, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1208643018 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1208643016} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &1234084021 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1234084022} - - component: {fileID: 1234084023} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1234084022 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1234084021} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 405, y: 476, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1234084023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1234084021} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &1261394674 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1261394676} - - component: {fileID: 1261394675} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1261394675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1261394674} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 463e8edc2f855ed4d882aca4ad342bae, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 ---- !u!4 &1261394676 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1261394674} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 543, y: 1388, 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 &1579233395 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1579233396} - - component: {fileID: 1579233397} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1579233396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1579233395} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 503, y: 1927, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1579233397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1579233395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &1898850596 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1898850597} - - component: {fileID: 1898850598} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1898850597 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898850596} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1060, y: 964, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1898850598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898850596} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 ---- !u!1 &2003620624 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2003620625} - - component: {fileID: 2003620626} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2003620625 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2003620624} - 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: 715499025} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2003620626 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2003620624} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 ---- !u!1 &2139070463 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2139070464} - - component: {fileID: 2139070465} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2139070464 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2139070463} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 210, y: 695, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 715499025} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2139070465 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2139070463} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d6a4f64809c76e4c84b55d4516be79a, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 ---- !u!1 &2141977214 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2141977218} - - component: {fileID: 2141977217} - - component: {fileID: 2141977216} - - component: {fileID: 2141977215} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2141977215 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2141977214} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &2141977216 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2141977214} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &2141977217 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2141977214} - 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 &2141977218 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2141977214} - 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: 735751335} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeColliderUpdate.cs b/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeColliderUpdate.cs deleted file mode 100644 index 41f1ce9..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeColliderUpdate.cs +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 碰撞器也要对应增加更新叶子数据的功能 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step2Update -{ - public class QuadtreeColliderUpdate : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - Transform _transform; - QuadtreeLeafUpdate _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeLeafUpdate(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); //存入叶子之前先更新一次叶子数据确保存入无误。实际上前两步也应该在存入前更新一次叶子数据,但前两步因为没有更新干脆把碰撞器当做固定的处理了 - QuadtreeObjectUpdate.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - } - - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - /* - * 加了个应对缩放的功能,因为四叉树是不知道物体的缩放的。 - * 不过因为是圆形碰撞器所以不能变成椭圆碰撞区域,只能选缩放比较大的那个轴做基准。 - * 你要是喜欢的话也可以改成小的。 - */ - } - - private void OnDisable() - { - QuadtreeObjectUpdate.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeDetectorUpdate.cs b/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeDetectorUpdate.cs deleted file mode 100644 index 175c644..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeDetectorUpdate.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step2Update -{ - public class QuadtreeDetectorUpdate : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] - float _radius; - - List _colliders; - - private void OnDrawGizmos() - { - DrawCheckRadius(); - DrawCollision(); - } - - void DrawCheckRadius() - { - Gizmos.color = Color.yellow * 0.8f; - MyGizmos.DrawCircle(transform.position, _radius, 60); - } - - void DrawCollision() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in QuadtreeObjectUpdate.CheckCollision(transform.position, _radius)) - Gizmos.DrawLine(transform.position, collider.transform.position); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeObjectUpdate.cs b/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeObjectUpdate.cs deleted file mode 100644 index 7631469..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeObjectUpdate.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 还是那个四叉树物体,就是加了个更新,还是要设置执行顺序在碰撞器之前。 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step2Update -{ - public class QuadtreeObjectUpdate : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] - float _top; -#pragma warning disable 0649 - [SerializeField] - float _right; -#pragma warning disable 0649 - [SerializeField] - float _bottom; -#pragma warning disable 0649 - [SerializeField] - float _left; -#pragma warning disable 0649 - [SerializeField] - int _maxLeafsNumber; -#pragma warning disable 0649 - [SerializeField] - float _minSideLength; - - static QuadtreeUpdate _quadtree; - - private void Awake() - { - _quadtree = new QuadtreeUpdate(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - public static bool SetLeaf(QuadtreeLeafUpdate leaf) - { - return _quadtree.SetLeaf(leaf); - } - - /* - * 每帧更新一次四叉树 - */ - private void Update() - { - _quadtree.Update(); - } - - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _quadtree.CheckCollision(checkPoint, checkRadius); - } - - public static bool RemoveLeaf(QuadtreeLeafUpdate leaf) - { - return _quadtree.RemoveLeaf(leaf); - } - - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeUpdate.cs b/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeUpdate.cs deleted file mode 100644 index f0c887f..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/2_Update/QuadtreeUpdate.cs +++ /dev/null @@ -1,531 +0,0 @@ -/* - * 经过艰难险阻终于到这一步了:四叉树的更新 - * - * 前面两步的四叉树都没有更新功能,只要一移动碰撞器就会出错,就是因为缺了一个更新叶子的功能,这一步就来完成这个功能。 - * - * 更新分为两部分:叶子位置的更新和叶子半径的更新。 - * 叶子位置的更新是这样的: - * 首先由根节点发起更新 - * 更新顺着树枝节点递归传递给每一个树梢节点 - * 树梢节点检测所有的叶子的位置 - * 如果叶子还在树梢节点的范围里就不用管它 - * 但如果叶子已经离开了树梢的范围则需要重新从根节点插入叶子,这样叶子就会自动到正确的树梢去 - * - * 半径更新是这样的: - * 还是根节点发出 - * 还是递归到每个树梢 - * 之后树梢要遍历所有叶子,找出新的最大半径 - * 如果这个新的最大半径和原本的最大半径一样那就什么都不用干 - * 但如果这个新的最大半径和原来的最大半径不一样,就要向上更新最大半径 - * - * 看了上面两个之后我们可以考虑一下更新顺序: - * - * 是先位置后半径?还是先半径后位置?或者同时进行好像也不错,只用遍历一遍。 - * - * 这个坑我已经踩过了,要先更新位置,因为叶子可以从一个树梢的范围移动到另一个树梢的范围,但在位置更新之前所有叶子都被视为在原来的树梢上,这样更新半径的时候就会把半径算到错误的树梢上。 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step2Update -{ - public class QuadtreeLeafUpdate - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - - public QuadtreeLeafUpdate(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - public class QuadtreeUpdate - { - QuadtreeWithUpdateField _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeUpdate _root; - /* - * 根节点,前面已经说到更新位置时需要从根节点再次存入叶子。 - * 虽然可以通过向上递归父节点查到根节点但找个字段存下来计算量小。 - */ - - QuadtreeUpdate _parent; - QuadtreeUpdate _upperRightChild; - QuadtreeUpdate _lowerRightChild; - QuadtreeUpdate _lowerLeftChild; - QuadtreeUpdate _upperLeftChild; - - List> _leafs = new List>(); - - int _maxLeafsNumber; - float _minSideLength; - - //构造,构造方法增加根节点参数,如果不传参则设为自身(只有创建根节点时不传参) - public QuadtreeUpdate(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeUpdate root = null, QuadtreeUpdate parent = null) - { - _field = new QuadtreeWithUpdateField(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - /* - * ? : 运算符,英文冒号(:)是运算符的一部分。 - * ? :运算符是唯一的三参数运算符(暂时的,但几十年都没有出第二个),所以很多人直接叫他“三目运算符” - * 他的格式是这样的: - * 条件 ? 参数1 : 参数2 - * 如果条件为真,返回参数1,条件为假,返回参数2。 - * - * 特别方便,本来要if else四行的代码只要一行就搞定了 - */ - - _parent = parent; - } - - /* - * 存入增加存入叶子不在整个四叉树范围内的情况的判断 - * - * 这个判断在最开始就应该写上,但在前面并不会造成特别严重的后果,为了降低知识密度就没写,但在增加了更新之后,一旦有一个叶子的位置不在整个树的范围内,马上就会导致死循环 - */ - public bool SetLeaf(QuadtreeLeafUpdate leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(QuadtreeLeafUpdate leaf) - { - if (this == _root && !_field.Contains(leaf.position)) - { - Debug.LogError("存入叶子失败,叶子不在四叉树范围内"); - return false; - } - - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(QuadtreeLeafUpdate leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(QuadtreeLeafUpdate leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - /* - * 【非常重要】在分割之前先进行一次更新,从这一步开始叶子可以移动,因此有可能在分割的时候有的叶子已经移出了这个树梢的范围,那么在分割完后重新存入叶子的过程中就会出现叶子不在所有子节点范围里的bug,为此在分割之前先进行一次更新 - * - * 次要:在分割子节点时存入根节点,便于重新存入叶子 - */ - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - Update(); //这一步非常重要!隐形巨坑!有时候有的叶子已经脱离了他所在的树梢的范围但还没有更新,在分割完成后重新存入叶子的时候就会发生错误,在分割前先进行一次更新,因为只有自己的叶子要重新存入,所以自己调用更新自己就行,不需要根节点进行全部更新 - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeUpdate(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeUpdate(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeUpdate(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeUpdate(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (QuadtreeLeafUpdate leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //更新 - public void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能,移到更新是因为之前用无限时长绘制的线在场景切换后还是存在,但场景切换时四叉树已经销毁了 - } - - void UpdatePosition() - { - if (DontHaveChildren()) - UpdatePositionSelf(); - else - UpdateChildrensPosition(); - } - - void UpdatePositionSelf() - { - List> resetLeafs = new List>(); - /* - * 需要重新存入的叶子List,如果检测的同时进行重新存入有可能会导致有的叶子检测好几次,有的叶子没检测到。 - * 先遍历一次找到需要重新存入的叶子,之后再一起重新存入。 - */ - - foreach (QuadtreeLeafUpdate leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (QuadtreeLeafUpdate leaf in resetLeafs) - ResetLeaf(leaf); - } - - void ResetLeaf(QuadtreeLeafUpdate leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateMaxRadiusSelf(); - else - UpdateChildrensMaxRadius(); - } - - void UpdateMaxRadiusSelf() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (QuadtreeLeafUpdate leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - - return newMaxRadius; - /* - * 看起来和移除叶子时候的那个获取最大叶子最大半径的方法很像。 - * 但因为碰撞器的半径可能会增大,所以不能遇到现在的最大半径就返回。 - */ - } - - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - //检测 - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (QuadtreeLeafUpdate leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeUpdate child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.CheckCollision(checkPoint, checkRadius); - return new T[0]; - } - - //移除,增加了全树移除 - public bool RemoveLeaf(QuadtreeLeafUpdate leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(QuadtreeLeafUpdate leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - bool DoRemoveLeafFromSelf(QuadtreeLeafUpdate leaf) - { - if (_leafs.Remove(leaf)) //List的Remove返回有没有成功从List里移除要移除的元素,元素不存在的时候返回是 false,有了这个返回值就可以非常轻松的判断出这个树梢是不是成功移除了叶子 - { - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius); - return true; - } - return false; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius); - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (QuadtreeLeafUpdate leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(QuadtreeLeafUpdate leaf) - { - Debug.Log("位置在(" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + ")的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - /* - * 全树移除,不通过位置判断而是直接遍历整棵树移除叶子 - * - * 实际上在上一步就应该增加全树移除,但考虑到上一步没有实用性为了降低知识密度就没加。 - * - * 前面的移除都是根据叶子位置找到树梢之后进行删除,但这个寻找方式是有缺陷的,在几种情况下都会失效 - * 1.叶子移出了树梢范围,叶子不在原本的树梢上按照位置当然找不到正确的树梢,不要以这种情况为有了更新就不会发生,更新每帧只进行一次,叶子的移动则是不限量的 - * 2.叶子移出了整棵树的范围,情况更严重,从根节点开始就不可能找得到叶子所在的树梢 - * 3.叶子根本不在树里,几乎找茬的情况,无论在哪个树梢都不可能找到这个叶子,更不可能移除掉 - * - * 如果是情况1,可以通过更新树或全树移除来解决,但对于2和3更新无异于自寻死路,这样唯一的解就是不通过位置寻找树梢而是遍历整棵树找到这个叶子删掉他 - */ - bool RemoveLeafInTotalTree(QuadtreeLeafUpdate leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChildren(leaf); - } - - bool RemoveLeafInTotalTreeFromChildren(QuadtreeLeafUpdate leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } - - public class QuadtreeWithUpdateField - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public QuadtreeWithUpdateField(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/Example Scene.unity deleted file mode 100644 index 0e8c8b2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/Example Scene.unity +++ /dev/null @@ -1,1653 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &28088249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 28088250} - - component: {fileID: 28088251} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &28088250 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 22, y: 354, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &28088251 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &166172533 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 166172534} - - component: {fileID: 166172535} - - component: {fileID: 166172536} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &166172534 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 540, y: 980, 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!114 &166172535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 1 ---- !u!114 &166172536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 79fc20c78cae83b49ab56682ee4f4ef8, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &225063062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 225063063} - - component: {fileID: 225063064} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &225063063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 137, y: 1622, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &225063064 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &267807784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 267807785} - - component: {fileID: 267807786} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &267807785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 292, y: 1892, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &267807786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &277191813 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 277191815} - - component: {fileID: 277191814} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &277191814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!4 &277191815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - 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: 475800166} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &475800165 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 475800166} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &475800166 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475800165} - 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: - - {fileID: 277191815} - - {fileID: 1224400594} - - {fileID: 1588951571} - - {fileID: 1105880774} - - {fileID: 2101465706} - - {fileID: 1168797284} - - {fileID: 845522111} - - {fileID: 267807785} - - {fileID: 1978251081} - - {fileID: 702274662} - - {fileID: 760352672} - - {fileID: 1210468478} - - {fileID: 225063063} - - {fileID: 747963148} - - {fileID: 28088250} - - {fileID: 588042407} - - {fileID: 1809400056} - - {fileID: 743454856} - - {fileID: 2068523312} - - {fileID: 782024763} - - {fileID: 1150319562} - - {fileID: 823974404} - - {fileID: 1752678073} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &588042406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 588042407} - - component: {fileID: 588042408} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &588042407 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 332, y: 21, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &588042408 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &702274661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 702274662} - - component: {fileID: 702274663} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &702274662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 835, y: 350, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &702274663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &743454855 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 743454856} - - component: {fileID: 743454857} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &743454856 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 551, y: 1663, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &743454857 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &747963147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747963148} - - component: {fileID: 747963149} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &747963148 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 766, y: 1814, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &747963149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &760352671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 760352672} - - component: {fileID: 760352673} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &760352672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1027, y: 628, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &760352673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &782024762 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 782024763} - - component: {fileID: 782024764} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &782024763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 774, y: 765, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &782024764 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &823974403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 823974404} - - component: {fileID: 823974405} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &823974404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 432, y: 1312, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &823974405 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &845522110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 845522111} - - component: {fileID: 845522112} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &845522111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 607, y: 35, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &845522112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &1036592704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1036592707} - - component: {fileID: 1036592706} - - component: {fileID: 1036592705} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1036592705 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036592704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1036592706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036592704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1036592707 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036592704} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1105880773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1105880774} - - component: {fileID: 1105880775} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1105880774 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1105880775 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1150319561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1150319562} - - component: {fileID: 1150319563} - m_Layer: 0 - m_Name: Collider (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1150319562 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 391, y: 874, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1150319563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &1168797283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1168797284} - - component: {fileID: 1168797285} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1168797284 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 32, y: 792, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1168797285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &1210468477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1210468478} - - component: {fileID: 1210468479} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1210468478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 493, y: 322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1210468479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &1222364886 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1222364887} - - component: {fileID: 1222364889} - - component: {fileID: 1222364888} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1222364887 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222364886} - 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: 2019460803} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1222364888 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222364886} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u78B0\u649E\u5668\u548C\u8C03\u6574\u534A\u5F84\u89C2\u770B\u6548\u679C\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &1222364889 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1222364886} - m_CullTransparentMesh: 0 ---- !u!1 &1224400593 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1224400594} - - component: {fileID: 1224400595} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1224400594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1224400595 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1243215199 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1243215203} - - component: {fileID: 1243215202} - - component: {fileID: 1243215201} - - component: {fileID: 1243215200} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1243215200 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!124 &1243215201 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!20 &1243215202 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.7216981, g: 1, b: 0.97969437, 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: -1 - 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 &1243215203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1588951570 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1588951571} - - component: {fileID: 1588951572} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1588951571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1588951572 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1670821779 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1670821780} - - component: {fileID: 1670821781} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1670821780 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1670821781 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b757618e1e39919479d1825501bc86f5, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!1 &1752678072 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1752678073} - - component: {fileID: 1752678074} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1752678073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1043, y: 1549, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1752678074 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 125 - _checkCollision: 0 ---- !u!1 &1809400055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809400056} - - component: {fileID: 1809400057} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1809400056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 245, y: 555, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1809400057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1978251080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1978251081} - - component: {fileID: 1978251082} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1978251081 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 23, y: 1135, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1978251082 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &2019460799 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2019460803} - - component: {fileID: 2019460802} - - component: {fileID: 2019460801} - - component: {fileID: 2019460800} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2019460800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019460799} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &2019460801 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019460799} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &2019460802 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019460799} - 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 &2019460803 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2019460799} - 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: 1222364887} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &2068523311 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2068523312} - - component: {fileID: 2068523313} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2068523312 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1048, y: 1002, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2068523313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &2101465705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2101465706} - - component: {fileID: 2101465707} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2101465706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 903, y: 1230, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2101465707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eca38d80d195f7458bde49c04fc0548, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeColliderEvent.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeColliderEvent.cs deleted file mode 100644 index 3325b30..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeColliderEvent.cs +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 碰撞器增加了一个碰撞发生的“事件”,用来实现类似Unity的 OnCollision 的效果。 - * - * 事件和委托难倒了不少的新人,而且事件委托并不是四叉树的一部分,但她真的太好用了,所以我还是写了这一步。 - * - * 直接解释事件委托太困难、太难理解,我们先来看一下Unity的“面向组件”风格,有助于理解事件委托。 - * - * “面向组件”是基于面向对象的编程方式,是为了应对面向对象的大量继承导致的灵活度严重下跌而出现的编程方式。 - * 面向对象的编程思路是把一个对象视为一个整体,所有功能写在一个类里。 - * 面向组件则是把一个对象视为一个组合体,每个功能写成一个类,每个功能可以独立运行。 - * - * 面向对象可以解决继承的终极问题:树人问题。 - * 树人这个生物,是植物还是动物? - * 如果他继承自植物,你需要把动物类里的进食等方法复制一份到树人里面,你违反了DRY(Don't repeat yourself)。 - * 如果继承自动物呢?你需要把植物的光合作用、吸收土壤养分、易燃等写进树人里,你又违反了DRY。 - * 如果继承自生物,你双重违反了DRY。 - * 这个问题根本不能用继承解决,要走接口,而在Unity里的解决方式是:把植物和动物的组件都挂上去。 - * - * 了解面向组件后回到碰撞器的问题上 - * - * 碰撞器负责检测碰撞,这是只做一件事原则。 - * 你可能想要在碰撞器碰撞时造成减血,或者直接死亡,这并不是碰撞器需要做的事情,这些事情交给生命组件。 - * 之后你可能想要在碰撞时发出闪光,这是个纯视觉效果的功能,与生命值无关。他也可以独立出来,交给碰撞特效组件。 - * 之后你又想要一个在碰撞发生的时候会做一个记录的功能,这样你就能通过数据分析出要不要做些改进。这个功能只在开发过程有用,根本不会发布出去,当然要独立出来,交给碰撞记录组件。 - * 加上记录组件后你又觉得闪光特效太晃眼了要暂时关掉,你只需要把这个组件移除掉就行,等到要用的时候再挂载上去又能正常工作。 - * - * 在这种轻松的想要什么就加什么想减什么就减什么的开发方式前面有一个障碍: - * 生命组件、特效组件、记录组件,他们都是在碰撞发生的时候执行自己的方法,但他们自己没有检测碰撞的方法,这活是碰撞器的。 - * 你要怎么样让碰撞器在每次发生碰撞时都能通知到这些组件呢?或许你可以写下好几个调用,一个个的调用,一个都不漏。 - * 但这之后如果你又想再增加一个发生碰撞时会输出Debug信息的组件你要怎么办?你需要准备一个输出信息组件,还需要在碰撞器里再写一个调用,这违反了开放封闭原则。 - * 一个两个你可以写,如果是三五十个你就会疯掉了,这个问题不能用这么暴力的方法解决。 - * - * 一劳永逸的解决方法是有的: - * 让碰撞器在每次发生碰撞时发出一个消息,他只做这一件事。 - * 需要在碰撞时做出某些行动的组件则来监听这个消息。 - * 碰撞器检测到碰撞 -> 碰撞器发出消息 -> 其他组件收到消息 -> 其他组件开始行动 - * 这样碰撞器只需要写一次,其他组件也只需要准备一个统一的监听消息功能就行。 - * - * 要实现这种功能最直接的办法是用C#的事件委托,使用流程大概是这样: - * - * 第一步,你需要定义一个委托类型,他负责联系事件和方法。 - * 第二步,你需要定义一个跟他配对的事件,“配对”听起来有点麻烦其实特别简单,你只要写上要配对的委托类型,C#帮你解决剩下的问题。 - * 第三步,你要进行一个叫“订阅”的操作,就是通过委托把某个方法和事件联系起来,这样事件发出时方法就会执行。 - * - * 上面的三步里,前两步在发出事件的组件里,在这一步里就是碰撞器组件。 - * 第三部是在需要订阅事件的组件里写的,在这一步里写在 QuadtreeWithEventDelegateDetector 里 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3Event -{ - public delegate void QuadtreeCollisionEventDelegateEvent(GameObject colliderGameObject); - /* - * 这是第一部:定义委托类型。 - * 委托类型看起来像是方法,有返回、有参数,只不过多了个 delegate。 - * 要通过这个委托类型订阅事件的方法必须要有和这个委托类型相同的返回和参数。 - */ - - public class QuadtreeColliderEvent : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeLeafEvent _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeLeafEvent(gameObject, GetLeafPosition(), _radius); - } - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); - QuadtreeObjectEvent.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public event QuadtreeCollisionEventDelegateEvent collisionEvent; - - /* - * 第二步:根据前面的委托类型定义的事件,结构是: - * event 委托类型 事件名 - */ - void DoCheckCollision() - { - if (collisionEvent == null) return; - /* - * 首先要检测一下这个事件有没有被订阅,没有订阅的事件是null。 - * 发出没有被订阅的事件卵用没有,谁也不会有行动,实际上你要是真的把没订阅的事件发出了马上就会报错。 - */ - - GameObject[] colliderGameObjects = QuadtreeObjectEvent.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - /* - * 发出事件很简单:像方法一样用,名字(参数) - * 很明显能看出来这里的使用方式和前面定义委托类型的时候的参数和返回是相同的。 - * - * 需要注意这里又进行了一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - */ - } - - private void OnDisable() - { - QuadtreeObjectEvent.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeDetectorEvent.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeDetectorEvent.cs deleted file mode 100644 index d96a68f..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeDetectorEvent.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3Event -{ - [RequireComponent(typeof(QuadtreeColliderEvent))] - public class QuadtreeDetectorEvent : MonoBehaviour - { - QuadtreeColliderEvent _quadTreeCollider; - - List _colliders = new List(); - - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - /* - * 第三步:订阅事件 - * - * 说起来你可能不信,前面关键字类型互相套的一堆高端操作,最后的订阅竟然是 += - * 真的就是那个 += ,事件里面存放的是在事件发生时需要执行的方法,+= 就是把方法存进去。 - * - * 事件委托的本质是一个半自动的调用!是不是有种又绕回来了的感觉? - * 现在你知道为什么第二步没订阅的事件直接发出会报错了,因为他本来应该调用方法但没有方法可以调用,于是他就受不了了崩溃了报错了。 - */ - - /* - * 还有一种格式是 _quadTreeCollider.collisionEvent += new QuadtreeWithEventDelegateCollisionEventDelegate(OnQuadtreeCollision); - * 这是 C#1.0 的格式,直接 +=方法 的是 C#2.0 的格式,官方说两者效果完全相同,这里就用了简单的2.0格式 - */ - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - /* - * 取消订阅,就是 -= - * - * 【重要】 如果不取消订阅的话C#会将订阅了事件的对象当做还有引用不应该清除,也就是说即使销毁了物体内存也不会释放,从而导致内存泄漏 - */ - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _colliders.Add(collisionGameObject); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in _colliders) - if (collider) //从碰撞发生到绘制Gizmo中间有很短的时间,如果在这期间物体被销毁了,就获取不到Trnanform出bug,因此要先判断 - Gizmos.DrawLine(transform.position, collider.transform.position); - _colliders.Clear(); //绘制完后清空List,等下一次绘制的时候又会重新填上 - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeEvent.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeEvent.cs deleted file mode 100644 index e4d6886..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeEvent.cs +++ /dev/null @@ -1,476 +0,0 @@ -/* - * 跟上一步几乎一样。 - * - * 增加了传入叶子检测碰撞的方法。 - * 把Debug输出改成彩色的了,Unity的Console是支持HTML标签的。 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3Event -{ - public class QuadtreeLeafEvent - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - public QuadtreeLeafEvent(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - public class QuadtreeEvent - { - QuadtreeWithEventDelegateField _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeEvent _root; - QuadtreeEvent _parent; - QuadtreeEvent _upperRightChild; - QuadtreeEvent _lowerRightChild; - QuadtreeEvent _lowerLeftChild; - QuadtreeEvent _upperLeftChild; - - List> _leafs = new List>(); - - int _maxLeafsNumber; - float _minSideLength; - - public QuadtreeEvent(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeEvent root = null, QuadtreeEvent parent = null) - { - _field = new QuadtreeWithEventDelegateField(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - //存入 - public bool SetLeaf(QuadtreeLeafEvent leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(QuadtreeLeafEvent leaf) - { - if (this == _root && !_field.Contains(leaf.position)) - { - Debug.LogError("存入叶子失败,叶子不在四叉树范围内"); - return false; - } - - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius + ""); - //是的!Log输出同样支持HTML标签,颜色、粗体、斜体等都可以做到 - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(QuadtreeLeafEvent leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(QuadtreeLeafEvent leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - Update(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeEvent(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeEvent(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeEvent(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeEvent(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (QuadtreeLeafEvent leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //更新 - public void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能 - } - - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - - void UpdateSelfPosition() - { - List> resetLeafs = new List>(); - - foreach (QuadtreeLeafEvent leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (QuadtreeLeafEvent leaf in resetLeafs) - ResetLeaf(leaf); - } - - void ResetLeaf(QuadtreeLeafEvent leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (QuadtreeLeafEvent leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - - - /* - * 碰撞检测,加了一个传叶子检测碰撞的方法,这样碰撞器就可以自己检测碰撞了。 - * 原理很简单,先检测碰撞,之后把叶子自己剔除出去就行了。 - */ - public T[] CheckCollision(QuadtreeLeafEvent leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (QuadtreeLeafEvent leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeEvent child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) - return child.CheckCollision(checkPoint, checkRadius); - return new T[0]; - } - - //移除 - public bool RemoveLeaf(QuadtreeLeafEvent leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(QuadtreeLeafEvent leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - bool DoRemoveLeafFromSelf(QuadtreeLeafEvent leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius + ""); - return true; - } - return false; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (QuadtreeLeafEvent leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(QuadtreeLeafEvent leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - bool RemoveLeafInTotalTree(QuadtreeLeafEvent leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChildren(leaf); - } - - bool RemoveLeafInTotalTreeFromChildren(QuadtreeLeafEvent leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } - - public class QuadtreeWithEventDelegateField - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public QuadtreeWithEventDelegateField(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } -} \ No newline at end of file diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeObjectEvent.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeObjectEvent.cs deleted file mode 100644 index 6e41ab8..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.0_Event/QuadtreeObjectEvent.cs +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 还是那个四叉树物体,就是加了个更新,还是要设置执行顺序在碰撞器之前。 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3Event -{ - public class QuadtreeObjectEvent : MonoBehaviour - { -#pragma warning disable 0649 - [SerializeField] - float _top; -#pragma warning disable 0649 - [SerializeField] - float _right; -#pragma warning disable 0649 - [SerializeField] - float _bottom; -#pragma warning disable 0649 - [SerializeField] - float _left; -#pragma warning disable 0649 - [SerializeField] - int _maxLeafsNumber; -#pragma warning disable 0649 - [SerializeField] - float _minSideLength; - - static QuadtreeEvent _quadtree; - - private void Awake() - { - _quadtree = new QuadtreeEvent(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - public static bool SetLeaf(QuadtreeLeafEvent leaf) - { - return _quadtree.SetLeaf(leaf); - } - - /* - * 每帧更新一次四叉树 - */ - private void Update() - { - _quadtree.Update(); - } - - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _quadtree.CheckCollision(checkPoint, checkRadius); - } - - public static GameObject[] CheckCollision(QuadtreeLeafEvent leaf) - { - return _quadtree.CheckCollision(leaf); - } - - public static bool RemoveLeaf(QuadtreeLeafEvent leaf) - { - return _quadtree.RemoveLeaf(leaf); - } - - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/Example Scene.unity deleted file mode 100644 index 670fa73..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/Example Scene.unity +++ /dev/null @@ -1,1653 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &28088249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 28088250} - - component: {fileID: 28088251} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &28088250 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 22, y: 354, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &28088251 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &166172533 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 166172534} - - component: {fileID: 166172536} - - component: {fileID: 166172535} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &166172534 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 502, y: 1100, 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!114 &166172535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 86e75ef2c24296940bea48569f563b9a, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &166172536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 1 ---- !u!1 &225063062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 225063063} - - component: {fileID: 225063064} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &225063063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 137, y: 1622, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &225063064 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &267807784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 267807785} - - component: {fileID: 267807786} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &267807785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 292, y: 1892, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &267807786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &277191813 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 277191815} - - component: {fileID: 277191814} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &277191814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!4 &277191815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - 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: 475800166} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &475800165 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 475800166} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &475800166 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475800165} - 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: - - {fileID: 277191815} - - {fileID: 1224400594} - - {fileID: 1588951571} - - {fileID: 1105880774} - - {fileID: 2101465706} - - {fileID: 1168797284} - - {fileID: 845522111} - - {fileID: 267807785} - - {fileID: 1978251081} - - {fileID: 702274662} - - {fileID: 760352672} - - {fileID: 1210468478} - - {fileID: 225063063} - - {fileID: 747963148} - - {fileID: 28088250} - - {fileID: 588042407} - - {fileID: 1809400056} - - {fileID: 743454856} - - {fileID: 2068523312} - - {fileID: 782024763} - - {fileID: 1150319562} - - {fileID: 823974404} - - {fileID: 1752678073} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &588042406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 588042407} - - component: {fileID: 588042408} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &588042407 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 332, y: 21, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &588042408 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &702274661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 702274662} - - component: {fileID: 702274663} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &702274662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 835, y: 350, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &702274663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &743454855 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 743454856} - - component: {fileID: 743454857} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &743454856 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 551, y: 1663, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &743454857 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &747963147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747963148} - - component: {fileID: 747963149} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &747963148 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 766, y: 1814, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &747963149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &760352671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 760352672} - - component: {fileID: 760352673} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &760352672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1027, y: 628, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &760352673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &782024762 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 782024763} - - component: {fileID: 782024764} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &782024763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 774, y: 765, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &782024764 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &823974403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 823974404} - - component: {fileID: 823974405} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &823974404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 432, y: 1312, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &823974405 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &845522110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 845522111} - - component: {fileID: 845522112} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &845522111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 607, y: 35, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &845522112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1104066892 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1104066895} - - component: {fileID: 1104066894} - - component: {fileID: 1104066893} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1104066893 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104066892} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1104066894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104066892} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1104066895 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1104066892} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1105880773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1105880774} - - component: {fileID: 1105880775} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1105880774 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1105880775 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1150319561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1150319562} - - component: {fileID: 1150319563} - m_Layer: 0 - m_Name: Collider (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1150319562 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 391, y: 874, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1150319563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1168797283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1168797284} - - component: {fileID: 1168797285} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1168797284 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 32, y: 792, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1168797285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1210468477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1210468478} - - component: {fileID: 1210468479} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1210468478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 493, y: 322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1210468479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &1224400593 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1224400594} - - component: {fileID: 1224400595} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1224400594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1224400595 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1243215199 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1243215203} - - component: {fileID: 1243215202} - - component: {fileID: 1243215201} - - component: {fileID: 1243215200} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1243215200 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!124 &1243215201 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!20 &1243215202 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.75, g: 1, b: 0.9535541, 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: -1 - 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 &1243215203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1588951570 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1588951571} - - component: {fileID: 1588951572} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1588951571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1588951572 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1670821779 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1670821780} - - component: {fileID: 1670821782} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1670821780 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1670821782 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 75f15a76755c05741976095cba83edaa, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!1 &1716667026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1716667027} - - component: {fileID: 1716667029} - - component: {fileID: 1716667028} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1716667027 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716667026} - 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: 2093856332} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1716667028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716667026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u78B0\u649E\u5668\u548C\u8C03\u6574\u534A\u5F84\u89C2\u770B\u6548\u679C\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &1716667029 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1716667026} - m_CullTransparentMesh: 0 ---- !u!1 &1752678072 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1752678073} - - component: {fileID: 1752678074} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1752678073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1043, y: 1549, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1752678074 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1809400055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809400056} - - component: {fileID: 1809400057} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1809400056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 245, y: 555, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1809400057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1978251080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1978251081} - - component: {fileID: 1978251082} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1978251081 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 23, y: 1135, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1978251082 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &2068523311 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2068523312} - - component: {fileID: 2068523313} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2068523312 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1048, y: 1002, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2068523313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 200 - _checkCollision: 0 ---- !u!1 &2093856328 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2093856332} - - component: {fileID: 2093856331} - - component: {fileID: 2093856330} - - component: {fileID: 2093856329} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2093856329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093856328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &2093856330 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093856328} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &2093856331 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093856328} - 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 &2093856332 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2093856328} - 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: 1716667027} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &2101465705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2101465706} - - component: {fileID: 2101465707} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2101465706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 903, y: 1230, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2101465707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 45a5af43cdca07947a3a7d40d5053ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeAction.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeAction.cs deleted file mode 100644 index 0ba2014..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeAction.cs +++ /dev/null @@ -1,464 +0,0 @@ -/* - * 跟上一步完全一样,区别在 Collider 里 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3_1Action -{ - public class QuadtreeLeafAction - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - public QuadtreeLeafAction(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - public class QuadtreeAction - { - QuadtreeFieldAction _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeAction _root; - QuadtreeAction _parent; - QuadtreeAction _upperRightChild; - QuadtreeAction _lowerRightChild; - QuadtreeAction _lowerLeftChild; - QuadtreeAction _upperLeftChild; - - List> _leafs = new List>(); - - int _maxLeafsNumber; - float _minSideLength; - - public QuadtreeAction(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeAction root = null, QuadtreeAction parent = null) - { - _field = new QuadtreeFieldAction(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - //存入 - public bool SetLeaf(QuadtreeLeafAction leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(QuadtreeLeafAction leaf) - { - if (this == _root && !_field.Contains(leaf.position)) - { - Debug.LogError("存入叶子失败,叶子不在四叉树范围内"); - return false; - } - - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius + ""); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(QuadtreeLeafAction leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(QuadtreeLeafAction leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - Update(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeAction(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeAction(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeAction(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeAction(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (QuadtreeLeafAction leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //更新 - public void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能 - } - - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - - void UpdateSelfPosition() - { - List> resetLeafs = new List>(); - - foreach (QuadtreeLeafAction leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (QuadtreeLeafAction leaf in resetLeafs) - ResetLeaf(leaf); - } - void ResetLeaf(QuadtreeLeafAction leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (QuadtreeLeafAction leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - //检测 - public T[] CheckCollision(QuadtreeLeafAction leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (QuadtreeLeafAction leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeAction child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) - return child.CheckCollision(checkPoint, checkRadius); - return new T[0]; - } - - //移除 - public bool RemoveLeaf(QuadtreeLeafAction leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(QuadtreeLeafAction leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - bool DoRemoveLeafFromSelf(QuadtreeLeafAction leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius + ""); - return true; - } - return false; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (QuadtreeLeafAction leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(QuadtreeLeafAction leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - bool RemoveLeafInTotalTree(QuadtreeLeafAction leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChindren(leaf); - } - - private bool RemoveLeafInTotalTreeFromChindren(QuadtreeLeafAction leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } - - public class QuadtreeFieldAction - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public QuadtreeFieldAction(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeColliderAction.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeColliderAction.cs deleted file mode 100644 index f4502bc..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeColliderAction.cs +++ /dev/null @@ -1,120 +0,0 @@ -/* - * 用 Action 代替手写的委托类型 - * - * Action是C#自带的无返回泛型委托,最多支持到16个泛型参数,使用起来是这样的:Action,每个T按顺序代表了一个参数,比如: - * - * Action = delegate void 委托名() - * Action = delegate void 委托名(string) - * Action = delegate void 委托名(string, int) - * Action = delegate void 委托名(int, string) - * - * 使用Action可以省略手写委托类型的步骤 - * - * - * 和 Action 相对的是 Func,Func同样是泛型委托,但他的最后一个泛型参数是返回值,就像这样: - * - * Func = delegate string 委托名() - * Func = delegate string 委托名(string) - * Func = delegate int 委托名(string) - */ - -using System; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3_1Action -{ - public class QuadtreeColliderAction : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeLeafAction _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeLeafAction(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); - QuadtreeObjectAction.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public Action collisionEvent; //在这,用一个GameObject的泛型表示有一个参数是GameObject的委托 - - void DoCheckCollision() - { - if (collisionEvent == null) return; - - GameObject[] colliderGameObjects = QuadtreeObjectAction.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - } - - private void OnDisable() - { - QuadtreeObjectAction.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeDetectorAction.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeDetectorAction.cs deleted file mode 100644 index 1e0af55..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeDetectorAction.cs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 和上一步完全一样,区别在 Collider 里 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3_1Action -{ - [RequireComponent(typeof(QuadtreeColliderAction))] - public class QuadtreeDetectorAction : MonoBehaviour - { - QuadtreeColliderAction _quadTreeCollider; - - List _colliders = new List(); - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - /* - * 第三步:订阅事件 - * - * 说起来你可能不信,前面关键字类型互相套的一堆高端操作,最后的订阅竟然是 += - * 真的就是那个 += ,事件里面存放的是在事件发生时需要执行的方法,+= 就是把方法存进去。 - * - * 事件委托的本质是一个半自动的调用是不是有种又绕回来了的感觉? - * 现在你知道为什么第二步没订阅的事件直接发出会报错了,因为他本来应该调用方法但没有方法可以调用,于是他就受不了了崩溃了报错了。 - */ - - /* - * 还有一种格式是 _quadTreeCollider.collisionEvent += new QuadtreeWithActionCollisionEventDelegate(OnQuadtreeCollision); - * 这是 C#1.0 的格式,直接 +=方法 的是 C#2.0 的格式,官方说两者效果完全相同,这里就用了简单的2.0格式 - */ - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - /* - * 取消订阅,就是 -= - * - * 【重要】 如果不取消订阅的话C#会将订阅了事件的对象当做还有引用不应该清除,也就是说即使销毁了物体内存也不会释放,从而导致内存泄漏 - */ - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _colliders.Add(collisionGameObject); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in _colliders) - if (collider) //从碰撞发生到绘制Gizmo中间有很短的时间,如果在这期间物体被销毁了,就获取不到Trnanform出bug,因此要先判断 - Gizmos.DrawLine(transform.position, collider.transform.position); - _colliders.Clear(); //绘制完后清空List,等下一次绘制的时候又会重新填上 - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeObjectAction.cs b/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeObjectAction.cs deleted file mode 100644 index 95024a2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/3.1_Action/QuadtreeObjectAction.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 和上一步完全一样,区别在 Collider 里 - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step3_1Action -{ - public class QuadtreeObjectAction : MonoBehaviour - { - [SerializeField] - float _top = 0; - [SerializeField] - float _right = 0; - [SerializeField] - float _bottom = 50; - [SerializeField] - float _left = 100; - [SerializeField] - int _maxLeafsNumber = 50; - [SerializeField] - float _minSideLength; - - static QuadtreeAction _quadtree; - - private void Awake() - { - _quadtree = new QuadtreeAction(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - public static bool SetLeaf(QuadtreeLeafAction leaf) - { - return _quadtree.SetLeaf(leaf); - } - - /* - * 每帧更新一次四叉树 - */ - private void Update() - { - _quadtree.Update(); - } - - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _quadtree.CheckCollision(checkPoint, checkRadius); - } - - public static GameObject[] CheckCollision(QuadtreeLeafAction leaf) - { - return _quadtree.CheckCollision(leaf); - } - - public static bool RemoveLeaf(QuadtreeLeafAction leaf) - { - return _quadtree.RemoveLeaf(leaf); - } - - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/Example Scene.unity deleted file mode 100644 index cb29d40..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/Example Scene.unity +++ /dev/null @@ -1,1653 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &28088249 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 28088250} - - component: {fileID: 28088251} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &28088250 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 22, y: 354, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &28088251 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 28088249} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &166172533 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 166172534} - - component: {fileID: 166172536} - - component: {fileID: 166172535} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &166172534 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 457, y: 861, 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!114 &166172535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a64fdcc7adf6af844bc0c5a41366d3d1, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &166172536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 166172533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 1 ---- !u!1 &225063062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 225063063} - - component: {fileID: 225063064} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &225063063 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 137, y: 1622, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &225063064 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 225063062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &267807784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 267807785} - - component: {fileID: 267807786} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &267807785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 292, y: 1892, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &267807786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 267807784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &277191813 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 277191815} - - component: {fileID: 277191814} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &277191814 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!4 &277191815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277191813} - 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: 475800166} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &475800165 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 475800166} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &475800166 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475800165} - 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: - - {fileID: 277191815} - - {fileID: 1224400594} - - {fileID: 1588951571} - - {fileID: 1105880774} - - {fileID: 2101465706} - - {fileID: 1168797284} - - {fileID: 845522111} - - {fileID: 267807785} - - {fileID: 1978251081} - - {fileID: 702274662} - - {fileID: 760352672} - - {fileID: 1210468478} - - {fileID: 225063063} - - {fileID: 747963148} - - {fileID: 28088250} - - {fileID: 588042407} - - {fileID: 1809400056} - - {fileID: 743454856} - - {fileID: 2068523312} - - {fileID: 782024763} - - {fileID: 1150319562} - - {fileID: 823974404} - - {fileID: 1752678073} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &588042406 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 588042407} - - component: {fileID: 588042408} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &588042407 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 332, y: 21, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &588042408 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 588042406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &702274661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 702274662} - - component: {fileID: 702274663} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &702274662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 835, y: 350, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &702274663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702274661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &743454855 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 743454856} - - component: {fileID: 743454857} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &743454856 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 551, y: 1663, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &743454857 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 743454855} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 185 - _checkCollision: 0 ---- !u!1 &747963147 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 747963148} - - component: {fileID: 747963149} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &747963148 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 766, y: 1814, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &747963149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 747963147} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &760352671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 760352672} - - component: {fileID: 760352673} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &760352672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1027, y: 628, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &760352673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760352671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &782024762 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 782024763} - - component: {fileID: 782024764} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &782024763 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 774, y: 765, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &782024764 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 782024762} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &823974403 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 823974404} - - component: {fileID: 823974405} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &823974404 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 432, y: 1312, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &823974405 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 823974403} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &845522110 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 845522111} - - component: {fileID: 845522112} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &845522111 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 607, y: 35, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &845522112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 845522110} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 160 - _checkCollision: 0 ---- !u!1 &1105880773 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1105880774} - - component: {fileID: 1105880775} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1105880774 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1105880775 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105880773} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1150319561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1150319562} - - component: {fileID: 1150319563} - m_Layer: 0 - m_Name: Collider (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1150319562 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 391, y: 874, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1150319563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1150319561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1161240232 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1161240235} - - component: {fileID: 1161240234} - - component: {fileID: 1161240233} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1161240233 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161240232} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1161240234 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161240232} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1161240235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1161240232} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1168797283 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1168797284} - - component: {fileID: 1168797285} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1168797284 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 32, y: 792, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1168797285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1168797283} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1210468477 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1210468478} - - component: {fileID: 1210468479} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1210468478 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 493, y: 322, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1210468479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1210468477} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &1224400593 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1224400594} - - component: {fileID: 1224400595} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1224400594 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1224400595 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1224400593} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1243215199 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1243215203} - - component: {fileID: 1243215202} - - component: {fileID: 1243215201} - - component: {fileID: 1243215200} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1243215200 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!124 &1243215201 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 ---- !u!20 &1243215202 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.8254717, g: 1, b: 0.95407933, 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: -1 - 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 &1243215203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1243215199} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1588951570 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1588951571} - - component: {fileID: 1588951572} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1588951571 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1588951572 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588951570} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1670821779 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1670821780} - - component: {fileID: 1670821781} - m_Layer: 0 - m_Name: QuadtreeObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1670821780 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1670821781 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1670821779} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 28aa770df4d5ed84682f550f5496f68d, type: 3} - m_Name: - m_EditorClassIdentifier: - _top: 1960 - _right: 1080 - _bottom: 0 - _left: 0 - _maxLeafsNumber: 5 - _minSideLength: 10 ---- !u!1 &1752678072 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1752678073} - - component: {fileID: 1752678074} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1752678073 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1043, y: 1549, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1752678074 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1752678072} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1809400055 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1809400056} - - component: {fileID: 1809400057} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1809400056 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 245, y: 555, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1809400057 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1809400055} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 160 - _checkCollision: 0 ---- !u!1 &1904953927 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1904953931} - - component: {fileID: 1904953930} - - component: {fileID: 1904953929} - - component: {fileID: 1904953928} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1904953928 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1904953927} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1904953929 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1904953927} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &1904953930 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1904953927} - 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 &1904953931 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1904953927} - 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: 2138050477} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1978251080 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1978251081} - - component: {fileID: 1978251082} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1978251081 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 23, y: 1135, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1978251082 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1978251080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &2068523311 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2068523312} - - component: {fileID: 2068523313} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2068523312 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1048, y: 1002, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2068523313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2068523311} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &2101465705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2101465706} - - component: {fileID: 2101465707} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2101465706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 903, y: 1230, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 475800166} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2101465707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2101465705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b6f56c4bbfbe6a74da91f17584e8a504, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &2138050476 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2138050477} - - component: {fileID: 2138050479} - - component: {fileID: 2138050478} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2138050477 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2138050476} - 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: 1904953931} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1200, y: 400} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2138050478 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2138050476} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: "\u8FD0\u884C\u540E\u5728Scene\uFF08\u573A\u666F\uFF09\u7A97\u53E3\u4E2D\u89C2\u770B\u6548\u679C\n\u7EA2\u8272\u7684\u8FB9\u6846\u662F\u56DB\u53C9\u6811\u7684\u6709\u6548\u533A\u57DF\n\u84DD\u8272\u7684\u77E9\u5F62\u662F\u56DB\u53C9\u6811\u7684\u53F6\u5B50\u8282\u70B9\u6240\u62E5\u6709\u7684\u533A\u57DF\n\u7EFF\u8272\u5706\u5708\u662F\u88AB\u68C0\u6D4B\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u78B0\u649E\u5668\u548C\u8C03\u6574\u534A\u5F84\u89C2\u770B\u6548\u679C\n\u9EC4\u8272\u7684\u5706\u5708\u662F\u68C0\u6D4B\u78B0\u649E\u7684\u78B0\u649E\u5668\uFF0C\u53EF\u4EE5\u79FB\u52A8\u8FD9\u4E2A\u78B0\u649E\u5668\u89C2\u770B\u6548\u679C\n\u68C0\u6D4B\u78B0\u649E\u5668\u548C\u88AB\u68C0\u6D4B\u78B0\u649E\u5668\u901A\u8FC7\u9EC4\u8272\u7684\u7EBF\u8FDE\u63A5\u65F6\uFF0C\u8868\u793A\u8FD9\u4E24\u4E2A\u78B0\u649E\u5668\u53D1\u751F\u4E86\u78B0\u649E" ---- !u!222 &2138050479 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2138050476} - m_CullTransparentMesh: 0 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeColliderNestedClass.cs b/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeColliderNestedClass.cs deleted file mode 100644 index 64754c9..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeColliderNestedClass.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step4NestedClass -{ - public class QuadtreeColliderNestedClass : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeNestedClass.Leaf _leaf; //因为叶子变成了四叉树的内部类,这里就需要通过 四叉树类.叶子类 来表示叶子类 - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeNestedClass.Leaf(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); - QuadtreeObjectNestedClass.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public Action collisionEvent; - - void DoCheckCollision() - { - if (collisionEvent == null) return; - - GameObject[] colliderGameObjects = QuadtreeObjectNestedClass.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - } - - private void OnDisable() - { - QuadtreeObjectNestedClass.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeDetectorNestedClass.cs b/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeDetectorNestedClass.cs deleted file mode 100644 index 6eb934d..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeDetectorNestedClass.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step4NestedClass -{ - [RequireComponent(typeof(QuadtreeColliderNestedClass))] - public class QuadtreeDetectorNestedClass : MonoBehaviour - { - QuadtreeColliderNestedClass _quadTreeCollider; - - List _colliders = new List(); - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _colliders.Add(collisionGameObject); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in _colliders) - if (collider) //从碰撞发生到绘制Gizmo中间有很短的时间,如果在这期间物体被销毁了,就获取不到Trnanform出bug,因此要先判断 - Gizmos.DrawLine(transform.position, collider.transform.position); - _colliders.Clear(); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeNestedClass.cs b/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeNestedClass.cs deleted file mode 100644 index c532b5d..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeNestedClass.cs +++ /dev/null @@ -1,469 +0,0 @@ -/* - * 内部类,把一个类写在另一个类里面就是内部类 - * - * 访问内部类必须先通过外部类,如果内部类是隐藏的则只有外部类自己可以访问到 - * - * 尽管这是个非常有用的功能,但在这里这么写意义不是很大,主要是想少在命名空间里加几个名 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step4NestedClass -{ - public class QuadtreeNestedClass - { - public class Leaf - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - - public Leaf(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - class Field - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public Field(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } - - Field _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeNestedClass _root; - QuadtreeNestedClass _parent; - QuadtreeNestedClass _upperRightChild; - QuadtreeNestedClass _lowerRightChild; - QuadtreeNestedClass _lowerLeftChild; - QuadtreeNestedClass _upperLeftChild; - - List _leafs = new List(); - - int _maxLeafsNumber; - float _minSideLength; - - public QuadtreeNestedClass(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeNestedClass root = null, QuadtreeNestedClass parent = null) - { - _field = new Field(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - //存入 - public bool SetLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(Leaf leaf) - { - if (this == _root && !_field.Contains(leaf.position)) - { - Debug.LogError("存入叶子失败,叶子不在四叉树范围内"); - return false; - } - - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius + ""); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(Leaf leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - Update(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeNestedClass(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeNestedClass(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeNestedClass(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeNestedClass(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (Leaf leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //更新 - public void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能 - } - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - void UpdateSelfPosition() - { - List resetLeafs = new List(); - - foreach (Leaf leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (Leaf leaf in resetLeafs) - ResetLeaf(leaf); - } - void ResetLeaf(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - //检测 - public T[] CheckCollision(Leaf leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - { - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (Leaf leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeNestedClass child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.CheckCollision(checkPoint, checkRadius); - return new T[0]; - } - - //移除 - public bool RemoveLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(Leaf leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - bool DoRemoveLeafFromSelf(Leaf leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius + ""); - return true; - } - return false; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - bool RemoveLeafInTotalTree(Leaf leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChindren(leaf); - } - - bool RemoveLeafInTotalTreeFromChindren(Leaf leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeObjectNestedClass.cs b/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeObjectNestedClass.cs deleted file mode 100644 index 8e0d6e1..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/4_NestedClass/QuadtreeObjectNestedClass.cs +++ /dev/null @@ -1,82 +0,0 @@ -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step4NestedClass -{ - public class QuadtreeObjectNestedClass : MonoBehaviour - { - [SerializeField] - float _top = 0; - [SerializeField] - float _right = 0; - [SerializeField] - float _bottom = 50; - [SerializeField] - float _left = 100; - [SerializeField] - int _maxLeafsNumber = 50; - [SerializeField] - float _minSideLength; - - static QuadtreeNestedClass _quadtree; - - private void Awake() - { - _quadtree = new QuadtreeNestedClass(_top, _right, _bottom, _left, _maxLeafsNumber, _minSideLength); - } - - public static bool SetLeaf(QuadtreeNestedClass.Leaf leaf) - { - return _quadtree.SetLeaf(leaf); - } - - /* - * 每帧更新一次四叉树 - */ - private void Update() - { - _quadtree.Update(); - } - - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _quadtree.CheckCollision(checkPoint, checkRadius); - } - - public static GameObject[] CheckCollision(QuadtreeNestedClass.Leaf leaf) - { - return _quadtree.CheckCollision(leaf); - } - - public static bool RemoveLeaf(QuadtreeNestedClass.Leaf leaf) - { - return _quadtree.RemoveLeaf(leaf); - } - - private void OnDrawGizmos() - { - Vector3 upperRight = new Vector3(_right, _top, transform.position.z); - Vector3 lowerRight = new Vector3(_right, _bottom, transform.position.z); - Vector3 lowerLeft = new Vector3(_left, _bottom, transform.position.z); - Vector3 upperLeft = new Vector3(_left, _top, transform.position.z); - - Gizmos.color = Color.red * 0.8f; - - Gizmos.DrawLine(upperRight, lowerRight); - Gizmos.DrawLine(lowerRight, lowerLeft); - Gizmos.DrawLine(lowerLeft, upperLeft); - Gizmos.DrawLine(upperLeft, upperRight); - } - - private void OnValidate() - { - if (_top < _bottom) - _top = _bottom; - if (_right < _left) - _right = _left; - if (_maxLeafsNumber < 1) - _maxLeafsNumber = 1; - if (_minSideLength < 0.001f) - _minSideLength = 0.001f; - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Editor/QuadtreeWithSingletonSettingWindow.cs b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Editor/QuadtreeWithSingletonSettingWindow.cs deleted file mode 100644 index b197072..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Editor/QuadtreeWithSingletonSettingWindow.cs +++ /dev/null @@ -1,151 +0,0 @@ -/* - * QuadtreeWithSingleton的设置文件的编辑窗口 - */ - -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEngine; -using System.Linq; - -namespace MtC.Tools.Quadtree.Example.Step5Singleton -{ - public class QuadtreeWithSingletonSettingWindow : EditorWindow //EditorWindow:继承这个类的类可以创建窗口,就像 Inspector、Project 那样 - { - const string settingObjectName = "QuadtreeWithSingletonSetting"; - QuadtreeSettingSingleton setting - { - get - { - if (_setting != null) - return _setting; - - _setting = GetSettingObject(settingObjectName); - return _setting; - } - //也是单例的 - } - QuadtreeSettingSingleton _setting; - - - [MenuItem("Tools/Quadtree/Step/5-QuadtreeWithSingletonSettingWindow", priority = 5)] //MenuItem:在菜单栏创建一个选项,点击后执行这个方法 - static void GetWindow() - { - QuadtreeWithSingletonSettingWindow window = GetWindow(); - window.minSize = new Vector2(Screen.width / 3.7f, Screen.width / 12); - window.Show(); - } - - - - private void OnGUI() - { - DrawProposal(); - GUILayout.Space(5); - DrawSettingEditor(); - } - - void DrawProposal() - { - EditorGUILayout.LabelField("本设置使用了Resources文件夹,对优化有影响,建议在发布前改用其他方式设置(如硬编码或数据类)"); - } - - void DrawSettingEditor() - { - Editor.CreateEditor(setting).DrawDefaultInspector(); //用 CreatEditor 创建设置文件的编辑器,之后用这个编辑器的 DrawDefauleInspector 绘制出默认窗口 - } - - - - //获取设置文件 - QuadtreeSettingSingleton GetSettingObject(string settingObjectName) - { - QuadtreeSettingSingleton settingObject = LoadSetting(settingObjectName); - if (settingObject != null) - return settingObject; - return CreatSettingObject(settingObjectName); - } - - static QuadtreeSettingSingleton LoadSetting(string settingObjectName) - { - return Resources.Load(settingObjectName); //Resources.Load:传入 相对于Resources文件夹 的路径,加载出资源文件,资源文件必须在名字叫“Resources”的文件夹下 - /* - * Resources:Unity的一种在运行时加载资源的方式,先把资源文件放到名字叫“Resources”的文件夹下,之后通过 Resources.Load 加载出来 - * - * Unity官方对Resources给出的最佳使用方式是:别用 - * - * Resources里的文件不会和普通文件夹里的文件一起打包压缩后放到游戏文件夹里,而是根据不同平台存在不同的位置,其本身对优化也会造成影响,官方建议在最终发布之前用其他方式替换掉Resources - * - * 详情请看: - * https://docs.unity3d.com/ScriptReference/Resources.html - * https://unity3d.com/cn/learn/tutorials/topics/best-practices/resources-folder - */ - } - - QuadtreeSettingSingleton CreatSettingObject(string settingObjectName) - { - string settingScriptFilePath = GetSettingScriptFilePath(); - - if (!AssetDatabase.IsValidFolder(settingScriptFilePath + "Resources")) //AssetDatabase.IsValidFolder:检测有没有这个路径表示的文件夹 - CreatResourcesFolder(settingScriptFilePath); - - QuadtreeSettingSingleton settingObject = CreateInstance(); - AssetDatabase.CreateAsset(settingObject, settingScriptFilePath + "Resources/" + settingObjectName + ".asset"); //AssetDatabase.CreateAsset:创建资源文件 - - return settingObject; - } - string GetSettingScriptFilePath() - { - QuadtreeSettingSingleton settingInstance = CreateInstance(); //CreateInstance:创建一个继承了ScriptableObject的类的实例 - MonoScript settingScriptFile = MonoScript.FromScriptableObject(settingInstance); //MonoScript.FromScriptableObject:根据ScriptableObject的实例获取到脚本文件 - string fullPath = AssetDatabase.GetAssetPath(settingScriptFile); //AssetDatabase.GetAssetPath:根据文件获取路径,包含了文件名 - string folderPath = fullPath.Substring(0, fullPath.LastIndexOf("/") + 1); //截取这个路径到最后一个斜线,这就是设置文件脚本所在的文件夹的路径 - return folderPath; - } - void CreatResourcesFolder(string parentFolderPath) - { - if (parentFolderPath.Last() == '/') //Last在 System.Linq 里面的 - parentFolderPath = parentFolderPath.Substring(0, parentFolderPath.Length - 1); //后面一步需要的是到文件夹名字为止,不需要最后斜线的路径,所以如果传入的路径最后一个字符是斜线则截取掉 - - AssetDatabase.CreateFolder(parentFolderPath, "Resources"); //AssetDatabase.CreateFolder:在指定路径下创建一个文件夹,这个路径是到文件夹名字为止的 - } - - - - //绘制范围 - private void OnEnable() - { - SceneView.duringSceneGui += OnSceneGUI; - } - - private void OnDisable() - { - SceneView.duringSceneGui -= OnSceneGUI; - } - - void OnSceneGUI(SceneView sceneView) - { - //Handles:和Gizmos很像的一个类,用起来也很像Gizimos,但Handles不在 OnDrawGizmos 和 OnDrawGizmosSelected 里也可以使用 - Handles.color = Color.red * 0.9f; - - Vector3 upperRight = new Vector3(setting.right, setting.top, 0); - Vector3 lowerRight = new Vector3(setting.right, setting.bottom, 0); - Vector3 lowerLeft = new Vector3(setting.left, setting.bottom, 0); - Vector3 upperLeft = new Vector3(setting.left, setting.top, 0); - - Handles.DrawLine(upperRight, lowerRight); - Handles.DrawLine(lowerRight, lowerLeft); - Handles.DrawLine(lowerLeft, upperLeft); - Handles.DrawLine(upperLeft, upperRight); - } - - - - //发布时提示 - [PostProcessBuild(0)] - static void OnBuild(BuildTarget target, string path) - { - if (LoadSetting(settingObjectName) != null) - Debug.LogWarning("检测到 Resources 文件夹中有四叉树设置文件,为游戏优化着想,建议改用其他方式(如硬编码)进行设置,之后移除设置文件、设置脚本文件和设置编辑器脚本文件"); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Example Scene.unity deleted file mode 100644 index f32afc2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Example Scene.unity +++ /dev/null @@ -1,1641 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.37311992, g: 0.38074034, b: 0.35872713, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &14024886 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 14024887} - - component: {fileID: 14024888} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &14024887 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 14024886} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 767, y: 1917, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &14024888 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 14024886} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 120 - _checkCollision: 0 ---- !u!1 &95927789 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 95927790} - - component: {fileID: 95927791} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &95927790 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 95927789} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 47, y: 1430, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &95927791 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 95927789} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 140 - _checkCollision: 0 ---- !u!1 &113221139 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 113221140} - - component: {fileID: 113221141} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &113221140 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113221139} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 406, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &113221141 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113221139} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &116296843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 116296847} - - component: {fileID: 116296846} - - component: {fileID: 116296845} - - component: {fileID: 116296844} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &116296844 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_Enabled: 1 ---- !u!124 &116296845 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_Enabled: 1 ---- !u!20 &116296846 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.7971698, g: 1, b: 0.9807908, 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: -1 - 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 &116296847 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &185530021 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 185530022} - - component: {fileID: 185530023} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &185530022 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 185530021} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 512, y: 1684, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &185530023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 185530021} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 180 - _checkCollision: 0 ---- !u!1 &203155978 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 203155979} - - component: {fileID: 203155980} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &203155979 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 203155978} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &203155980 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 203155978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &284753672 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 284753673} - - component: {fileID: 284753674} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &284753673 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 284753672} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 707, y: 30, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &284753674 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 284753672} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &357788802 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 357788803} - - component: {fileID: 357788804} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &357788803 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 357788802} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 913, y: 642, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &357788804 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 357788802} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 160 - _checkCollision: 0 ---- !u!1 &640866250 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 640866251} - - component: {fileID: 640866252} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &640866251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640866250} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 185, y: 1737, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &640866252 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640866250} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 140 - _checkCollision: 0 ---- !u!1 &729117341 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 729117345} - - component: {fileID: 729117344} - - component: {fileID: 729117343} - - component: {fileID: 729117342} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &729117342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &729117343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &729117344 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - 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 &729117345 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - 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: 1895923061} - 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!1 &795743352 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 795743353} - - component: {fileID: 795743354} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &795743353 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 795743352} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 443, y: 1277, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &795743354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 795743352} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &810179960 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 810179961} - - component: {fileID: 810179962} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &810179961 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810179960} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 972, y: 298, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &810179962 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 810179960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 160 - _checkCollision: 0 ---- !u!1 &812256225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 812256226} - - component: {fileID: 812256227} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &812256226 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812256225} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1960, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &812256227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 812256225} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 120 - _checkCollision: 0 ---- !u!1 &864415561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 864415564} - - component: {fileID: 864415563} - - component: {fileID: 864415562} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &864415562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &864415563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 5 ---- !u!4 &864415564 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - 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 &1148321769 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1148321770} - - component: {fileID: 1148321771} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1148321770 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1148321769} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 957, y: 1097, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1148321771 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1148321769} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 140 - _checkCollision: 0 ---- !u!1 &1209311853 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1209311854} - - component: {fileID: 1209311855} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1209311854 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1209311853} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 51, y: 950, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1209311855 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1209311853} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 120 - _checkCollision: 0 ---- !u!1 &1245259086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1245259088} - - component: {fileID: 1245259087} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1245259087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1245259086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!4 &1245259088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1245259086} - 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: 1792171288} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1247561551 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1247561552} - - component: {fileID: 1247561554} - - component: {fileID: 1247561553} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1247561552 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - 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: 1895923061} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1247561553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 28 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Reload Scene ---- !u!222 &1247561554 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - m_CullTransparentMesh: 0 ---- !u!1 &1610829377 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1610829378} - - component: {fileID: 1610829379} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1610829378 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610829377} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 935, y: 1574, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1610829379 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1610829377} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 120 - _checkCollision: 0 ---- !u!1 &1792171287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1792171288} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1792171288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1792171287} - 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: - - {fileID: 1245259088} - - {fileID: 203155979} - - {fileID: 2066691251} - - {fileID: 812256226} - - {fileID: 14024887} - - {fileID: 2089908832} - - {fileID: 1148321770} - - {fileID: 640866251} - - {fileID: 185530022} - - {fileID: 95927790} - - {fileID: 810179961} - - {fileID: 1876449584} - - {fileID: 357788803} - - {fileID: 2017046051} - - {fileID: 795743353} - - {fileID: 1610829378} - - {fileID: 1209311854} - - {fileID: 284753673} - - {fileID: 1875119326} - - {fileID: 113221140} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1843538874 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1843538876} - - component: {fileID: 1843538875} - m_Layer: 0 - m_Name: Reload Scene - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1843538875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843538874} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3a09626aadb137f4a90619527f8dfbeb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1843538876 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843538874} - 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: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1869146852 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1869146854} - - component: {fileID: 1869146853} - - component: {fileID: 1869146855} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1869146853 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 1 ---- !u!4 &1869146854 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 540, y: 980, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1869146855 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 43a84e629436f824b872ec4545c32e6c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &1875119325 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1875119326} - - component: {fileID: 1875119327} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1875119326 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1875119325} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 517, y: 850, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1875119327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1875119325} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1876449583 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1876449584} - - component: {fileID: 1876449585} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1876449584 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876449583} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 316, y: 23, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1876449585 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1876449583} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 160 - _checkCollision: 0 ---- !u!1 &1895923060 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1895923061} - - component: {fileID: 1895923064} - - component: {fileID: 1895923063} - - component: {fileID: 1895923062} - m_Layer: 5 - m_Name: Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1895923061 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - 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: - - {fileID: 1247561552} - m_Father: {fileID: 729117345} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 220, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1895923062 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1895923063} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1843538875} - m_MethodName: Reload - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &1895923063 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 ---- !u!222 &1895923064 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_CullTransparentMesh: 0 ---- !u!1 &2017046050 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2017046051} - - component: {fileID: 2017046052} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2017046051 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017046050} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 411, y: 404, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2017046052 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017046050} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 140 - _checkCollision: 0 ---- !u!1 &2066691250 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2066691251} - - component: {fileID: 2066691252} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2066691251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2066691250} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1080, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2066691252 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2066691250} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &2089908831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2089908832} - - component: {fileID: 2089908833} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2089908832 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2089908831} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 32, y: 325, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2089908833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2089908831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5603e7855cd0b4f8bf567a36857ec5, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 120 - _checkCollision: 0 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeColliderSingleton.cs b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeColliderSingleton.cs deleted file mode 100644 index 4835822..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeColliderSingleton.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step5Singleton -{ - public class QuadtreeColliderSingleton : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeDataSingleton.Leaf _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeDataSingleton.Leaf(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); - QuadtreeSingleton.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public Action collisionEvent; //在这,用一个GameObject的泛型表示有一个参数是GameObject的委托 - - void DoCheckCollision() - { - if (collisionEvent == null) return; - - GameObject[] colliderGameObjects = QuadtreeSingleton.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - } - - private void OnDisable() - { - QuadtreeSingleton.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeDetectorSingleton.cs b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeDetectorSingleton.cs deleted file mode 100644 index 6ac277d..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeDetectorSingleton.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step5Singleton -{ - [RequireComponent(typeof(QuadtreeColliderSingleton))] - public class QuadtreeDetectorSingleton : MonoBehaviour - { - QuadtreeColliderSingleton _quadTreeCollider; - - List _colliders = new List(); - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _colliders.Add(collisionGameObject); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in _colliders) - if (collider) //从碰撞发生到绘制Gizmo中间有很短的时间,如果在这期间物体被销毁了,就获取不到Trnanform出bug,因此要先判断 - Gizmos.DrawLine(transform.position, collider.transform.position); - _colliders.Clear(); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSettingSingleton.cs b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSettingSingleton.cs deleted file mode 100644 index 0aacf7d..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSettingSingleton.cs +++ /dev/null @@ -1,25 +0,0 @@ -/* - * QuadtreeWithSingleton的设置文件的类 - * - * ScriptableObject:简单地说是一个可以创建资源文件实例的类,继承自这个类的类的对象可以作为资源文件保存到本地,资源文件独立于场景之外,与脚本、模型、材质等同属于资源。 - * - * 具体请参考: - * https://docs.unity3d.com/Manual/class-ScriptableObject.html - * https://unity3d.com/cn/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects - * https://docs.unity3d.com/ScriptReference/ScriptableObject.html - */ - -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step5Singleton -{ - public class QuadtreeSettingSingleton : ScriptableObject - { - public float top = 1960; - public float right = 1080; - public float bottom = 0; - public float left = 0; - public int maxLeafsNumber = 5; - public float minSideLength = 10; - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSingleton.cs b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSingleton.cs deleted file mode 100644 index 5699ac3..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/QuadtreeSingleton.cs +++ /dev/null @@ -1,534 +0,0 @@ -/* - * 这一步使用方式有很大的变化,不是先设置执行顺序后在场景里创建四叉树物体! - * - * 新的使用方式:在 Tools -> QuadtreeWithSingletonSettingWindow 里设置四叉树的属性。之后就可以随便用了! - * - * 第五步:使用单例自动创建四叉树物体,再也不用手动创建四叉树物体,也不需要手动设置脚本执行顺序 - */ -/* - * 四叉树物体类改名为四叉树类,而原本的四叉树类改名为四叉树数据类 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step5Singleton -{ - public class QuadtreeSingleton : MonoBehaviour - { - static QuadtreeSingleton quadtreeObject - { - get - { - if (_quadtreeObject != null) - return _quadtreeObject; - - _quadtreeObject = new GameObject("Quadtree").AddComponent(); //为了通过 Update 每帧调用四叉树的更新,必须要在一个场景中的物体上挂载一个组件,因此创建一个物体之后挂载上四叉树脚本组件。 - return _quadtreeObject; - - //经典的单例实现方式,如果已经有实例则返回,如果没有实例则创建保存后返回。 - } - } - static QuadtreeSingleton _quadtreeObject; - - QuadtreeDataSingleton _quadtree; - - //初始化,在作为组件被挂载时读取设置创建四叉树 - private void Awake() - { - QuadtreeSettingSingleton setting = Resources.Load("QuadtreeWithSingletonSetting"); - //根据官方所说,Resources的最佳使用方法就是【别用它】,我个人也不喜欢这种把设置数据和游戏本体分到天涯海角的方法,所以我建议在设置完成后改成硬编码 - _quadtree = new QuadtreeDataSingleton(setting.top, setting.right, setting.bottom, setting.left, setting.maxLeafsNumber, setting.minSideLength); - } - - //存入 - public static bool SetLeaf(QuadtreeDataSingleton.Leaf leaf) - { - return quadtreeObject._quadtree.SetLeaf(leaf); //存入时通过接口获取四叉树物体,这样能保证四叉树一直存在,不会发生存入空树 - } - - //更新 - private void Update() - { - _quadtree.Update(); //Update只由挂载的脚本自动调用,脚本挂载后自动创建数据四叉树,所以这里直接用 _quadtree - } - - //检测 - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (_quadtreeObject != null) //这里先检测四叉树物体是否存在,如果不存在的话肯定检测不到碰撞,直接返回空数组就行 - return quadtreeObject._quadtree.CheckCollision(checkPoint, checkRadius); - return new GameObject[0]; - } - - public static GameObject[] CheckCollision(QuadtreeDataSingleton.Leaf leaf) - { - if (_quadtreeObject != null) - return quadtreeObject._quadtree.CheckCollision(leaf); - return new GameObject[0]; - } - - //移除 - public static bool RemoveLeaf(QuadtreeDataSingleton.Leaf leaf) - { - if (_quadtreeObject != null) //移除也是先检测四叉树物体是否存在,不存在的话肯定移除不了,返回 false - return _quadtreeObject._quadtree.RemoveLeaf(leaf); - return false; - } - } - - public class QuadtreeDataSingleton - { - public class Leaf - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - public Leaf(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - class Field - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public Field(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } - - Field _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeDataSingleton _root; - QuadtreeDataSingleton _parent; - QuadtreeDataSingleton _upperRightChild; - QuadtreeDataSingleton _lowerRightChild; - QuadtreeDataSingleton _lowerLeftChild; - QuadtreeDataSingleton _upperLeftChild; - - List _leafs = new List(); - - int _maxLeafsNumber; - float _minSideLength; - - public QuadtreeDataSingleton(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeDataSingleton root = null, QuadtreeDataSingleton parent = null) - { - _field = new Field(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - //存入 - public bool SetLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(Leaf leaf) - { - if (this == _root && !_field.Contains(leaf.position)) - { - Debug.LogError("存入叶子失败,叶子不在四叉树范围内"); - return false; - } - - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius + ""); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(Leaf leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.SetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.SetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.SetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.SetLeaf(leaf); - - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); //Debug.LogError:在Console面板输出Error,就是红色那种消息 - return false; - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - Update(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeDataSingleton(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeDataSingleton(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeDataSingleton(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeDataSingleton(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (Leaf leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //更新 - public void Update() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能 - } - - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - - void UpdateSelfPosition() - { - List resetLeafs = new List(); - - foreach (Leaf leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (Leaf leaf in resetLeafs) - ResetLeaf(leaf); - } - - void ResetLeaf(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - //检测 - public T[] CheckCollision(Leaf leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (Leaf leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - private T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeDataSingleton child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.CheckCollision(checkPoint, checkRadius); - return new T[] { }; - } - - //移除 - public bool RemoveLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - - bool RemoveLeafFromSelf(Leaf leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - private bool DoRemoveLeafFromSelf(Leaf leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius + ""); - return true; - } - return false; - } - - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.RemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.RemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.RemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.RemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - bool RemoveLeafInTotalTree(Leaf leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChildren(leaf); - } - - bool RemoveLeafInTotalTreeFromChildren(Leaf leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Resources/QuadtreeWithSingletonSetting.asset b/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Resources/QuadtreeWithSingletonSetting.asset deleted file mode 100644 index ef677c4..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/5_Singleton/Resources/QuadtreeWithSingletonSetting.asset +++ /dev/null @@ -1,20 +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: bd36351b61e6fbe499bdbafd88f1076b, type: 3} - m_Name: QuadtreeWithSingletonSetting - m_EditorClassIdentifier: - top: 1960 - right: 1080 - bottom: 0 - left: 0 - maxLeafsNumber: 5 - minSideLength: 10 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Editor/QuadtreeCanUpwardsSettingEditor.cs b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Editor/QuadtreeCanUpwardsSettingEditor.cs deleted file mode 100644 index c07b5a2..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Editor/QuadtreeCanUpwardsSettingEditor.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Linq; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step6Upwards -{ - public class QuadtreeSettingWindowUpwards : EditorWindow - { - const string settingObjectName = "QuadtreeCanUpwardsSetting"; - - QuadtreeSettingUpwards setting - { - get - { - if (_setting != null) - return _setting; - - _setting = GetSettingObject(settingObjectName); - return _setting; - } - } - QuadtreeSettingUpwards _setting; - - [MenuItem("Tools/Quadtree/Step/6-QuadtreeCanUpwardsSettingWindow", priority = 6)] - static void GetWindow() - { - QuadtreeSettingWindowUpwards window = (QuadtreeSettingWindowUpwards)GetWindow(typeof(QuadtreeSettingWindowUpwards)); - window.minSize = new Vector2(Screen.width / 3.7f, Screen.width / 12); - window.Show(); - } - - private void OnGUI() - { - DrawProposal(); - GUILayout.Space(5); - DrawSettingEditor(); - } - - void DrawProposal() - { - EditorGUILayout.LabelField("本设置使用了Resources文件夹,对优化有影响,建议在发布前改用其他方式设置(如硬编码或数据类)"); - } - - void DrawSettingEditor() - { - Editor.CreateEditor(setting).DrawDefaultInspector(); - } - - //获取设置文件 - QuadtreeSettingUpwards GetSettingObject(string settingObjectName) - { - QuadtreeSettingUpwards settingObject = LoadSetting(settingObjectName); - if (settingObject != null) - return settingObject; - return CreatSettingObject(settingObjectName); - } - - static QuadtreeSettingUpwards LoadSetting(string settingObjectName) - { - return Resources.Load(settingObjectName); - } - - QuadtreeSettingUpwards CreatSettingObject(string settingObjectName) - { - string settingScriptFilePath = GetSettingScriptFilePath(); - - if (!AssetDatabase.IsValidFolder(settingScriptFilePath + "Resources")) - CreatResourcesFolder(settingScriptFilePath); - - QuadtreeSettingUpwards settingObject = CreateInstance(); - AssetDatabase.CreateAsset(settingObject, settingScriptFilePath + "Resources/" + settingObjectName + ".asset"); - - return settingObject; - } - - string GetSettingScriptFilePath() - { - string fullPath = AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(CreateInstance())); - return fullPath.Substring(0, fullPath.LastIndexOf("/") + 1); - } - - void CreatResourcesFolder(string parentFolderPath) - { - if (parentFolderPath.Last() == '/') - parentFolderPath = parentFolderPath.Substring(0, parentFolderPath.Length - 1); - AssetDatabase.CreateFolder(parentFolderPath, "Resources"); - } - - //绘制范围 - private void OnEnable() - { - SceneView.duringSceneGui += OnSceneGUI; - } - - private void OnDisable() - { - SceneView.duringSceneGui -= OnSceneGUI; - } - - void OnSceneGUI(SceneView sceneView) - { - Handles.color = Color.red * 0.9f; - - Vector3 upperRight = new Vector3(setting.startRight, setting.startTop, 0); - Vector3 lowerRight = new Vector3(setting.startRight, setting.startBottom, 0); - Vector3 lowerLeft = new Vector3(setting.startLeft, setting.startBottom, 0); - Vector3 upperLeft = new Vector3(setting.startLeft, setting.startTop, 0); - - Handles.DrawLine(upperRight, lowerRight); - Handles.DrawLine(lowerRight, lowerLeft); - Handles.DrawLine(lowerLeft, upperLeft); - Handles.DrawLine(upperLeft, upperRight); - } - - //发布时提示 - [PostProcessBuild(0)] - static void OnBuild(BuildTarget target, string path) - { - if (LoadSetting(settingObjectName) != null) - Debug.LogWarning("检测到 Resources 文件夹中有四叉树设置文件,为游戏优化着想,建议改用其他方式(如硬编码)进行设置,之后移除设置文件、设置脚本文件和设置编辑器脚本文件"); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Example Scene.unity b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Example Scene.unity deleted file mode 100644 index d1b7336..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Example Scene.unity +++ /dev/null @@ -1,2882 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481694, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &5130491 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5130492} - - component: {fileID: 5130493} - m_Layer: 0 - m_Name: Collider (23) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5130492 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5130491} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -697, y: 2853, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 23 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &5130493 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5130491} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 ---- !u!1 &56711979 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 56711980} - - component: {fileID: 56711981} - m_Layer: 0 - m_Name: Collider (10) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &56711980 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 56711979} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -20, y: 1898, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &56711981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 56711979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &69041000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 69041001} - - component: {fileID: 69041002} - m_Layer: 0 - m_Name: Collider (33) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &69041001 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 69041000} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1634, y: 3172, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 33 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &69041002 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 69041000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &77944949 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 77944950} - - component: {fileID: 77944951} - m_Layer: 0 - m_Name: Collider (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &77944950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 77944949} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1324, y: 2158, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &77944951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 77944949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &94008176 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 94008177} - - component: {fileID: 94008178} - m_Layer: 0 - m_Name: Collider (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &94008177 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 94008176} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1445, y: 2180, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &94008178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 94008176} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &116296843 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 116296847} - - component: {fileID: 116296846} - - component: {fileID: 116296845} - - component: {fileID: 116296844} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &116296844 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_Enabled: 1 ---- !u!124 &116296845 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_Enabled: 1 ---- !u!20 &116296846 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - 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: -1 - 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 &116296847 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 116296843} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &160389333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 160389334} - - component: {fileID: 160389335} - m_Layer: 0 - m_Name: Collider (24) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &160389334 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 160389333} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -958, y: 1143, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 24 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &160389335 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 160389333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 ---- !u!1 &227861231 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 227861232} - - component: {fileID: 227861233} - m_Layer: 0 - m_Name: Collider (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &227861232 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227861231} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3148, y: 1173, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &227861233 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 227861231} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &233366649 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 233366650} - - component: {fileID: 233366651} - m_Layer: 0 - m_Name: Collider (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &233366650 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233366649} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -571, y: -1464, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &233366651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 233366649} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &297929432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 297929433} - - component: {fileID: 297929434} - m_Layer: 0 - m_Name: Collider (41) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &297929433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 297929432} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1084, y: 599, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 41 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &297929434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 297929432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 135 - _checkCollision: 0 ---- !u!1 &342508118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 342508119} - - component: {fileID: 342508120} - m_Layer: 0 - m_Name: Collider (30) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &342508119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 342508118} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2098, y: 2099, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 30 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &342508120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 342508118} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &452009733 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 452009734} - - component: {fileID: 452009735} - m_Layer: 0 - m_Name: Collider (11) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &452009734 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452009733} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2116, y: 835, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &452009735 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452009733} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &511899990 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 511899991} - - component: {fileID: 511899992} - m_Layer: 0 - m_Name: Collider (27) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &511899991 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 511899990} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1679, y: -1137, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 27 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &511899992 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 511899990} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &529522476 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 529522477} - - component: {fileID: 529522478} - m_Layer: 0 - m_Name: Collider (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &529522477 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529522476} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3138, y: -962, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &529522478 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529522476} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &647113712 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 647113713} - - component: {fileID: 647113714} - m_Layer: 0 - m_Name: Collider (28) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &647113713 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 647113712} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1345, y: 341, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 28 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &647113714 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 647113712} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &709973923 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 709973925} - - component: {fileID: 709973924} - 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 &709973924 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 709973923} - m_Enabled: 1 - serializedVersion: 9 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - 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: 4 - 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_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &709973925 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 709973923} - 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: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &726857030 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 726857031} - - component: {fileID: 726857032} - m_Layer: 0 - m_Name: Collider (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &726857031 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726857030} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1734, y: 496, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &726857032 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726857030} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &729117341 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 729117345} - - component: {fileID: 729117344} - - component: {fileID: 729117343} - - component: {fileID: 729117342} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &729117342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &729117343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &729117344 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - 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 &729117345 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729117341} - 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: 1895923061} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &752878768 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 752878769} - - component: {fileID: 752878770} - m_Layer: 0 - m_Name: Collider (21) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &752878769 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752878768} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 559, y: 3172, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 21 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &752878770 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 752878768} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &757152393 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 757152394} - - component: {fileID: 757152395} - m_Layer: 0 - m_Name: Collider (19) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &757152394 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 757152393} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 27, y: -663, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 19 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &757152395 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 757152393} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &800288755 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 800288756} - - component: {fileID: 800288757} - m_Layer: 0 - m_Name: Collider (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &800288756 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 800288755} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1033, y: -586, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &800288757 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 800288755} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &843552790 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 843552791} - - component: {fileID: 843552792} - m_Layer: 0 - m_Name: Collider (13) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &843552791 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 843552790} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1729, y: 1443, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 13 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &843552792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 843552790} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 ---- !u!1 &864415561 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 864415564} - - component: {fileID: 864415563} - - component: {fileID: 864415562} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &864415562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &864415563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 5 ---- !u!4 &864415564 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 864415561} - 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: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &941845984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 941845985} - - component: {fileID: 941845986} - m_Layer: 0 - m_Name: Collider (37) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &941845985 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941845984} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2475, y: -1010, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 37 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &941845986 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941845984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 135 - _checkCollision: 0 ---- !u!1 &946028575 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 946028576} - - component: {fileID: 946028577} - m_Layer: 0 - m_Name: Collider (38) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &946028576 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 946028575} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3311, y: 1869, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 38 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &946028577 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 946028575} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 135 - _checkCollision: 0 ---- !u!1 &1002964384 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1002964385} - - component: {fileID: 1002964386} - m_Layer: 0 - m_Name: Collider (22) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1002964385 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002964384} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2539, y: 2071, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002964386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002964384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1047865664 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1047865665} - - component: {fileID: 1047865666} - m_Layer: 0 - m_Name: Collider (25) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1047865665 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1047865664} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3630, y: 370, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 25 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1047865666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1047865664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 ---- !u!1 &1088431767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1088431768} - - component: {fileID: 1088431769} - m_Layer: 0 - m_Name: Collider (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1088431768 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1088431767} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -474, y: 589, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1088431769 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1088431767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 150 - _checkCollision: 0 ---- !u!1 &1245259086 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1245259088} - - component: {fileID: 1245259087} - m_Layer: 0 - m_Name: Collider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1245259087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1245259086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!4 &1245259088 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1245259086} - 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: 1792171288} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1247561551 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1247561552} - - component: {fileID: 1247561554} - - component: {fileID: 1247561553} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1247561552 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - 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: 1895923061} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1247561553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 28 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Reload Scene ---- !u!222 &1247561554 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1247561551} - m_CullTransparentMesh: 0 ---- !u!1 &1298746604 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1298746605} - - component: {fileID: 1298746606} - m_Layer: 0 - m_Name: Collider (43) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1298746605 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1298746604} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 903, y: 1780, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 43 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1298746606 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1298746604} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1319415732 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1319415733} - - component: {fileID: 1319415734} - m_Layer: 0 - m_Name: Collider (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1319415733 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319415732} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2290, y: -238, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1319415734 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1319415732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1410852923 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1410852924} - - component: {fileID: 1410852925} - m_Layer: 0 - m_Name: Collider (15) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1410852924 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1410852923} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2540, y: -460, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1410852925 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1410852923} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 ---- !u!1 &1447026568 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1447026569} - - component: {fileID: 1447026570} - m_Layer: 0 - m_Name: Collider (18) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1447026569 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447026568} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1634, y: 1578, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 18 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1447026570 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1447026568} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1480351778 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1480351779} - - component: {fileID: 1480351780} - m_Layer: 0 - m_Name: Collider (26) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1480351779 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480351778} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2461, y: 669, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 26 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1480351780 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480351778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &1507606170 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1507606171} - - component: {fileID: 1507606172} - m_Layer: 0 - m_Name: Collider (31) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1507606171 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1507606170} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2268, y: 2833, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 31 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1507606172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1507606170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &1508356963 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1508356964} - - component: {fileID: 1508356965} - m_Layer: 0 - m_Name: Collider (34) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1508356964 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1508356963} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1428, y: 3153, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 34 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1508356965 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1508356963} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &1558199701 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1558199702} - - component: {fileID: 1558199703} - m_Layer: 0 - m_Name: Collider (32) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1558199702 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1558199701} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 568, y: 2534, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 32 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1558199703 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1558199701} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &1599776777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1599776778} - - component: {fileID: 1599776779} - m_Layer: 0 - m_Name: Collider (20) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1599776778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1599776777} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1177, y: 1066, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 20 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1599776779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1599776777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1632643949 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1632643950} - - component: {fileID: 1632643951} - m_Layer: 0 - m_Name: Collider (39) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1632643950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632643949} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -43, y: 1170, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 39 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1632643951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632643949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 500 - _checkCollision: 0 ---- !u!1 &1717110118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1717110119} - - component: {fileID: 1717110120} - m_Layer: 0 - m_Name: Collider (40) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1717110119 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717110118} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 765, y: 70, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 40 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1717110120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1717110118} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 135 - _checkCollision: 0 ---- !u!1 &1763953143 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1763953144} - - component: {fileID: 1763953145} - m_Layer: 0 - m_Name: Collider (44) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1763953144 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763953143} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 312, y: 689, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 44 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1763953145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1763953143} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1764487260 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1764487261} - - component: {fileID: 1764487262} - m_Layer: 0 - m_Name: Collider (42) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1764487261 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1764487260} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 327, y: 1433, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 42 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1764487262 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1764487260} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 100 - _checkCollision: 0 ---- !u!1 &1792171287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1792171288} - m_Layer: 0 - m_Name: Colliders - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1792171288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1792171287} - 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: - - {fileID: 1245259088} - - {fileID: 1088431768} - - {fileID: 726857031} - - {fileID: 94008177} - - {fileID: 800288756} - - {fileID: 1319415733} - - {fileID: 77944950} - - {fileID: 227861232} - - {fileID: 529522477} - - {fileID: 233366650} - - {fileID: 56711980} - - {fileID: 452009734} - - {fileID: 1909221176} - - {fileID: 843552791} - - {fileID: 2096934575} - - {fileID: 1410852924} - - {fileID: 1892053465} - - {fileID: 2052490364} - - {fileID: 1447026569} - - {fileID: 757152394} - - {fileID: 1599776778} - - {fileID: 752878769} - - {fileID: 1002964385} - - {fileID: 5130492} - - {fileID: 160389334} - - {fileID: 1047865665} - - {fileID: 1480351779} - - {fileID: 511899991} - - {fileID: 647113713} - - {fileID: 2076421513} - - {fileID: 342508119} - - {fileID: 1507606171} - - {fileID: 1558199702} - - {fileID: 69041001} - - {fileID: 1508356964} - - {fileID: 2074503089} - - {fileID: 1917121311} - - {fileID: 941845985} - - {fileID: 946028576} - - {fileID: 1632643950} - - {fileID: 1717110119} - - {fileID: 297929433} - - {fileID: 1764487261} - - {fileID: 1298746605} - - {fileID: 1763953144} - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1843538874 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1843538876} - - component: {fileID: 1843538875} - m_Layer: 0 - m_Name: Reload Scene - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1843538875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843538874} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3a09626aadb137f4a90619527f8dfbeb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1843538876 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843538874} - 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: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1869146852 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1869146854} - - component: {fileID: 1869146855} - - component: {fileID: 1869146853} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1869146853 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76f3c0fa7edcfbb469f5d2175ae0c6f3, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1869146854 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 540, y: 980, 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!114 &1869146855 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1869146852} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 1000 - _checkCollision: 1 ---- !u!1 &1892053464 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1892053465} - - component: {fileID: 1892053466} - m_Layer: 0 - m_Name: Collider (16) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1892053465 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1892053464} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1081, y: -1494, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1892053466 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1892053464} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &1895923060 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1895923061} - - component: {fileID: 1895923064} - - component: {fileID: 1895923063} - - component: {fileID: 1895923062} - m_Layer: 5 - m_Name: Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1895923061 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - 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: - - {fileID: 1247561552} - m_Father: {fileID: 729117345} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 220, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1895923062 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1895923063} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1843538875} - m_MethodName: Reload - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &1895923063 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 ---- !u!222 &1895923064 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895923060} - m_CullTransparentMesh: 0 ---- !u!1 &1909221175 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1909221176} - - component: {fileID: 1909221177} - m_Layer: 0 - m_Name: Collider (12) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1909221176 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1909221175} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1140, y: -392, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 12 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1909221177 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1909221175} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &1917121310 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1917121311} - - component: {fileID: 1917121312} - m_Layer: 0 - m_Name: Collider (36) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1917121311 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1917121310} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 201, y: -1406, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 36 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1917121312 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1917121310} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 135 - _checkCollision: 0 ---- !u!1 &2052490363 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2052490364} - - component: {fileID: 2052490365} - m_Layer: 0 - m_Name: Collider (17) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2052490364 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2052490363} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2851, y: 2660, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 17 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2052490365 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2052490363} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 400 - _checkCollision: 0 ---- !u!1 &2074503088 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2074503089} - - component: {fileID: 2074503090} - m_Layer: 0 - m_Name: Collider (35) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2074503089 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2074503088} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1679, y: -247, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 35 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2074503090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2074503088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 300 - _checkCollision: 0 ---- !u!1 &2076421512 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2076421513} - - component: {fileID: 2076421514} - m_Layer: 0 - m_Name: Collider (29) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2076421513 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2076421512} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1760, y: -1417, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 29 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2076421514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2076421512} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 175 - _checkCollision: 0 ---- !u!1 &2096934574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2096934575} - - component: {fileID: 2096934576} - m_Layer: 0 - m_Name: Collider (14) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2096934575 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2096934574} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3825, y: 2612, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1792171288} - m_RootOrder: 14 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2096934576 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2096934574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8d7cc25e870fa547aecdb8441cbd75e, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 325 - _checkCollision: 0 diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeColliderUpwards.cs b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeColliderUpwards.cs deleted file mode 100644 index d7aecfd..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeColliderUpwards.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step6Upwards -{ - public class QuadtreeColliderUpwards : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeDataUpwards.Leaf _leaf; - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeDataUpwards.Leaf(gameObject, GetLeafPosition(), _radius); - } - - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - private void OnEnable() - { - UpdateLeaf(); - QuadtreeUpwards.SetLeaf(_leaf); - } - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public Action collisionEvent; - - void DoCheckCollision() - { - if (collisionEvent == null) return; - - GameObject[] colliderGameObjects = QuadtreeUpwards.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - } - - private void OnDisable() - { - QuadtreeUpwards.RemoveLeaf(_leaf); - } - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeDetectorUpwards.cs b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeDetectorUpwards.cs deleted file mode 100644 index 089b323..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeDetectorUpwards.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step6Upwards -{ - [RequireComponent(typeof(QuadtreeColliderUpwards))] - public class QuadtreeDetectorUpwards : MonoBehaviour - { - QuadtreeColliderUpwards _quadTreeCollider; - - List _colliders = new List(); - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _colliders.Add(collisionGameObject); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - foreach (GameObject collider in _colliders) - if (collider) //从碰撞发生到绘制Gizmo中间有很短的时间,如果在这期间物体被销毁了,就获取不到Trnanform出bug,因此要先判断 - Gizmos.DrawLine(transform.position, collider.transform.position); - _colliders.Clear(); - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeSettingUpwards.cs b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeSettingUpwards.cs deleted file mode 100644 index 73eda7a..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeSettingUpwards.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step6Upwards -{ - public class QuadtreeSettingUpwards : ScriptableObject - { - public float startTop = 1960; - public float startRight = 1080; - public float startBottom = 0; - public float startLeft = 0; - public int maxLeafsNumber = 5; - public float minSideLength = 10; - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeUpwards.cs b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeUpwards.cs deleted file mode 100644 index d8a143a..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/QuadtreeUpwards.cs +++ /dev/null @@ -1,626 +0,0 @@ -/* - * 增加向上生长功能,在存入时如果超出整棵树的范围则向着叶子方向反向生长树,更新也是先移除后存入,一起在存入环节处理 - * - * 向上生长后根节点发生变化,但四叉树所有外部操作都是从根节点开始,为了解决这个矛盾点大概有三个方法: - * 1.每个可能造成根节点变化的操作都返回新的根节点 - * 2.每个可能造成根节点变化的操作都用出参数返回新的根节点 - * 3.增加一层,在这一层里将操作转为从根节点开始 - * - * 在经过短暂的思想斗争后,我个人不能接受一个方法同时进行本职工作和返回新根节点两个操作,于是我选择增加一层 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Example.Step6Upwards -{ - public class QuadtreeUpwards : MonoBehaviour - { - static QuadtreeUpwards quadtreeObject - { - get - { - if (_quadtreeObject != null) - return _quadtreeObject; - - _quadtreeObject = new GameObject("Quadtree").AddComponent(); - return _quadtreeObject; - } - } - static QuadtreeUpwards _quadtreeObject; - - QuadtreeDataUpwards _quadtree; - - //初始化 - private void Awake() - { - QuadtreeSettingUpwards setting = Resources.Load("QuadtreeCanUpwardsSetting"); - _quadtree = new QuadtreeDataUpwards(setting.startTop, setting.startRight, setting.startBottom, setting.startLeft, setting.maxLeafsNumber, setting.minSideLength); - } - - //存入 - public static void SetLeaf(QuadtreeDataUpwards.Leaf leaf) - { - quadtreeObject._quadtree.SetLeaf(leaf); - } - - //更新 - private void Update() - { - _quadtree.Update(); - } - - //检测 - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (_quadtreeObject != null) - return quadtreeObject._quadtree.CheckCollision(checkPoint, checkRadius); - return new GameObject[0]; - } - - public static GameObject[] CheckCollision(QuadtreeDataUpwards.Leaf leaf) - { - if (_quadtreeObject != null) - return quadtreeObject._quadtree.CheckCollision(leaf); - return new GameObject[0]; - } - - //移除 - public static bool RemoveLeaf(QuadtreeDataUpwards.Leaf leaf) - { - if (_quadtreeObject != null) - return _quadtreeObject._quadtree.RemoveLeaf(leaf); - return false; - } - } - - public class QuadtreeDataUpwards - { - public class Leaf - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - public Leaf(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - - class Field - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public Vector2 center //center好像只在向上生长的时候才会使用到一次,考虑之后觉得还是用查询吧,反正都是只用一次,节省一点内存 - { - get - { - return new Vector2((_left + _right) / 2, (_bottom + _top) / 2); - } - } - - public Field(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } - - Field _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeDataUpwards _root; - QuadtreeDataUpwards _parent; - QuadtreeDataUpwards _upperRightChild; - QuadtreeDataUpwards _lowerRightChild; - QuadtreeDataUpwards _lowerLeftChild; - QuadtreeDataUpwards _upperLeftChild; - - List _leafs = new List(); - - int _maxLeafsNumber; - float _minSideLength; - - public QuadtreeDataUpwards(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeDataUpwards root = null, QuadtreeDataUpwards parent = null) - { - _field = new Field(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - //存入 - public bool SetLeaf(Leaf leaf) - { - if (_root._field.Contains(leaf.position)) - return _root.DoSetLeaf(leaf); - else - { - _root.UpwardGrouth(leaf.position); - SetLeaf(leaf); - } - return false; - } - - bool DoSetLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(Leaf leaf) - { - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,存入后的最大半径是" + _maxRadius + ""); - CheckAndDoSplit(); - return true; - } - - void UpdateMaxRadiusWhenSetLeaf(Leaf leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点更新最大半径,更新后的最大半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点向子节点存入位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.DoSetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.DoSetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.DoSetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.DoSetLeaf(leaf); - - //增加反向生长后正常情况下应该不会走到这一步 - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); - return false; - } - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - - void Split() - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点达到分割条件,进行分割"); - - DoUpdate(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeDataUpwards(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeDataUpwards(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeDataUpwards(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeDataUpwards(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (Leaf leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - //向上生长 - void UpwardGrouth(Vector2 leafPosition) - { - /* - * 先要明确什么情况下向哪个方向生长 - * - * 以原范围中心点为基准点 - * 如果叶子在基准点左,向左生长,如果在基准点位置或右边,向右生长 - * 如果叶子在基准点下方,向下生长,如果在基准点位置或上方,向上生长 - */ - - Vector2 growthDirection = leafPosition - _field.center; //方向,正数是上和右 - - float newTop = growthDirection.y >= 0 ? _field.top + _field.height : _field.top; - float newRight = growthDirection.x >= 0 ? _field.right + _field.width : _field.right; - float newBottom = growthDirection.y >= 0 ? _field.bottom : _field.bottom - _field.height; - float newLeft = growthDirection.x >= 0 ? _field.left : _field.left - _field.width; - float newXCenter = growthDirection.x >= 0 ? _field.right : _field.left; - float newYCenter = growthDirection.y >= 0 ? _field.top : _field.bottom; - - QuadtreeDataUpwards newRoot = new QuadtreeDataUpwards(newTop, newRight, newBottom, newLeft, _maxLeafsNumber, _minSideLength); //新根节点 - - //右上节点,需要存入的情况是向左下方生长,即 x < 0 && y < 0 - if (growthDirection.x >= 0 || growthDirection.y >= 0) //只要不满足向左下方生长的条件就用创建 - newRoot._upperRightChild = new QuadtreeDataUpwards(newTop, newRight, newYCenter, newXCenter, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._upperRightChild = this; - - //右下节点,需要存入的情况是向左上方生长,即 x <0 && y >= 0 - if (growthDirection.x >= 0 || growthDirection.y < 0) - newRoot._lowerRightChild = new QuadtreeDataUpwards(newYCenter, newRight, newBottom, newXCenter, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._lowerRightChild = this; - - //左下节点,需要存入的情况是向右上方生长,即 x >= 0 && y >= 0 - if (growthDirection.x < 0 || growthDirection.y < 0) - newRoot._lowerLeftChild = new QuadtreeDataUpwards(newYCenter, newXCenter, newBottom, newLeft, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._lowerLeftChild = this; - - //左上节点,需要存入的情况是向右下方生长,即 x >= 0 && y < 0 - if (growthDirection.x < 0 || growthDirection.y >= 0) - newRoot._upperLeftChild = new QuadtreeDataUpwards(newTop, newXCenter, newYCenter, newLeft, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._upperLeftChild = this; - - _parent = newRoot; //因为每次向上生长都是由现在的根节点调用的,新的根节点生长完成后旧的根节点的父节点就是新的根节点 - newRoot.UpdateRoot(newRoot); - - Debug.Log("位置在" + leafPosition + "的叶子存入树,树向" + (growthDirection.x >= 0 ? (growthDirection.y >= 0 ? "右上方" : "右下方") : (growthDirection.y >= 0 ? "左上方" : "左下方")) + "生长,生长后的树的范围是 " + newRoot._field.top + " " + newRoot._field.right + " " + newRoot._field.bottom + " " + newRoot._field.left + ""); - } - - void UpdateRoot(QuadtreeDataUpwards root) - { - _root = root; - if (!DontHaveChildren()) - { - _upperRightChild.UpdateRoot(root); - _lowerRightChild.UpdateRoot(root); - _lowerLeftChild.UpdateRoot(root); - _upperLeftChild.UpdateRoot(root); - } - } - - //更新 - public void Update() - { - _root.DoUpdate(); - } - - void DoUpdate() - { - UpdatePosition(); - UpdateMaxRadius(); - - DrawField(); //绘制节点范围,删除不影响功能 - } - - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - - void UpdateSelfPosition() - { - List resetLeafs = new List(); - - foreach (Leaf leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (Leaf leaf in resetLeafs) - ResetLeaf(leaf); - } - - void ResetLeaf(Leaf leaf) - { - Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,重新存入树"); - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - //检测 - public T[] CheckCollision(Leaf leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _root.DoCheckCollision(checkPoint, checkRadius); - } - - T[] DoCheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (Leaf leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - private T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeDataUpwards child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.DoCheckCollision(checkPoint, checkRadius); - return new T[] { }; - } - - //移除 - public bool RemoveLeaf(Leaf leaf) - { - return _root.DoRemoveLeaf(leaf); - } - - bool DoRemoveLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - bool RemoveLeafFromSelf(Leaf leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - - private bool DoRemoveLeafFromSelf(Leaf leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - //Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子,移除后的最大半径是" + _maxRadius + ""); - return true; - } - return false; - } - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - //Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树梢节点半径发生变化,新半径是" + _maxRadius + ""); - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(Leaf leaf) - { - //Debug.Log("位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的树枝节点从子节点移除位置在" + leaf.position + "半径是" + leaf.radius + "的叶子"); - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.DoRemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.DoRemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.DoRemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.DoRemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - bool RemoveLeafInTotalTree(Leaf leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChildren(leaf); - } - - bool RemoveLeafInTotalTreeFromChildren(Leaf leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - - //从这开始是Debug代码,删掉不影响功能 - //绘制四叉树节点的范围 - void DrawField() - { - if (DontHaveChildren()) - { - Vector3 upperRight = new Vector3(_field.right, _field.top, 0); - Vector3 lowerRight = new Vector3(_field.right, _field.bottom, 0); - Vector3 lowerLeft = new Vector3(_field.left, _field.bottom, 0); - Vector3 upperLeft = new Vector3(_field.left, _field.top, 0); - - Debug.DrawLine(upperRight, lowerRight, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerRight, lowerLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(lowerLeft, upperLeft, Color.blue * 0.8f, 0); - Debug.DrawLine(upperLeft, upperRight, Color.blue * 0.8f, 0); - } - else - { - _upperRightChild.DrawField(); - _lowerRightChild.DrawField(); - _lowerLeftChild.DrawField(); - _upperLeftChild.DrawField(); - } - } - } -} diff --git a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Resources/QuadtreeCanUpwardsSetting.asset b/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Resources/QuadtreeCanUpwardsSetting.asset deleted file mode 100644 index 105e2dd..0000000 --- a/Assets/Quadtree Collider Detection/Step Interpretation/6_Upwards/Resources/QuadtreeCanUpwardsSetting.asset +++ /dev/null @@ -1,20 +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: 90fa37fcc5c4ed247b4325d96d98a8e9, type: 3} - m_Name: QuadtreeCanUpwardsSetting - m_EditorClassIdentifier: - startTop: 1000 - startRight: 1000 - startBottom: -1000 - startLeft: -1000 - maxLeafsNumber: 5 - minSideLength: 10 diff --git a/Assets/Quadtree_old/Editor/QuadtreeSettingEditorWindow.cs b/Assets/Quadtree_old/Editor/QuadtreeSettingEditorWindow.cs deleted file mode 100644 index 9df2be7..0000000 --- a/Assets/Quadtree_old/Editor/QuadtreeSettingEditorWindow.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System.Linq; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Old -{ - public class QuadtreeSettingWindow : EditorWindow - { - const string settingObjectName = "QuadtreeSetting"; - - QuadtreeSetting setting - { - get - { - if (_setting != null) - return _setting; - - _setting = GetSettingObject(settingObjectName); - return _setting; - } - } - QuadtreeSetting _setting; - - - [MenuItem("Tools/Quadtree/Quadtree Setting")] - static void GetWindow() - { - QuadtreeSettingWindow window = (QuadtreeSettingWindow)GetWindow(typeof(QuadtreeSettingWindow)); - window.minSize = new Vector2(Screen.width / 3.7f, Screen.width / 12); - window.Show(); - } - - - - private void OnGUI() - { - DrawProposal(); - GUILayout.Space(5); - DrawSettingEditor(); - } - - void DrawProposal() - { - EditorGUILayout.LabelField("本设置使用了Resources文件夹,对优化有影响,建议在发布前改用其他方式设置(如硬编码或数据类)"); - } - - void DrawSettingEditor() - { - Editor.CreateEditor(setting).DrawDefaultInspector(); - } - - - - //获取设置文件 - QuadtreeSetting GetSettingObject(string settingObjectName) - { - QuadtreeSetting settingObject = LoadSetting(settingObjectName); - if (settingObject != null) - return settingObject; - return CreatSettingObject(settingObjectName); - } - - static QuadtreeSetting LoadSetting(string settingObjectName) - { - return Resources.Load(settingObjectName); - } - - QuadtreeSetting CreatSettingObject(string settingObjectName) - { - string settingScriptFilePath = GetSettingScriptFilePath(); - - if (!AssetDatabase.IsValidFolder(settingScriptFilePath + "Resources")) - CreatResourcesFolder(settingScriptFilePath); - - QuadtreeSetting settingObject = CreateInstance(); - AssetDatabase.CreateAsset(settingObject, settingScriptFilePath + "Resources/" + settingObjectName + ".asset"); - - return settingObject; - } - string GetSettingScriptFilePath() - { - string fullPath = AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(CreateInstance())); - return fullPath.Substring(0, fullPath.LastIndexOf("/") + 1); - } - void CreatResourcesFolder(string parentFolderPath) - { - if (parentFolderPath.Last() == '/') - parentFolderPath = parentFolderPath.Substring(0, parentFolderPath.Length - 1); - AssetDatabase.CreateFolder(parentFolderPath, "Resources"); - } - - - - //绘制范围 - private void OnEnable() - { - SceneView.duringSceneGui += OnSceneGUI; - } - - private void OnDisable() - { - SceneView.duringSceneGui -= OnSceneGUI; - } - - void OnSceneGUI(SceneView sceneView) - { - Handles.color = Color.red * 0.9f; - - Vector3 upperRight = new Vector3(setting.startRight, setting.startTop, 0); - Vector3 lowerRight = new Vector3(setting.startRight, setting.startBottom, 0); - Vector3 lowerLeft = new Vector3(setting.startLeft, setting.startBottom, 0); - Vector3 upperLeft = new Vector3(setting.startLeft, setting.startTop, 0); - - Handles.DrawLine(upperRight, lowerRight); - Handles.DrawLine(lowerRight, lowerLeft); - Handles.DrawLine(lowerLeft, upperLeft); - Handles.DrawLine(upperLeft, upperRight); - } - - - - //发布时提示 - [PostProcessBuild(0)] - static void OnBuild(BuildTarget target, string path) - { - if (LoadSetting(settingObjectName) != null) - Debug.LogWarning("检测到 Resources 文件夹中有四叉树设置文件,为游戏优化着想,建议改用其他方式(如硬编码)进行设置,之后移除设置文件、设置脚本文件和设置编辑器脚本文件"); - } - } -} \ No newline at end of file diff --git a/Assets/Quadtree_old/Example/ColliderMove.cs b/Assets/Quadtree_old/Example/ColliderMove.cs deleted file mode 100644 index bf65ce1..0000000 --- a/Assets/Quadtree_old/Example/ColliderMove.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; - -public class ColliderMove : MonoBehaviour -{ - public float speed { get; set; } - - void Update () - { - transform.Translate(transform.up * speed * Time.deltaTime); - } -} diff --git a/Assets/Quadtree_old/Example/ExampleScene.unity b/Assets/Quadtree_old/Example/ExampleScene.unity deleted file mode 100644 index 8b6f19b..0000000 --- a/Assets/Quadtree_old/Example/ExampleScene.unity +++ /dev/null @@ -1,830 +0,0 @@ -%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.212, g: 0.227, b: 0.259, 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: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - 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: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481694, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - 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: 0 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !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 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &68258550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 68258552} - - component: {fileID: 68258553} - - component: {fileID: 68258551} - m_Layer: 0 - m_Name: CheckCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &68258551 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 68258550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 42ae545aee0b75b49b4096c2dd3db3a8, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &68258552 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 68258550} - 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!114 &68258553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 68258550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a549517b6868ca4aaa9f89f669b6071, type: 3} - m_Name: - m_EditorClassIdentifier: - _radius: 1000 - _checkCollision: 1 ---- !u!1 &175312784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 175312788} - - component: {fileID: 175312787} - - component: {fileID: 175312786} - - component: {fileID: 175312785} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &175312785 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 175312784} - m_Enabled: 1 ---- !u!124 &175312786 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 175312784} - m_Enabled: 1 ---- !u!20 &175312787 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 175312784} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0.6650944, g: 1, b: 0.8913057, 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: -1 - 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 &175312788 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 175312784} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &327289653 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 327289654} - - component: {fileID: 327289656} - - component: {fileID: 327289655} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &327289654 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 327289653} - 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: 1112629283} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &327289655 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 327289653} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 20 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 2 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Reload Scene ---- !u!222 &327289656 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 327289653} - m_CullTransparentMesh: 0 ---- !u!1 &661359833 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 661359835} - - component: {fileID: 661359834} - 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 &661359834 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 661359833} - m_Enabled: 1 - serializedVersion: 9 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - 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: 4 - 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_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &661359835 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 661359833} - 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: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &937850254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 937850258} - - component: {fileID: 937850257} - - component: {fileID: 937850256} - - component: {fileID: 937850255} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &937850255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 937850254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &937850256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 937850254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 1 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!223 &937850257 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 937850254} - 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 &937850258 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 937850254} - 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: 1112629283} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!1 &1112629282 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1112629283} - - component: {fileID: 1112629286} - - component: {fileID: 1112629285} - - component: {fileID: 1112629284} - m_Layer: 5 - m_Name: Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1112629283 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1112629282} - 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: - - {fileID: 327289654} - m_Father: {fileID: 937850258} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 160, y: 60} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1112629284 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1112629282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1112629285} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 1880752670} - m_MethodName: Reload - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &1112629285 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1112629282} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 ---- !u!222 &1112629286 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1112629282} - m_CullTransparentMesh: 0 ---- !u!1 &1134253811 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1134253813} - - component: {fileID: 1134253812} - m_Layer: 0 - m_Name: SpownCollider - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1134253812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1134253811} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7ebb90c83d7e7a241ad8ec465c78fbec, type: 3} - m_Name: - m_EditorClassIdentifier: - _spownField: {x: 2000, y: 2000, z: -1000, w: -1000} - _speedRange: {x: 100, y: 700} - _destroyTimeRange: {x: 3, y: 10} - _spownIntervalRange: {x: 0, y: 0.2} - _colliderRadiusRange: {x: 100, y: 750} ---- !u!4 &1134253813 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1134253811} - 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: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1544119989 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1544119992} - - component: {fileID: 1544119991} - - component: {fileID: 1544119990} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1544119990 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1544119989} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, 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 &1544119991 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1544119989} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &1544119992 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1544119989} - 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: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1880752669 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1880752671} - - component: {fileID: 1880752670} - m_Layer: 0 - m_Name: Reload - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1880752670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880752669} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3a09626aadb137f4a90619527f8dfbeb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1880752671 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1880752669} - 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} diff --git a/Assets/Quadtree_old/Example/QuadtreeDetector.cs b/Assets/Quadtree_old/Example/QuadtreeDetector.cs deleted file mode 100644 index 10ec858..0000000 --- a/Assets/Quadtree_old/Example/QuadtreeDetector.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Old { - [RequireComponent(typeof(QuadtreeCollider))] - public class QuadtreeDetector : MonoBehaviour - { - QuadtreeCollider _quadTreeCollider; - - List _collisionTransforms = new List(); - - - private void Awake() - { - _quadTreeCollider = GetComponent(); - } - - private void OnEnable() - { - _quadTreeCollider.collisionEvent += OnQuadtreeCollision; - } - - private void OnDisable() - { - _quadTreeCollider.collisionEvent -= OnQuadtreeCollision; - } - - void OnQuadtreeCollision(GameObject collisionGameObject) - { - _collisionTransforms.Add(collisionGameObject.transform); - } - - private void OnDrawGizmos() - { - Gizmos.color = Color.yellow; - - foreach (Transform collisionTransform in _collisionTransforms) - if (collisionTransform) //绘制前检测碰撞物体是否还存在,因为从碰撞到绘制中间还是有些时间的,这期间可能碰撞物体被销毁了 - Gizmos.DrawLine(collisionTransform.position, transform.position); - _collisionTransforms.Clear(); //绘制完后清除碰撞物体List,保证每次绘制都是最新的 - } - } -} - diff --git a/Assets/Quadtree_old/Example/ReloadScene.cs b/Assets/Quadtree_old/Example/ReloadScene.cs deleted file mode 100644 index 7119a0f..0000000 --- a/Assets/Quadtree_old/Example/ReloadScene.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using UnityEngine.SceneManagement; - -public class ReloadScene : MonoBehaviour -{ - public void Reload() - { - SceneManager.LoadScene(SceneManager.GetActiveScene().name); - } -} diff --git a/Assets/Quadtree_old/Example/SpownRandomCollider.cs b/Assets/Quadtree_old/Example/SpownRandomCollider.cs deleted file mode 100644 index 9251e03..0000000 --- a/Assets/Quadtree_old/Example/SpownRandomCollider.cs +++ /dev/null @@ -1,54 +0,0 @@ -using UnityEngine; -using MtC.Tools.Quadtree.Old; - -public class SpownRandomCollider : MonoBehaviour -{ -#pragma warning disable 0649 - [SerializeField] - Vector4 _spownField; -#pragma warning disable 0649 - [SerializeField] - Vector2 _speedRange; -#pragma warning disable 0649 - [SerializeField] - Vector2 _destroyTimeRange; -#pragma warning disable 0649 - [SerializeField] - Vector2 _spownIntervalRange; -#pragma warning disable 0649 - [SerializeField] - Vector2 _colliderRadiusRange; - - float _nextSpown; - - - private void Update() - { - if (Time.time >= _nextSpown) - { - Spown(); - _nextSpown = Time.time + Random.Range(_spownIntervalRange.x, _spownIntervalRange.y); - } - } - - void Spown() - { - GameObject colliderObject = new GameObject("Collider"); - - - colliderObject.transform.position = new Vector3(Random.Range(_spownField.x, _spownField.z), Random.Range(_spownField.y, _spownField.w), 0); - - - QuadtreeCollider colliderComponent = colliderObject.AddComponent(); - colliderComponent.radius = Random.Range(_colliderRadiusRange.x, _colliderRadiusRange.y); - - - float angle = Random.Range(0, 360f); - colliderObject.transform.eulerAngles = new Vector3(0, 0, angle); - - - ColliderMove colliderMove = colliderObject.AddComponent(); - colliderMove.speed = Random.Range(_speedRange.x, _speedRange.y); - Destroy(colliderObject, Random.Range(_destroyTimeRange.x, _destroyTimeRange.y)); - } -} diff --git a/Assets/Quadtree_old/Quadtree.cs b/Assets/Quadtree_old/Quadtree.cs deleted file mode 100644 index 1143e0a..0000000 --- a/Assets/Quadtree_old/Quadtree.cs +++ /dev/null @@ -1,594 +0,0 @@ -/* - * 正式第三版四叉树,在第六步的基础上改造后得来 - * - * 先在 - */ - -using System.Collections.Generic; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Old -{ - public class Quadtree : MonoBehaviour - { - static Quadtree quadtreeObject - { - get - { - if (_quadtreeObject != null) - return _quadtreeObject; - - _quadtreeObject = new GameObject("Quadtree").AddComponent(); - return _quadtreeObject; - } - } - static Quadtree _quadtreeObject; - - QuadtreeData _quadtree; - - - - //初始化 - private void Awake() - { - QuadtreeSetting setting = Resources.Load("QuadtreeSetting"); - _quadtree = new QuadtreeData(setting.startTop, setting.startRight, setting.startBottom, setting.startLeft, setting.maxLeafsNumber, setting.minSideLength); - } - - - - //存入 - public static void SetLeaf(QuadtreeData.Leaf leaf) - { - quadtreeObject._quadtree.SetLeaf(leaf); - } - - - - //更新 - private void Update() - { - _quadtree.Update(); - } - - - - //检测 - public static GameObject[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - if (_quadtreeObject != null) - return quadtreeObject._quadtree.CheckCollision(checkPoint, checkRadius); - return new GameObject[0]; - } - public static GameObject[] CheckCollision(QuadtreeData.Leaf leaf) - { - if (_quadtreeObject != null) - return quadtreeObject._quadtree.CheckCollision(leaf); - return new GameObject[0]; - } - - - - //移除 - public static bool RemoveLeaf(QuadtreeData.Leaf leaf) - { - if (_quadtreeObject != null) - return _quadtreeObject._quadtree.RemoveLeaf(leaf); - return false; - } - } - - - public class QuadtreeData - { - public class Leaf - { - public T obj - { - get { return _obj; } - } - T _obj; - - public Vector2 position - { - get { return _position; } - set { _position = value; } - } - Vector2 _position; - - public float radius - { - get { return _radius; } - set { _radius = value; } - } - float _radius; - - - public Leaf(T obj, Vector2 position, float radius) - { - _obj = obj; - _position = position; - _radius = radius; - } - } - class Field - { - public float top - { - get { return _top; } - } - float _top; - public float right - { - get { return _right; } - } - float _right; - public float bottom - { - get { return _bottom; } - } - float _bottom; - public float left - { - get { return _left; } - } - float _left; - public float width - { - get { return _width; } - } - float _width; - public float height - { - get { return _height; } - } - float _height; - - public Vector2 center //center好像只在向上生长的时候才会使用到一次,考虑之后觉得还是用查询吧,反正都是只用一次,节省一点内存 - { - get - { - return new Vector2((_left + _right) / 2, (_bottom + _top) / 2); - } - } - - - - public Field(float top, float right, float bottom, float left) - { - _top = top; - _right = right; - _bottom = bottom; - _left = left; - - _width = _right - _left; - _height = _top - _bottom; - } - - - - //检测一个点是否在区域里 - public bool Contains(Vector2 point) - { - return point.x >= _left && point.x <= _right && point.y >= _bottom && point.y <= _top; - } - - - - //计算一个点到区域的距离,如果在区域里则返回0 - public float PointToFieldDistance(Vector2 point) - { - float xDistance = Mathf.Max(0, point.x - _right, _left - point.x); - float yDistance = Mathf.Max(0, point.y - _top, _bottom - point.y); - return Mathf.Sqrt(xDistance * xDistance + yDistance * yDistance); - } - } - - - Field _field; - - float _maxRadius = Mathf.NegativeInfinity; - - QuadtreeData _root; - QuadtreeData _parent; - QuadtreeData _upperRightChild; - QuadtreeData _lowerRightChild; - QuadtreeData _lowerLeftChild; - QuadtreeData _upperLeftChild; - - List _leafs = new List(); - - int _maxLeafsNumber; - float _minSideLength; - - - - public QuadtreeData(float top, float right, float bottom, float left, int maxLeafNumber, float minSideLength, QuadtreeData root = null, QuadtreeData parent = null) - { - _field = new Field(top, right, bottom, left); - - _maxLeafsNumber = maxLeafNumber; - _minSideLength = minSideLength; - - _root = root != null ? root : this; - - _parent = parent; - } - - - - //存入 - public bool SetLeaf(Leaf leaf) - { - if (_root._field.Contains(leaf.position)) - return _root.DoSetLeaf(leaf); - else - { - _root.UpwardGrouth(leaf.position); - SetLeaf(leaf); - } - return false; - } - bool DoSetLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return SetLeafToSelf(leaf); - else - return SetLeafToChildren(leaf); - } - bool DontHaveChildren() - { - return _upperRightChild == null || _lowerRightChild == null || _lowerLeftChild == null || _upperLeftChild == null; //四个子节点是一起创建的,原理上说一个不存在另外三个也不存在,但假设只有一个不存在插入的叶子又在这个位置就要出事了 - } - - bool SetLeafToSelf(Leaf leaf) - { - _leafs.Add(leaf); - UpdateMaxRadiusWhenSetLeaf(leaf); - CheckAndDoSplit(); - return true; - } - void UpdateMaxRadiusWhenSetLeaf(Leaf leaf) - { - if (leaf.radius > _maxRadius) //只有存入的叶子的半径超过了现在节点的最大半径才需要更新最大半径,存入更小的叶子并不会影响到检测。 - { - _maxRadius = leaf.radius; - - CallParentUpdateMaxRadius(); - } - } - void CallParentUpdateMaxRadius() - { - if (_parent != null) - _parent.UpwardUpdateMaxRadius(); - } - void UpwardUpdateMaxRadius() - { - float newManRaiuds = GetChildrenMaxRadius(); - if (newManRaiuds != _maxRadius) - { - _maxRadius = newManRaiuds; - CallParentUpdateMaxRadius(); - } - } - float GetChildrenMaxRadius() - { - return Mathf.Max(_upperRightChild._maxRadius, _lowerRightChild._maxRadius, _lowerLeftChild._maxRadius, _upperLeftChild._maxRadius); - } - - bool SetLeafToChildren(Leaf leaf) - { - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.DoSetLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.DoSetLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.DoSetLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.DoSetLeaf(leaf); - - //增加反向生长后正常情况下应该不会走到这一步 - Debug.LogError("向位置在" + _field.top + "," + _field.right + "," + _field.bottom + "," + _field.left + "的节点存入叶子时发生错误:叶子不在所有子节点的范围里。"); - return false; - } - - - void CheckAndDoSplit() - { - if (_leafs.Count > _maxLeafsNumber && _field.width > _minSideLength && _field.height > _minSideLength) - Split(); - } - void Split() - { - DoUpdate(); - - float xCenter = (_field.left + _field.right) / 2; - float yCenter = (_field.bottom + _field.top) / 2; - - _upperRightChild = new QuadtreeData(_field.top, _field.right, yCenter, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerRightChild = new QuadtreeData(yCenter, _field.right, _field.bottom, xCenter, _maxLeafsNumber, _minSideLength, _root, this); - _lowerLeftChild = new QuadtreeData(yCenter, xCenter, _field.bottom, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - _upperLeftChild = new QuadtreeData(_field.top, xCenter, yCenter, _field.left, _maxLeafsNumber, _minSideLength, _root, this); - - foreach (Leaf leaf in _leafs) - SetLeafToChildren(leaf); - _leafs = null; - } - - - - //向上生长 - void UpwardGrouth(Vector2 leafPosition) - { - /* - * 先要明确什么情况下向哪个方向生长 - * - * 以原范围中心点为基准点 - * 如果叶子在基准点左,向左生长,如果在基准点位置或右边,向右生长 - * 如果叶子在基准点下方,向下生长,如果在基准点位置或上方,向上生长 - */ - - Vector2 growthDirection = leafPosition - _field.center; //方向,正数是上和右 - - float newTop = growthDirection.y >= 0 ? _field.top + _field.height : _field.top; - float newRight = growthDirection.x >= 0 ? _field.right + _field.width : _field.right; - float newBottom = growthDirection.y >= 0 ? _field.bottom : _field.bottom - _field.height; - float newLeft = growthDirection.x >= 0 ? _field.left : _field.left - _field.width; - float newXCenter = growthDirection.x >= 0 ? _field.right : _field.left; - float newYCenter = growthDirection.y >= 0 ? _field.top : _field.bottom; - - QuadtreeData newRoot = new QuadtreeData(newTop, newRight, newBottom, newLeft, _maxLeafsNumber, _minSideLength); //新根节点 - - //右上节点,需要存入的情况是向左下方生长,即 x < 0 && y < 0 - if (growthDirection.x >= 0 || growthDirection.y >= 0) //只要不满足向左下方生长的条件就用创建 - newRoot._upperRightChild = new QuadtreeData(newTop, newRight, newYCenter, newXCenter, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._upperRightChild = this; - - //右下节点,需要存入的情况是向左上方生长,即 x <0 && y >= 0 - if (growthDirection.x >= 0 || growthDirection.y < 0) - newRoot._lowerRightChild = new QuadtreeData(newYCenter, newRight, newBottom, newXCenter, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._lowerRightChild = this; - - //左下节点,需要存入的情况是向右上方生长,即 x >= 0 && y >= 0 - if (growthDirection.x < 0 || growthDirection.y < 0) - newRoot._lowerLeftChild = new QuadtreeData(newYCenter, newXCenter, newBottom, newLeft, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._lowerLeftChild = this; - - //左上节点,需要存入的情况是向右下方生长,即 x >= 0 && y < 0 - if (growthDirection.x < 0 || growthDirection.y >= 0) - newRoot._upperLeftChild = new QuadtreeData(newTop, newXCenter, newYCenter, newLeft, _maxLeafsNumber, _minSideLength, newRoot, newRoot); - else - newRoot._upperLeftChild = this; - - _parent = newRoot; //因为每次向上生长都是由现在的根节点调用的,新的根节点生长完成后旧的根节点的父节点就是新的根节点 - newRoot.UpdateRoot(newRoot); - } - void UpdateRoot(QuadtreeData root) - { - _root = root; - if (!DontHaveChildren()) - { - _upperRightChild.UpdateRoot(root); - _lowerRightChild.UpdateRoot(root); - _lowerLeftChild.UpdateRoot(root); - _upperLeftChild.UpdateRoot(root); - } - } - - - - //更新 - public void Update() - { - _root.DoUpdate(); - } - void DoUpdate() - { - UpdatePosition(); - UpdateMaxRadius(); - } - void UpdatePosition() - { - if (DontHaveChildren()) - UpdateSelfPosition(); - else - UpdateChildrensPosition(); - } - void UpdateSelfPosition() - { - List resetLeafs = new List(); - - foreach (Leaf leaf in _leafs) - if (!_field.Contains(leaf.position)) - resetLeafs.Add(leaf); - - foreach (Leaf leaf in resetLeafs) - ResetLeaf(leaf); - } - void ResetLeaf(Leaf leaf) - { - RemoveLeafFromSelf(leaf); - _root.SetLeaf(leaf); - } - void UpdateChildrensPosition() - { - _upperRightChild.UpdatePosition(); - _lowerRightChild.UpdatePosition(); - _lowerLeftChild.UpdatePosition(); - _upperLeftChild.UpdatePosition(); - } - - void UpdateMaxRadius() - { - if (DontHaveChildren()) - UpdateSelfMaxRadius(); - else - UpdateChildrensMaxRadius(); - } - void UpdateSelfMaxRadius() - { - float newMaxRadius = GetLeafsMaxRadiusOnUpdate(); - if (newMaxRadius != _maxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnUpdate() - { - float newMaxRadius = Mathf.NegativeInfinity; - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - newMaxRadius = leaf.radius; - return newMaxRadius; - } - void UpdateChildrensMaxRadius() - { - _upperRightChild.UpdateMaxRadius(); - _lowerRightChild.UpdateMaxRadius(); - _lowerLeftChild.UpdateMaxRadius(); - _upperLeftChild.UpdateMaxRadius(); - } - - - - //检测 - public T[] CheckCollision(Leaf leaf) - { - List objs = new List(CheckCollision(leaf.position, leaf.radius)); - objs.Remove(leaf.obj); - return objs.ToArray(); - } - public T[] CheckCollision(Vector2 checkPoint, float checkRadius) - { - return _root.DoCheckCollision(checkPoint, checkRadius); - } - T[] DoCheckCollision(Vector2 checkPoint, float checkRadius) - { - if (DontHaveChildren()) - return GetCollisionObjectsFromSelf(checkPoint, checkRadius); - else - return GetCollisionObjectsFromChildren(checkPoint, checkRadius); - } - - T[] GetCollisionObjectsFromSelf(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - foreach (Leaf leaf in _leafs) - if (Vector2.Distance(checkPoint, leaf.position) <= checkRadius + leaf.radius) - objs.Add(leaf.obj); - - return objs.ToArray(); - } - - private T[] GetCollisionObjectsFromChildren(Vector2 checkPoint, float checkRadius) - { - List objs = new List(); - - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerRightChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _lowerLeftChild)); - objs.AddRange(GetCollisionObjectsFromAChild(checkPoint, checkRadius, _upperLeftChild)); - - return objs.ToArray(); - } - T[] GetCollisionObjectsFromAChild(Vector2 checkPoint, float checkRadius, QuadtreeData child) - { - if (child._field.PointToFieldDistance(checkPoint) <= _maxRadius + checkRadius) //这里不光要考虑到检测半径,还要考虑到节点最大半径 - return child.DoCheckCollision(checkPoint, checkRadius); - return new T[] { }; - } - - - - //移除 - public bool RemoveLeaf(Leaf leaf) - { - return _root.DoRemoveLeaf(leaf); - } - bool DoRemoveLeaf(Leaf leaf) - { - if (DontHaveChildren()) - return RemoveLeafFromSelf(leaf); - else - return RemoveLeafFromChildren(leaf); - } - bool RemoveLeafFromSelf(Leaf leaf) - { - if (DoRemoveLeafFromSelf(leaf)) - return true; - return _root.RemoveLeafInTotalTree(leaf); - } - private bool DoRemoveLeafFromSelf(Leaf leaf) - { - if (_leafs.Remove(leaf)) - { - UpdateMaxRadiusWhenRemoveLeaf(); - return true; - } - return false; - } - void UpdateMaxRadiusWhenRemoveLeaf() - { - float newMaxRadius = GetLeafsMaxRadiusOnRemoveLeaf(); - if (_maxRadius != newMaxRadius) - { - _maxRadius = newMaxRadius; - CallParentUpdateMaxRadius(); - } - } - float GetLeafsMaxRadiusOnRemoveLeaf() - { - float newMaxRadius = Mathf.NegativeInfinity; - - foreach (Leaf leaf in _leafs) - if (leaf.radius > newMaxRadius) - if (leaf.radius == _maxRadius) - return _maxRadius; - else - newMaxRadius = leaf.radius; - - return newMaxRadius; - } - - bool RemoveLeafFromChildren(Leaf leaf) - { - if (_upperRightChild._field.Contains(leaf.position)) - return _upperRightChild.DoRemoveLeaf(leaf); - if (_lowerRightChild._field.Contains(leaf.position)) - return _lowerRightChild.DoRemoveLeaf(leaf); - if (_lowerLeftChild._field.Contains(leaf.position)) - return _lowerLeftChild.DoRemoveLeaf(leaf); - if (_upperLeftChild._field.Contains(leaf.position)) - return _upperLeftChild.DoRemoveLeaf(leaf); - return _root.RemoveLeafInTotalTree(leaf); - } - - - - bool RemoveLeafInTotalTree(Leaf leaf) - { - if (DontHaveChildren()) - return DoRemoveLeafFromSelf(leaf); - else - return RemoveLeafInTotalTreeFromChildren(leaf); - } - - bool RemoveLeafInTotalTreeFromChildren(Leaf leaf) - { - if (_upperRightChild.RemoveLeafInTotalTree(leaf)) - return true; //如果子节点移除成功了,那就说明不需要继续遍历剩下的节点了,直接返回 true - if (_lowerRightChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_lowerLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - if (_upperLeftChild.RemoveLeafInTotalTree(leaf)) - return true; - return false; - } - } -} \ No newline at end of file diff --git a/Assets/Quadtree_old/QuadtreeCollider.cs b/Assets/Quadtree_old/QuadtreeCollider.cs deleted file mode 100644 index f9e84ba..0000000 --- a/Assets/Quadtree_old/QuadtreeCollider.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using UnityEngine; - -namespace MtC.Tools.Quadtree.Old -{ - public class QuadtreeCollider : MonoBehaviour - { - public float radius - { - get { return _radius; } - set { _radius = value; } - } - [SerializeField] - float _radius = 1; - - public bool checkCollision - { - get { return _checkCollision; } - set { _checkCollision = value; } - } - [SerializeField] - bool _checkCollision; - - Transform _transform; - QuadtreeData.Leaf _leaf; - - - private void Awake() - { - _transform = transform; - _leaf = new QuadtreeData.Leaf(gameObject, GetLeafPosition(), _radius); - } - Vector2 GetLeafPosition() - { - return new Vector2(_transform.position.x, _transform.position.y); - } - - - private void OnEnable() - { - UpdateLeaf(); - Quadtree.SetLeaf(_leaf); - } - - - private void Update() - { - UpdateLeaf(); - CheckCollision(); - } - void UpdateLeaf() - { - UpdateLeafPosition(); - UpdateLeafRadius(); - } - void UpdateLeafPosition() - { - _leaf.position = GetLeafPosition(); - } - void UpdateLeafRadius() - { - _leaf.radius = Mathf.Max(_transform.lossyScale.x, _transform.lossyScale.y) * _radius; //注意是 lossyScale 不是localScale,lossyScale 是全局缩放,可以应对父物体缩放后碰撞器一起缩放的情况 - } - - void CheckCollision() - { - if (_checkCollision) - DoCheckCollision(); - } - public Action collisionEvent; - void DoCheckCollision() - { - if (collisionEvent == null) return; - - GameObject[] colliderGameObjects = Quadtree.CheckCollision(_leaf); - foreach (GameObject colliderGameObject in colliderGameObjects) - { - if (collisionEvent == null) break; - collisionEvent(colliderGameObject); - } - //每次发出事件进行一次判断,原因是这里循环多次发出事件,但有时候有的组件接到事件后各种操作最后取消了订阅,如果正巧所有订阅都取消了,这里继续循环的时候就会出错,所以要每发出一次判断一次 - } - - - private void OnDisable() - { - Quadtree.RemoveLeaf(_leaf); - } - - - - private void OnDrawGizmos() - { - if (!enabled) return; - - Gizmos.color = _checkCollision ? Color.yellow * 0.8f : Color.green * 0.8f; - - MyGizmos.DrawCircle(transform.position, _radius * Mathf.Max(transform.lossyScale.x, transform.lossyScale.y), 60); - } - } -} - - -public static partial class MyGizmos -{ - public static void DrawCircle(Vector3 center, float radius, int edgeNumber = 360) - { - Vector3 beginPoint = center + Vector3.right * radius; //三角函数角度是从正右方开始的,画圆起始点是最右边的点 - for (int i = 1; i <= edgeNumber; i++) - { - float angle = 2 * Mathf.PI / edgeNumber * i; - - float x = radius * Mathf.Cos(angle) + center.x; - float y = radius * Mathf.Sin(angle) + center.y; - Vector3 endPoint = new Vector3(x, y, center.z); - - Gizmos.DrawLine(beginPoint, endPoint); - - beginPoint = endPoint; - } - } -} \ No newline at end of file diff --git a/Assets/Quadtree_old/QuadtreeSetting.cs b/Assets/Quadtree_old/QuadtreeSetting.cs deleted file mode 100644 index 5a337f1..0000000 --- a/Assets/Quadtree_old/QuadtreeSetting.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -namespace MtC.Tools.Quadtree.Old -{ - public class QuadtreeSetting : ScriptableObject - { - public float startTop = 1960; - public float startRight = 1080; - public float startBottom = 0; - public float startLeft = 0; - public int maxLeafsNumber = 5; - public float minSideLength = 10; - } -} \ No newline at end of file diff --git a/Assets/Quadtree_old/Resources/QuadtreeSetting.asset b/Assets/Quadtree_old/Resources/QuadtreeSetting.asset deleted file mode 100644 index c770500..0000000 --- a/Assets/Quadtree_old/Resources/QuadtreeSetting.asset +++ /dev/null @@ -1,20 +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: 640c23ffdecd5f342a884c52e36ea3c2, type: 3} - m_Name: QuadtreeSetting - m_EditorClassIdentifier: - startTop: 1960 - startRight: 1080 - startBottom: 0 - startLeft: 0 - maxLeafsNumber: 5 - minSideLength: 10 diff --git a/Assets/TODO/TODO.cs b/Assets/TODO/TODO.cs deleted file mode 100644 index 3ecb51d..0000000 --- a/Assets/TODO/TODO.cs +++ /dev/null @@ -1,50 +0,0 @@ -//TODO: -//这个.cs用于记录可能出现的方案和对应的灵感 - -/* - * Quadtree: - * 核心问题: - * 更新时刻: - * Unity自带的物理碰撞检测以物理更新频率为基准进行检测(FixedUpdate),这是为了保证物理系统的准确性而选择的方案 - * 四叉树碰撞检测就是通过削减物理部分来在速度上超越自带物理碰撞,如此可以考虑将四叉树的碰撞改到Update之中 - * 碰撞检测发出方: - * 发出方有两种方案:在碰撞器发出 / 在四叉树发出 - * 如果在碰撞器发出,不需要任何额外设计,缺点是更新和检测的顺序无法保证 - * 如果在四叉树发出,优点是检测可以保证在更新完成后进行,缺点是需要遍历整棵树寻找检测器或维护一个检测器列表 - * 可以考虑在接口中增加是否检测碰撞的设置方法,以此更新四叉树中的检测器列表 - * 分割时刻: - * 分割时刻有两种方案:在存入碰撞器时分割 / 在更新时分割 - * 首先分割之前都需要先更新碰撞器位置,否则会发生分割前有碰撞器移出节点范围导致分割后碰撞器无法正常下发给子节点的bug - * 如果使用存入时分割则会带来一个问题:存入前的更新导致碰撞器存入另一个节点,导致另一个节点也进行更新,另一个节点更新的同时又有一个碰撞器进入了这个节点导致了这个节点的更新,两个节点互相触发更新导致大量多余更新 - * 这个问题可以通过先把所有节点取出来,等分割完毕后再存入树的方式解决 - * 如果使用更新时分割则不会产生这个问题,但对应的会带来新的问题:每次更新都会造成一次分割判断,绝大多数都会是false - * 可以考虑使用总碰撞器数量小于分割临界值就不向下递归的方式减小运算量消耗,代价是多维护一个变量 - * 无论哪种分割时机都会带来多余的检测,问题核心在于两个哪个消耗小一些 - * 节点合并: - * 是否需要增加子节点合并的方法以在不需要大量子节点的情况下减少检测消耗 - * 如果要增加合并功能,有三种方案:合并时子节点删除 / 合并时子节点保留可复用属性入池,不可重复属性通过存值或重新创建的方式补充 / 合并时子节点依然在父节点内,节点添加一个是否是树梢的字段 - * 三者在内存占用上逐渐增加,但在速度上逐渐增快。其中中间方案的不可复用属性中最复杂的是Rect,创建和赋值哪个更快就是关键 - * 合并和分割的检测时间也有讨论空间,一个节点能发生合并必然不需要分割,需要进行分割必然不能够合并,但一旦处理不好可能造成逻辑的复杂化 - * 半径更新时刻: - * 存入移除时更新 / 每帧更新一次 - * 如果存入时更新,从下向上更新,到了父级最大半径大于自己的最大半径时就结束,调用过程性能好,但检测次数多、逻辑较复杂 - * 如果每帧更新,最大的问题是如何避免四个节点半径从小到大导致连续四次更新,所幸每帧更新是从上向下更新,可以先更新全部子节点再决定自己要不要更新。最大缺点是每一帧都要将全部节点调用一次 - * 移除时刻: - * 移除时移除 / 更新时移除 - * 移除时移除最大的优势就是逻辑简单,但缺点是移除时可能碰撞器已经进入到其他节点之中,导致根据位置移除无效,需要全树遍历移除。如果一个更新的时间里出现两次全树移除,基本就可以认为性能上与更新时移除拉开了距离 - * 更新时移除可以节约计算量,但需要一个新的列表来保存需要移除的节点 - * 事件订阅问题: - * 碰撞事件无论检测发起方是谁,必然要由检测器向其他组件传达,为了减轻耦合应该使用面向接口的开发方式,实现碰撞检测接口来达到检测效果 - * 直接通过检测器在四叉树中添加订阅? - * 通过订阅查看订阅脚本是否存在? - * 不直接订阅而是在检测器中维护一个脚本应用List用于检测检测器是否存在? - * 反向生长实现方式: - * 两种方式:在每个节点内做中转 / 用一个包装类做中转 - * 数据问题: - * Transform: - * Transform获取到的所有属性都要是世界空间的,不能用相对空间的 - * 设计问题: - * 更新: - * 是否可以使用责任链完成在更新时的所有操作? - * 是否需要使用命令模式对各个操作进行分离? - */ diff --git a/Assets/TODO/TODO2.cs b/Assets/TODO/TODO2.cs deleted file mode 100644 index 207b08d..0000000 --- a/Assets/TODO/TODO2.cs +++ /dev/null @@ -1,58 +0,0 @@ -//TODO:另一个TODO文件 -//可以考虑一个树多种算法加多个bool来控制 -/* - * 存入和移除需要一起拆分,一个方案是即时的,另一个是缓存到每一帧,这个需要 - */ -/* - 各个方法处理方式的成本计算: - - 假设树满6层,则为 4^0 + 4^1 + …… + 4^5 = 1365个节点,四叉树几乎不会满,为方便计算粗略记为1000个节点 - 假设总共有约10000个碰撞器 - - 从树顶到树底的可剪枝递归,最少需要 6 次调用,最多需要 1+4+4+4+4+4=21 次调用,平均值约为 14 - 从树顶到树底的可中断递归,最少 6 次,最多需要 1000 次,平均值为 500 - 遍历所有节点的递归固定需要 1000 - - 从底向上的可中断递归,评价 3 - 从底向上的递归,6 - - 单个节点的碰撞器约有 10 个碰撞器,则单个节点碰撞器遍历为 10 - 单个节点碰撞器的可中断遍历则为 5 - - 假设每一帧有100个碰撞器存入,100个碰撞器删除,1000个碰撞器离开所属节点范围,1个碰撞器在删除时超出范围,500个碰撞器半径变大,500个半径变小 - - 存入: - 直接存入:剪枝递归 * 100 = 1400 - 遍历存入:遍历 = 1000 【无法应对超出四叉树区域的存入】 - 移除: - 直接移除:(剪枝递归+可中断遍历) * 100 + (可中断递归+遍历) = 1900 + 5500 = 7400 - 遍历移除:遍历+遍历 = 11000 - 节点数量更新: - 半径更新: - 存入移除时更新:(可中断递归+一次比较) * 100 + (可中断递归+可中断遍历) * 100 = 400 + 800 = 1200 【无法应对半径主动变化】 - 半径变化时更新:(可中断递归+一次比较) * 500 + (可中断递归+可中断遍历) * 500 = 2000 + 4000 = 6000 - 更新时更新:(遍历+遍历) = 11000 - */ -/* - * 即时处理比缓存处理快是因为不用遍历,针对处理比全部处理快是因为不用遍历,速度的关键在于如何不进行遍历 - * - * 将遍历转嫁到碰撞器上意义很小,遍历时调用次数和碰撞器数量相同,碰撞器自身调用次数则需要计算所有碰撞器的累积,结果是一样的 - */ -/* - * 无论即时更新还是统一更新,半径更新都需要在位置更新完成后进行,否则会导致移出原有节点的碰撞器将半径更新到原来的节点上 - * - * 为此无论是碰撞器发起更新还是树发起更新都需要先更新位置后更新半径 - */ -/* - * 如果将位置更新改为即时的将要面临一个巨大的挑战:移动到新节点时将无法直接通过位置寻找老节点 - * - * 统一更新位置的原理是遍历每个节点并检查需要重新存入的节点,原节点就是自身。针对更新按照经典四叉树原理,使用位置搜索,由于碰撞器已经移出节点范围将无法找到正确的节点 - * - * 可以考虑使用字典保存对应关系,直接通过字典进行移除。其问题在于如何在存入流程中向字典存入值,又在什么时候取出来 - * - * 可以考虑将节点作为返回值,这样null表示存入失败,包装类可以通过返回值获取节点并保存下来 - */ -/* - * 调整脚本执行时间或许有用,但需要注意这个设置能不能随着资源包导出 - * 即使不使用问题也不大,U3D自己的检测也不是保证在Update的末尾进行的 - */ diff --git a/Assets/TODO/TODOProject.cs b/Assets/TODO/TODOProject.cs deleted file mode 100644 index 4b2e2c4..0000000 --- a/Assets/TODO/TODOProject.cs +++ /dev/null @@ -1,54 +0,0 @@ -//TODO:这个cs文件用于记录需要写的四叉树 - -/* - * 带合并四叉树: - * 节点: - * 即时存入 - * 即时移除 - * 存入时分割 - * 移除时合并 - * 位置统一更新 - * 半径统一更新 - * 包装类: - * 存入时检测是否在范围内,不在则反向生长 - * 包装类保存检测器列表,每帧更新后遍历检测 - * 节电池: - * 创建节点时从池中取节点 - * 合并时向池中存节点 - * 统计: - * 一个在移除时调用的合并方法 - * 一个节点池,包含最大存储量 - * 所有节点的 new 改为池中获取 - */ - -/* - * 碰撞器-节点字典树 - * 即时存入 - * 即时移除 - * 存入时分割 - * 移除时合并 - * 位置统一更新 - * 半径统一更新 - * - * 封装类使用<碰撞器-节点>字典保存碰撞器和节点的关系 - * 存入时返回存入的碰撞器 - * 移除时直接通过碰撞器获取节点,从节点直接移除 - */ - -/* - * 全针对操作树: - * 即时存入 - * 即时移除 - * 存入时分割 - * 移除时合并 - * 包装类调用碰撞器进行更新 - * 位置根据碰撞器位置是否变化更新 - * 半径根据碰撞器半径是否变化更新 - * - * 封装类使用<碰撞器-节点>字典保存碰撞器和节点的关系 - * 存入时返回存入的碰撞器 - * 移除时直接通过碰撞器获取节点,从节点直接移除 - * 位置更新直接通过碰撞器获取节点检测是否出界 - * - * 碰撞器保存位置和半径,根据位置半径是否变化进行更新 - */ diff --git "a/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png" "b/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png" new file mode 100644 index 0000000..afc625f --- /dev/null +++ "b/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c49712a5e35f7e2b6397e07e4bce760b76d73c3b660ffc3f781e849a06756c8 +size 45972 diff --git "a/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" "b/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" new file mode 100644 index 0000000..4a5a8ec --- /dev/null +++ "b/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" @@ -0,0 +1,22 @@ +/* + +列表和二叉堆的理论速度对比 + + +以单个末梢节点为基础进行对比 + +假设节点中有 1000 个碰撞器,每次更新 10% 碰撞器移出,同时移入相同数量的碰撞器,同时有 2% 的碰撞器变大,2% 的碰撞器变小 + + +使用列表保存: +只有找最大碰撞器成本,每一次更新遍历一次,时间成本 = 1000 + + +使用堆保存: +一个是排序成本:需要更新所有节点 = 遍历成本 + 排序成本 = 1000 + 排序成本 +寻找最大碰撞器成本:必是第一个,成本 = 1 + + +堆保存因为必须遍历更新,反而导致效率下降。 + + */ diff --git "a/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" "b/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" new file mode 100644 index 0000000..1fad90c --- /dev/null +++ "b/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" @@ -0,0 +1,96 @@ +/* + +假设有 5层,10000 个碰撞器,1000 个节点,每次更新有 10% 碰撞器移动到其他节点,每次更新有 5% 节点移除与新增,1% 的节点合并,同时 1% 的节点拆分 + +不考虑缩放,缩放是节点内最大半径的更新相关,与增删速度无关 + +重复存入怎么办? + + +遍历节点 = 节点数 = 1000 +遍历全树 = 遍历节点 + 碰撞器数 = 1000 + 10000 = 11000 + +直接移除节点 = 1 +剪枝移除节点 = 层数 + 末梢节点数 / 2 = 5 + 5 = 10 +全树移除节点 = 遍历全树 / 2 = 5500 + +添加节点 = 层数 = 5 + +分割节点 = 末梢节点数 = 10 +合并节点 = 末梢节点数 * 4 = 40 + + +累积到更新时处理 + +不能即时返回操作结果,逻辑分步骤且简洁 + +逻辑顺序: +第一次遍历:遍历整个树、移除需要移除的节点、移除并记录越界的节点、合并需要合并的节点 +第一次遍历后:将越界的节点和新增的节点存入树,存入时根据需要进行分割 + +第一次遍历: + 遍历全树:11000 + 移除节点:直接移除节点 * 500 = 500 + 移除越界节点:直接移除节点 * 100 = 100 + 合并节点:合并节点 * 10 = 400 +第一次遍历后: + 添加节点:添加节点 * 500 = 2500 + 添加越界节点:添加节点 * 100 = 500 + 分割节点:分割节点 * 10 * 100 + +合并 = 11000 + 500 + 100 + 400 + 2500 + 500 + 100 = 15100 + + +即时处理 + +即时返回操作结果,移除功能有缺陷 + +逻辑顺序: +存入:将节点存入树,根据需要进行分割 +移除:根据位置进行移除,如果根据位置移除失败,则全树移除,之后按照需要合并 +更新遍历:遍历整个树,移除并记录越界的节点,合并需要合并的节点 +更新遍历后:将越界的节点存入树,根据需要分割 + +存入: + 添加节点 * 500 = 2500 +移除: + 剪枝移除:剪枝移除节点 * 500 = 5000 + 对越界节点进行全树移除:全树移除 * 500 * 5% = 5500 * 25 = 137500 +更新遍历: + 遍历全树 = 11000 + 移除越界节点:直接移除节点 * 100 = 100 + 合并节点:合并节点 * 10 = 400 +更新遍历后: + 添加越界节点:添加节点 * 100 = 500 + 分割节点:分割节点 * 10 * 100 + +合并 = 2500 + 5000 + 137500 + 11000 + 100 + 400 + 500 + 100 = 157100 + + +带有字典索引的即时处理 + +即时返回操作结果,逻辑纠缠复杂,因为存储了字典,可以更简单的解决重复存入问题 + +逻辑顺序: +存入:将节点存入树,根据需要进行分割 +移除:根据字典进行删除,之后按照需要合并 +更新遍历:遍历整个树,移除并记录越界的节点,合并需要合并的节点 +更新遍历后:将越界的节点存入树,根据需要分割 + +存入: + 添加节点 * 500 = 2500 +移除: + 直接移除节点 * 500 = 500 +更新遍历: + 遍历全树 = 11000 + 移除越界节点:直接移除节点 * 100 = 100 + 合并节点:合并节点 * 10 = 400 +更新遍历后: + 添加越界节点:添加节点 * 100 = 500 + 分割节点:分割节点 * 10 * 100 + +合并 = 2500 + 500 + 11000 + 100 + 400 + 500 + 100 = 15100 + + +考虑到维护字典,带字典的即时处理在内存和速度上都比更新时处理消耗大,但可以返回操作结果,Debug 也更方便 + */ diff --git a/Logs/Packages-Update.log b/Logs/Packages-Update.log index 8ac292f..9cf8b77 100644 --- a/Logs/Packages-Update.log +++ b/Logs/Packages-Update.log @@ -38,3 +38,23 @@ Update Mode: updateDependencies The following packages were updated: com.unity.ide.rider from version 1.0.8 to 1.1.0 + +=== Sat Jun 26 15:03:19 2021 + +Packages were changed. +Update Mode: updateDependencies + +The following packages were 已添加: + com.unity.ide.visualstudio@2.0.3 +The following packages were 已更新: + com.unity.ads 从版本 2.0.8 到 3.5.0 + com.unity.analytics 从版本 3.3.2 到 3.5.3 + com.unity.collab-proxy 从版本 1.2.16 到 1.3.9 + com.unity.ide.rider 从版本 1.1.0 到 1.2.1 + com.unity.ide.vscode 从版本 1.0.7 到 1.2.3 + com.unity.purchasing 从版本 2.0.6 到 2.1.1 + com.unity.test-framework 从版本 1.0.13 到 1.1.18 + com.unity.textmeshpro 从版本 2.0.1 到 3.0.1 + com.unity.timeline 从版本 1.1.0 到 1.2.6 +The following packages were 已移除: + com.unity.package-manager-ui@2.2.0 diff --git a/Packages/manifest.json b/Packages/manifest.json index 9abc239..6a0a535 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -2,17 +2,17 @@ "dependencies": { "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", - "com.unity.ads": "2.0.8", - "com.unity.analytics": "3.3.2", - "com.unity.collab-proxy": "1.2.16", + "com.unity.ads": "3.5.0", + "com.unity.analytics": "3.5.3", + "com.unity.collab-proxy": "1.3.9", "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "1.1.0", - "com.unity.ide.vscode": "1.0.7", - "com.unity.package-manager-ui": "2.2.0", - "com.unity.purchasing": "2.0.6", - "com.unity.test-framework": "1.0.13", - "com.unity.textmeshpro": "2.0.1", - "com.unity.timeline": "1.1.0", + "com.unity.ide.rider": "1.2.1", + "com.unity.ide.visualstudio": "2.0.3", + "com.unity.ide.vscode": "1.2.3", + "com.unity.purchasing": "2.1.1", + "com.unity.test-framework": "1.1.18", + "com.unity.textmeshpro": "3.0.1", + "com.unity.timeline": "1.2.6", "com.unity.ugui": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..ab2d9ea --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,370 @@ +{ + "dependencies": { + "com.unity.2d.sprite": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.2d.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.ads": { + "version": "3.5.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.analytics": { + "version": "3.5.3", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.collab-proxy": { + "version": "1.3.9", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.ext.nunit": { + "version": "1.0.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.rider": { + "version": "1.2.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.1" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.3", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.vscode": { + "version": "1.2.3", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.purchasing": { + "version": "2.1.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.test-framework": { + "version": "1.1.18", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.textmeshpro": { + "version": "3.0.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.timeline": { + "version": "1.2.6", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..bc93024 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreviewPackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.cn + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_ErrorMessage: + m_Original: + m_Id: + m_Name: + m_Url: + m_Scopes: [] + m_IsDefault: 0 + m_Capabilities: 0 + m_Modified: 0 + m_Name: + m_Url: + m_Scopes: + - + m_SelectedScopeIndex: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index e1a95a3..de3c1c9 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.2f1 -m_EditorVersionWithRevision: 2019.2.2f1 (ab112815d860) +m_EditorVersion: 2020.1.14f1c1 +m_EditorVersionWithRevision: 2020.1.14f1c1 (c509e564d0e4) diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/README.md b/README.md index 225d3e2..053ced6 100644 --- a/README.md +++ b/README.md @@ -8,21 +8,18 @@ Unity引擎自带一套基于物理引擎的2D碰撞检测系统,这套系统 #### 注意:由于没有物理功能,四叉树的碰撞不会像Unity自带碰撞一样互相弹开,而是像触发器一样互相穿过 **** ## 快速开始: -由于没申请下来官方资源商店的位子,要使用这个碰撞检测系统首先当然要下载资源包并导入你的项目 由于U3D没有提供组件挂载和移除事件,本系统基于事件委托进行使用,为简化使用提供了自动订阅功能,因此有两种使用方法: ### 使用自动订阅: 1.将碰撞器挂载到需要检测碰撞的物体上 2.在需要进行检测的物体的碰撞器组件上勾选 IsDetector 3.在需要接收事件的脚本中根据需要实现三个接口中的一个或多个 -**警告**:自动订阅的原理是在 Awake 时查询物体上所有组件并将实现了接口的组件的方法进行**唯一一次订阅**,这个订阅**不会被取消**。因此自动订阅只适用于需要碰撞检测的组件在物体的整个生命周期中都**存在**的情况(**可以启用和禁用**,只要不挂载和销毁就行),如果**组件在实例化后才挂载会无法订阅,组件中途销毁会导致内存泄漏。** +**警告**:自动订阅的原理是在 Awake 时查询物体上所有组件并将实现了接口的组件的方法进行**唯一一次订阅**,这个订阅**不会被取消**。因此自动订阅只适用于需要碰撞检测的组件在物体**实例化时就已经存在**的情况(**可以启用和禁用**),如果**组件在实例化后才挂载会无法订阅**。虽然订阅不会取消,但由于使用了 UnityEvent 如果组件中途销毁并不会导致内存泄漏。 ### 手动订阅: 1.将碰撞器挂载到需要检测碰撞的物体上 2.取消勾选 Auto Subscribe 3.在需要进行检测的物体的碰撞器组件上勾选 IsDetector 4.根据逻辑在需要的位置使用碰撞器的订阅和取消订阅方法来订阅和取消订阅碰撞器组件的三个事件中的一个或多个 - -尽管三个事件可以订阅所有符合格式的方法,但仍然建议实现接口并订阅接口中的方法以保持可读性。 **** ## 配置: 通过 Tools -> Quadtree -> Quadtree Config 的配置窗口可以根据需要调整四叉树参数进行优化。 @@ -58,21 +55,21 @@ public interface IOnQuadtreeCollisionExit public bool IsCollitionToCollider(QuadtreeCollider collider); 如果这个碰撞器与指定碰撞器发生碰撞,返回true,否则返回false -public void SubscribeCollisionEnter(Action action); +public void SubscribeCollisionEnter(IOnQuadtreeCollisionEnter subscriber); 订阅这个碰撞器的碰撞器进入事件 -public void CancelSubscribeCollisionEnter(Action action); +public void CancelSubscribeCollisionEnter(IOnQuadtreeCollisionEnter subscriber); 取消订阅这个碰撞器的碰撞器进入事件 -public void SubscribeCollisionStay(Action action); +public void SubscribeCollisionStay(IOnQuadtreeCollisionStay subscriber); 订阅这个碰撞器的碰撞器停留事件 -public void CancelSubscribeCollisionStay(Action action); +public void CancelSubscribeCollisionStay(IOnQuadtreeCollisionStay subscriber); 取消订阅这个碰撞器的碰撞器停留事件 -public void SubscribeCollisionExit(Action action); +public void SubscribeCollisionExit(IOnQuadtreeCollisionExit subscriber); 订阅这个碰撞器的碰撞器离开事件 -public void CancelSubscribeCollisionExit(Action action); +public void CancelSubscribeCollisionExit(IOnQuadtreeCollisionExit subscriber); 取消订阅这个碰撞器的碰撞器离开事件 ``` diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset new file mode 100644 index 0000000..4681d1d --- /dev/null +++ b/UserSettings/EditorUserSettings.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!162 &1 +EditorUserSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_ConfigSettings: + vcSharedLogLevel: + value: 0d5e400f0650 + flags: 0 + m_VCAutomaticAdd: 1 + m_VCDebugCom: 0 + m_VCDebugCmd: 0 + m_VCDebugOut: 0 + m_SemanticMergeMode: 2 + m_VCShowFailedCheckout: 1 + m_VCOverwriteFailedCheckoutAssets: 1 + m_VCOverlayIcons: 1 + m_VCAllowAsyncUpdate: 0