Files
ScienceLab.WeightAndMass/Assets/Scripts/Breakable.cs
2026-04-07 03:14:32 +03:00

46 lines
1.2 KiB
C#

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<Rigidbody>();
_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<Rigidbody>();
foreach (var piece in pieces)
{
piece.velocity = _rb.velocity;
piece.AddExplosionForce(_explosionForce, contactPoint, _explosionRadius);
}
Destroy(_debrisRoot, _disappearTime);
Destroy(gameObject);
}
}