VertexAnimationClipInfo getOrAddAnimationInfo(string aniResName)
    {
        aniResName = aniResName.ToLower();
        VertexAnimationClipInfo clipInfo = null;

        AnimationClipInfos.TryGetValue(aniResName, out clipInfo);

        if (clipInfo != null)
        {
            return(clipInfo);
        }

        var asset = Resources.Load <TextAsset>(aniResName);

        byte[] clipData = null;
        if (asset != null)
        {
            clipData = Resources.Load <TextAsset>(aniResName).bytes;
        }
        if (clipData == null)
        {
            Debug.LogError("animation clip data is null:" + aniResName);
            return(null);
        }

        clipInfo = new VertexAnimationClipInfo();

        ByteBufferReader bbuffer = new ByteBufferReader(clipData);
        int Count = bbuffer.ReadInt();

        for (int i = 0; i < Count; i++)
        {
            ClipMeshData meshData = GetMeshData(bbuffer);
            clipInfo.clipTotalTimeLen += meshData.timeLenth;
            clipInfo.clipLenghts.Add(meshData.timeLenth);
            clipInfo.everyClipFrameTimePoints.Add(new Vector2(meshData.Frame2TimePoint, meshData.Frame3TimePoint)); //,meshData.Frame4TimePoint
            clipInfo.clipMeshs.Add(meshData.GenMesh());
        }

        bbuffer.Close();
        clipData = null;

        AnimationClipInfos.Add(aniResName, clipInfo);
        return(clipInfo);
    }