using UnityEngine; public class PhysicsProjectile : BasicProjectile { protected override void OnEnable() { remainingPierce = maxPierce; if (maxLifetime > 0f) Invoke(nameof(Despawn), maxLifetime); } public override void Launch(Vector2 direction, float speed = -1f, GameObject owner = null, float ignoreOwnerTime = 0.1f) { this.owner = owner; launched = true; Vector2 dir = direction.sqrMagnitude > 0.0001f ? direction.normalized : Vector2.right; float finalSpeed = (speed > 0f) ? speed : initialSpeed; rb.simulated = true; rb.bodyType = RigidbodyType2D.Dynamic; rb.linearVelocity = Vector2.zero; rb.angularVelocity = 0f; rb.AddForce(finalSpeed * rb.mass * dir, ForceMode2D.Impulse); transform.right = dir; if (owner != null && ignoreOwnerTime > 0f) StartCoroutine(IgnoreOwnerTemporarily(owner, ignoreOwnerTime)); } }