using UnityEngine; [RequireComponent(typeof(Rigidbody2D))] public class ShieldController : MonoBehaviour { public float followSpeed = 20f; // How fast the shield follows your finger public float pushForce = 10f; // Force applied to obstacles public LayerMask pushableLayers; // Only apply force to selected layers private Rigidbody2D rb; private Camera mainCam; void Start() { rb = GetComponent(); mainCam = Camera.main; } void Update() { if (Input.GetMouseButton(0)) // For both mobile and desktop { Vector2 touchPosition = mainCam.ScreenToWorldPoint(Input.mousePosition); Vector2 direction = (touchPosition - rb.position); rb.velocity = direction * followSpeed; } else { rb.velocity = Vector2.zero; // Stop when not dragging } } private void OnCollisionEnter2D(Collision2D collision) { if (((1 << collision.gameObject.layer) & pushableLayers) != 0) { Rigidbody2D otherRb = collision.rigidbody; if (otherRb != null && otherRb != rb) { Vector2 forceDir = collision.transform.position - transform.position; forceDir.Normalize(); otherRb.AddForce(forceDir * pushForce, ForceMode2D.Impulse); } } } }