using System.Collections; using System.Collections.Generic; using UnityEngine; public class Breakable : MonoBehaviour { [SerializeField] private GameObject _debrisRoot; [SerializeField] private float _minFallSpeed = 2f; [SerializeField] private float _explosionForce = 100f; [SerializeField] private float _explosionRadius = 2f; [SerializeField] private float _disappearTime = 3f; private Rigidbody _rb; private bool _broken = false; void Start() { _rb = GetComponent(); _debrisRoot.SetActive(false); } void OnCollisionEnter(Collision collision) { if (_broken) return; if (_rb.velocity.y < -_minFallSpeed) Break(collision.GetContact(0).point); } void Break(Vector3 contactPoint) { _broken = true; _debrisRoot.SetActive(true); _debrisRoot.transform.parent = null; Rigidbody[] pieces = _debrisRoot.GetComponentsInChildren(); foreach (var piece in pieces) { piece.velocity = _rb.velocity; piece.AddExplosionForce(_explosionForce, contactPoint, _explosionRadius); } Destroy(_debrisRoot, _disappearTime); Destroy(gameObject); } }