public override void PreContainerUpdate(FlexSolver solver, FlexContainer cntr, FlexParameters parameters)
    {
        if (enabled == false)
        {
            return;
        }

        if (firstRun)
        {
            firstRun = false;

            _cachedVertices    = skinnedMeshRenderer.sharedMesh.vertices;
            _cachedBindposes   = skinnedMeshRenderer.sharedMesh.bindposes;
            _cachedBoneWeights = skinnedMeshRenderer.sharedMesh.boneWeights;

            bool createAsset = vertMapAsset == null || rebuildVertMapAsset;

            if (vertMapAsset == null)
            {
#if UNITY_EDITOR
                vertMapAsset = ScriptableObject.CreateInstance <VertMapAsset>();
                AssetDatabase.CreateAsset(vertMapAsset, "Assets/" + this.name + "VertMapAsset.asset");
                AssetDatabase.SaveAssets();
                EditorUtility.FocusProjectWindow();
                Selection.activeObject = vertMapAsset;
#endif
            }

            if (createAsset)
            {
                vertMapAsset.vertexParticleMap = new List <int>();
                VertMapAssetBuilder vertMapAssetBuilder = new VertMapAssetBuilder(flexShapeMatching, vertMapAsset, skinnedMeshRenderer);
                vertMapAssetBuilder.CreateAsset();
            }

            particlePositions = new Vector3[vertMapAsset.particleRestPositions.Count];
            print("particle rest positions count:" + particlePositions.Length);
            //Debug.Log(this.skinnedMeshRenderer.name);
            UpdateParticlePositions();
        }
        else
        {
            if (timeDelta < refreshRate)
            {
                return;
            }

            // Only process once 30 times a second

            UpdateParticlePositions();
            MatchShapes(); // apply to soft body

            while (timeDelta >= refreshRate)
            {
                timeDelta -= refreshRate;
            }
        }
    }
 public VertMapAssetBuilder(FlexShapeMatching flexShapeMatching, VertMapAsset vertMapAsset, SkinnedMeshRenderer skin)
 {
     this.flexShapeMatching = flexShapeMatching;
     this.vertMapAsset      = vertMapAsset;
     this.skin = skin;
 }