// 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);
            }
        }
    }