namespace VRTK.Examples { using UnityEngine; public class Breakable_Cube : MonoBehaviour { private float breakForce = 150f; private void Start() { GetComponent().collisionDetectionMode = CollisionDetectionMode.Continuous; } private void OnCollisionEnter(Collision collision) { var collisionForce = GetCollisionForce(collision); if (collisionForce > 0) { ExplodeCube(collisionForce); } } private float GetCollisionForce(Collision collision) { if ((collision.collider.name.Contains("Sword") && collision.collider.GetComponent().CollisionForce() > breakForce)) { return collision.collider.GetComponent().CollisionForce() * 1.2f; } if (collision.collider.name.Contains("Arrow")) { return 500f; } return 0f; } private void ExplodeCube(float force) { foreach (Transform face in GetComponentsInChildren()) { if (face.transform.name == transform.name) continue; ExplodeFace(face, force); } Destroy(gameObject, 10f); } private void ExplodeFace(Transform face, float force) { face.transform.SetParent(null); Rigidbody rb = face.gameObject.AddComponent(); rb.isKinematic = false; rb.useGravity = true; rb.AddExplosionForce(force, Vector3.zero, 0f); Destroy(face.gameObject, 10f); } } }