using UnityEngine; public class VerticalBar : MonoBehaviour { public float firingSpeed = 0.03f; public GameObject verticalBarrierPrefab; public bool canFireTop = true; public bool canFireBottom = 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 (canFireTop) { Vector3 topSide = new Vector3( bounds.center.x, bounds.max.y + (bounds.size.y / 2.0f), bounds.center.z ); var top = Instantiate(verticalBarrierPrefab, topSide, Quaternion.identity); var topBarScript = top.GetComponent(); topBarScript.firingSpeed = firingSpeed; topBarScript.canFireBottom = false; Physics2D.IgnoreCollision( top.GetComponent(), GetComponent(), true ); } if (canFireBottom) { Vector3 bottomSide = new Vector3( bounds.center.x, bounds.min.y - (bounds.size.y / 2.0f), bounds.center.z ); var bottom = Instantiate(verticalBarrierPrefab, bottomSide, Quaternion.identity); var bottomBarScript = bottom.GetComponent(); bottomBarScript.firingSpeed = firingSpeed; bottomBarScript.canFireTop = false; Physics2D.IgnoreCollision( bottom.GetComponent(), GetComponent(), true ); } canFire = false; } } } }