using UnityEngine; public class HorizontalBar : MonoBehaviour { public float firingSpeed = 0.03f; public GameObject horizontalBarrierPrefab; public bool canFireLeft = true; public bool canFireRight = true; private float firingTimer = 0.0f; private Bounds bounds; private bool canFire = true; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { SpriteRenderer spriteRenderer = GetComponent(); bounds = spriteRenderer.bounds; var walls = GameObject.FindGameObjectsWithTag("Wall"); if (walls.Length > 0) { foreach (var wall in walls) { if (wall.GetComponent().bounds.Intersects(bounds)) { canFire = false; break; } } } } // Update is called once per frame void FixedUpdate() { if (canFire) { firingTimer += Time.fixedDeltaTime; if (firingTimer >= firingSpeed) { if (canFireLeft) { Vector3 leftSide = new Vector3( bounds.min.x - (bounds.size.x / 2.0f), bounds.center.y, bounds.center.z ); var left = Instantiate(horizontalBarrierPrefab, leftSide, Quaternion.identity); var leftBarScript = left.GetComponent(); leftBarScript.firingSpeed = firingSpeed; leftBarScript.canFireRight = false; Physics2D.IgnoreCollision( left.GetComponent(), GetComponent(), true ); } if (canFireRight) { Vector3 rightSide = new Vector3( bounds.max.x + (bounds.size.x / 2.0f), bounds.center.y, bounds.center.z ); var right = Instantiate(horizontalBarrierPrefab, rightSide, Quaternion.identity); var rightBarScript = right.GetComponent(); rightBarScript.firingSpeed = firingSpeed; rightBarScript.canFireLeft = false; Physics2D.IgnoreCollision( right.GetComponent(), GetComponent(), true ); } canFire = false; } } } }