// Detect & slice "sliceable" GameObjects whose bounding box intersects slicing plane private void Slice(MeshSlicer.CustomPlane plane) { SliceableObject[] sliceableTargets = (SliceableObject[])FindObjectsOfType(typeof(SliceableObject)); bool isSliced = false; foreach (SliceableObject sliceableTarget in sliceableTargets) { GameObject target = sliceableTarget.gameObject; if (plane.HitTest(target)) { if (target.GetComponent <SliceableObject>().isConvex) { MeshSlicer.SliceMesh(target, plane, true); //audioSource.PlayOneShot(sliceableTarget.sliceSound, 1.0f); isSliced = true; } else { MeshSlicer.SliceMesh(target, plane, false); //audioSource.PlayOneShot(sliceableTarget.sliceSound, 1.0f); isSliced = true; } } } if (!isSliced) { audioSource.PlayOneShot(sliceMissSound, 1.0f); } }
/// <summary> /// Defines which meshes must be cut /// </summary> /// <param name="cutPlane"></param> private void ImplementCut(Plane cutPlane) { SwipeEffect(); List <RawMeshData> res = new List <RawMeshData>(); for (int i = _objectsOnScene.Count - 1; i >= 0; i--) { res = MeshSlicer.SliceMesh(cutPlane, _objectsOnScene[i]); if (res.Count > 0) { Destroy(_objectsOnScene[i].gameObject); _objectsOnScene.RemoveAt(i); } foreach (var slice in res) { InstantiateSlice(slice); } } }