private void Update() { timeToLive -= Time.deltaTime; if (timeToLive <= 0) { if (spawnOnDeath) { Spawnable.Spawn(spawnOnDeath, transform.position, transform.rotation); } Spawnable.Despawn(gameObject); } }
protected virtual void OnHitObject(Transform col, Vector3 position) { Vector3 impact = velocity * impactForce; col.Damage(new PointDamage(damage * damageMultiplier, position, velocity.normalized, velocity.magnitude * impactForce)); if (impactForce > 0) { var rb = col.GetComponentInParent <Rigidbody>(); if (rb) { rb.AddForce(impact, ForceMode.Impulse); } var rb2d = col.GetComponentInParent <Rigidbody2D>(); if (rb2d) { rb2d.AddForce(impact, ForceMode2D.Impulse); } } HitObject?.Invoke(col.gameObject, position); if (stopOnHit) { velocity = Vector3.zero; } if (destroyOnHit) { Spawnable.Despawn(gameObject, linger); fired = false; } if (impactSound) { impactSound.PlayAtPoint(transform.position); } if (impactPrefab) { Spawnable.Spawn(impactPrefab, position, transform.rotation, parentImpactObject ? col : null, true); } }