From cd2f667f560c90f5563218aabc87b55474831250 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Mon, 21 Feb 2022 16:27:23 +0300 Subject: [PATCH] Collission Checker has been Added and Basic Patrolling Enemy Updated to use the Checkers --- Assets/Prefabs/Basic Patrolling Enemy.prefab | 359 ++++++++++++++++++ ...eta => Basic Patrolling Enemy.prefab.meta} | 0 Assets/Prefabs/BasicPatrollingEnemy.prefab | 135 ------- Assets/Scripts/AI/BasicPatrollingEnemyAI.cs | 49 +-- Assets/Scripts/Movement/CollissionChecker.cs | 18 + .../Movement/CollissionChecker.cs.meta | 11 + 6 files changed, 406 insertions(+), 166 deletions(-) create mode 100644 Assets/Prefabs/Basic Patrolling Enemy.prefab rename Assets/Prefabs/{BasicPatrollingEnemy.prefab.meta => Basic Patrolling Enemy.prefab.meta} (100%) delete mode 100644 Assets/Prefabs/BasicPatrollingEnemy.prefab create mode 100644 Assets/Scripts/Movement/CollissionChecker.cs create mode 100644 Assets/Scripts/Movement/CollissionChecker.cs.meta diff --git a/Assets/Prefabs/Basic Patrolling Enemy.prefab b/Assets/Prefabs/Basic Patrolling Enemy.prefab new file mode 100644 index 0000000..1aefc16 --- /dev/null +++ b/Assets/Prefabs/Basic Patrolling Enemy.prefab @@ -0,0 +1,359 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1835766140300886803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 334282908223700766} + m_Layer: 0 + m_Name: Collission Checkers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &334282908223700766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1835766140300886803} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3171748321895642525} + - {fileID: 7648712865646313035} + - {fileID: 8757415820976640968} + - {fileID: 7155506815360630270} + m_Father: {fileID: 3234632762428300599} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4544581046616649083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7155506815360630270} + - component: {fileID: 5662617623326585126} + m_Layer: 0 + m_Name: Right Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7155506815360630270 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4544581046616649083} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.8, y: -0.75, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 334282908223700766} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5662617623326585126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4544581046616649083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02e036b6321fff34cbd154fd665a8b23, type: 3} + m_Name: + m_EditorClassIdentifier: + LayerMask: + serializedVersion: 2 + m_Bits: 4294967103 +--- !u!1 &5991452379241120368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8757415820976640968} + - component: {fileID: 7220208958583308284} + m_Layer: 0 + m_Name: Left Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8757415820976640968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5991452379241120368} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.8, y: -0.75, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 334282908223700766} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7220208958583308284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5991452379241120368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02e036b6321fff34cbd154fd665a8b23, type: 3} + m_Name: + m_EditorClassIdentifier: + LayerMask: + serializedVersion: 2 + m_Bits: 4294967103 +--- !u!1 &7391517555913877016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3234632762428300599} + - component: {fileID: 8510568918136408618} + - component: {fileID: 2564862039932993934} + - component: {fileID: 1030411162175245191} + m_Layer: 0 + m_Name: Basic Patrolling Enemy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3234632762428300599 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7391517555913877016} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.4136911, y: 0.5090097, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 334282908223700766} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8510568918136408618 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7391517555913877016} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + 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: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!61 &2564862039932993934 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7391517555913877016} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!50 &1030411162175245191 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7391517555913877016} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!1 &7883981671222168568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3171748321895642525} + - component: {fileID: 7670569826422979744} + m_Layer: 0 + m_Name: Left Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3171748321895642525 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7883981671222168568} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.8, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.75, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 334282908223700766} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7670569826422979744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7883981671222168568} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02e036b6321fff34cbd154fd665a8b23, type: 3} + m_Name: + m_EditorClassIdentifier: + LayerMask: + serializedVersion: 2 + m_Bits: 4294967103 +--- !u!1 &7984300476647789986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7648712865646313035} + - component: {fileID: 2338888552764836054} + m_Layer: 0 + m_Name: Right Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7648712865646313035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7984300476647789986} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.8, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.75, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 334282908223700766} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2338888552764836054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7984300476647789986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02e036b6321fff34cbd154fd665a8b23, type: 3} + m_Name: + m_EditorClassIdentifier: + LayerMask: + serializedVersion: 2 + m_Bits: 4294967103 diff --git a/Assets/Prefabs/BasicPatrollingEnemy.prefab.meta b/Assets/Prefabs/Basic Patrolling Enemy.prefab.meta similarity index 100% rename from Assets/Prefabs/BasicPatrollingEnemy.prefab.meta rename to Assets/Prefabs/Basic Patrolling Enemy.prefab.meta diff --git a/Assets/Prefabs/BasicPatrollingEnemy.prefab b/Assets/Prefabs/BasicPatrollingEnemy.prefab deleted file mode 100644 index 282032f..0000000 --- a/Assets/Prefabs/BasicPatrollingEnemy.prefab +++ /dev/null @@ -1,135 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &7391517555913877016 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3234632762428300599} - - component: {fileID: 8510568918136408618} - - component: {fileID: 2564862039932993934} - - component: {fileID: 1030411162175245191} - m_Layer: 0 - m_Name: BasicPatrollingEnemy - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3234632762428300599 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7391517555913877016} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.4136911, y: 0.5090097, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &8510568918136408618 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7391517555913877016} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 0 - m_RayTraceProcedural: 0 - 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: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1, y: 1} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!61 &2564862039932993934 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7391517555913877016} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0, y: 0} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0.5, y: 0.5} - oldSize: {x: 1, y: 1} - newSize: {x: 1, y: 1} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 1, y: 1} - m_EdgeRadius: 0 ---- !u!50 &1030411162175245191 -Rigidbody2D: - serializedVersion: 4 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7391517555913877016} - m_BodyType: 0 - m_Simulated: 1 - m_UseFullKinematicContacts: 0 - m_UseAutoMass: 0 - m_Mass: 1 - m_LinearDrag: 0 - m_AngularDrag: 0.05 - m_GravityScale: 1 - m_Material: {fileID: 0} - m_Interpolate: 0 - m_SleepingMode: 1 - m_CollisionDetection: 0 - m_Constraints: 0 diff --git a/Assets/Scripts/AI/BasicPatrollingEnemyAI.cs b/Assets/Scripts/AI/BasicPatrollingEnemyAI.cs index 75be712..ffbb6ec 100644 --- a/Assets/Scripts/AI/BasicPatrollingEnemyAI.cs +++ b/Assets/Scripts/AI/BasicPatrollingEnemyAI.cs @@ -7,52 +7,39 @@ namespace AI { [SerializeField] protected bool isMovingRight = false; - [Space] - [Header("Left Detector")] - [SerializeField] protected Vector2 leftCliffDetectorOrigin = Vector2.left; - [SerializeField] protected Vector2 leftCliffDetectorSize = Vector2.one; - - [Space] - [Header("Right Detector")] - [SerializeField] protected Vector2 rightCliffDetectorOrigin = Vector2.right; - [SerializeField] protected Vector2 rightCliffDetectorSize = Vector2.one; - - [Space] - [Header("Right Detector")] - [SerializeField] protected LayerMask groundLayerMask = ~(1 << 6); // Everything except the "Player" layer - protected IMovement movement = null; - protected Collider2D[] nonAllocColliderArray = new Collider2D[10]; - protected Vector2 leftCliffPosition => GetCliffPositionInWorld(leftCliffDetectorOrigin); - protected Vector2 rightCliffPosition => GetCliffPositionInWorld(rightCliffDetectorOrigin); + protected CollissionChecker leftWallChecker = null; + protected CollissionChecker rightWallChecker = null; + protected CollissionChecker leftGroundChecker = null; + protected CollissionChecker rightGroundChecker = null; - protected bool IsLeftDetectorCollided => Physics2D.OverlapBoxNonAlloc(leftCliffPosition, leftCliffDetectorSize, 0, nonAllocColliderArray, groundLayerMask) != 0; - protected bool IsRightDetectorCollided => Physics2D.OverlapBoxNonAlloc(rightCliffPosition, rightCliffDetectorSize, 0, nonAllocColliderArray, groundLayerMask) != 0; + + // If moving Right, and either there's no more ground to move into or there is a wall at the Right side of the enemy OR + // If moving Left, and either there's no more ground to move into or there is a wall at the Left side of the enemy + // We should change directions + private bool ShouldChangeDirection + => (isMovingRight && (rightWallChecker.IsCollided || !rightGroundChecker.IsCollided)) || + (!isMovingRight && (leftWallChecker.IsCollided || !leftGroundChecker.IsCollided)); protected virtual void Awake() { movement = gameObject.AddComponent(); + leftWallChecker = GetCollissionCheckerOnChild("Collission Checkers/Left Wall"); + rightWallChecker = GetCollissionCheckerOnChild("Collission Checkers/Right Wall"); + leftGroundChecker = GetCollissionCheckerOnChild("Collission Checkers/Left Ground"); + rightGroundChecker = GetCollissionCheckerOnChild("Collission Checkers/Right Ground"); } protected virtual void FixedUpdate() { - if ((isMovingRight && !IsRightDetectorCollided) || (!isMovingRight && !IsLeftDetectorCollided)) + if (ShouldChangeDirection) isMovingRight = !isMovingRight; movement.Move(isMovingRight ? 1f : -1f); } - protected Vector2 GetCliffPositionInWorld(Vector2 cliffPosition) - => cliffPosition + (Vector2)transform.position; - - protected virtual void OnDrawGizmosSelected() - { - Gizmos.color = IsLeftDetectorCollided ? Color.green : Color.red; - Gizmos.DrawWireCube(leftCliffPosition, leftCliffDetectorSize); - - Gizmos.color = IsRightDetectorCollided ? Color.green : Color.red; - Gizmos.DrawWireCube(rightCliffPosition, rightCliffDetectorSize); - } + protected CollissionChecker GetCollissionCheckerOnChild(string childName) + => transform.Find(childName).GetComponent(); } } diff --git a/Assets/Scripts/Movement/CollissionChecker.cs b/Assets/Scripts/Movement/CollissionChecker.cs new file mode 100644 index 0000000..52cbef7 --- /dev/null +++ b/Assets/Scripts/Movement/CollissionChecker.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace Movement +{ + public class CollissionChecker : MonoBehaviour + { + private Collider2D[] nonAllocColliderArray = new Collider2D[5]; + + public LayerMask LayerMask = ~((1 << 6) | (1 << 7)); // Everything except the "Player" and "Enemy" layer + public bool IsCollided => Physics2D.OverlapBoxNonAlloc(transform.position, transform.localScale, 0, nonAllocColliderArray, LayerMask) != 0; + + public void OnDrawGizmosSelected() + { + Gizmos.color = IsCollided ? Color.green : Color.red; + Gizmos.DrawWireCube(transform.position, transform.localScale); + } + } +} diff --git a/Assets/Scripts/Movement/CollissionChecker.cs.meta b/Assets/Scripts/Movement/CollissionChecker.cs.meta new file mode 100644 index 0000000..dcaf224 --- /dev/null +++ b/Assets/Scripts/Movement/CollissionChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02e036b6321fff34cbd154fd665a8b23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: